*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}button,input{font:inherit;color:inherit}button{cursor:pointer}:root{--bg:#0a0e13;--surface:#121922;--surface-raised:#182230;--border:#28333f;--text:#e7edf3;--text-muted:#8996a3;--threat:#e0525f;--ops:#e0a83f;--adversary:#9d6bd1;--tools:#4fa8e0;--roles:#3fbf8f;--font-header:"IBM Plex Mono", monospace;--font-body:"IBM Plex Sans", sans-serif;--font-mono:"IBM Plex Mono", monospace;--radius:10px}body{background:var(--bg);color:var(--text);font-family:var(--font-body);min-height:100vh;transition:background .22s,color .22s;position:relative}#root{min-height:100vh}body:before{content:"";pointer-events:none;z-index:0;position:fixed;inset:0}body[data-texture=grid]:before{background-image:linear-gradient(#ffffff06 1px,#0000 1px),linear-gradient(90deg,#ffffff06 1px,#0000 1px);background-size:28px 28px}body[data-texture=brass]:before{background:radial-gradient(at 15% -10%,#b8974f38,#0000 45%),radial-gradient(at 100% 110%,#b8974f29,#0000 40%);box-shadow:inset 0 0 140px #3c2d0f40}body[data-texture=paper]:before{background-image:repeating-linear-gradient(0deg,#00000004 0,#0000 1px 2px),repeating-linear-gradient(90deg,#00000003 0,#0000 1px 3px);box-shadow:inset 0 0 120px #5a4b2d1a}body[data-texture=steel]:before{background-image:repeating-linear-gradient(135deg,#ffffff05 0 2px,#0000 2px 14px);box-shadow:inset 0 0 160px #00000080}body[data-texture=neon]:before{background-image:linear-gradient(#b24bff0d 1px,#0000 1px),linear-gradient(90deg,#22d3ee0d 1px,#0000 1px);background-size:40px 40px}.app-shell{z-index:1;max-width:34rem;margin:0 auto;padding:1.25rem 1rem 3rem;position:relative}.brand-row{align-items:center;gap:.6rem;margin-bottom:1.4rem;display:flex}.brand-row .brand-mark{background:linear-gradient(135deg, var(--threat), var(--adversary));border-radius:4px;flex:none;width:1.5rem;height:1.5rem}.brand-row .brand-label{font-family:var(--font-header);letter-spacing:.24em;color:var(--text-muted);text-transform:uppercase;font-size:.72rem}.lede{color:var(--text-muted);margin:0 0 1.1rem;font-size:.92rem;line-height:1.5}.stack{flex-direction:column;gap:.75rem;display:flex}.row{gap:.5rem;display:flex}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:.9rem 1rem}.card+.card{margin-top:.9rem}.nav-tile{text-align:left;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;padding:1rem;transition:border-color .15s,transform .15s;display:block}.nav-tile:hover{transform:translateY(-1px)}.nav-tile .nav-tile-title{font-family:var(--font-header);margin-bottom:.2rem;font-weight:700}.nav-tile .nav-tile-sub{color:var(--text-muted);font-size:.78rem}.nav-tile.tile-threat:hover{border-color:var(--threat)}.nav-tile.tile-tools:hover{border-color:var(--tools)}.nav-tile.tile-threat .nav-tile-title{color:var(--threat)}.nav-tile.tile-tools .nav-tile-title{color:var(--tools)}.label{font-family:var(--font-header);letter-spacing:.18em;text-transform:uppercase;color:var(--text-muted);margin-bottom:.45rem;font-size:.68rem;display:block}.theme-pick{text-align:left;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);width:100%;margin-bottom:.5rem;padding:.75rem;transition:border-color .15s;display:block}.theme-pick.active{background:var(--surface-raised);border-color:var(--roles)}.theme-pick .theme-pick-name{font-family:var(--font-header);font-weight:700}.theme-pick .theme-pick-tag{color:var(--text-muted);margin-top:.15rem;font-size:.74rem}.theme-pick.active .theme-pick-tag{color:var(--text);opacity:.75}.seg{gap:.5rem;display:flex}.seg button{border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);color:var(--text);font-family:var(--font-mono);flex:1;padding:.6rem;font-size:.85rem}.seg button.active{background:var(--roles);border-color:var(--roles);color:var(--bg);font-weight:700}input[type=text],input[type=number],input[type=email],input[type=password]{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);width:100%;color:var(--text);outline:none;padding:.7rem .8rem}input:focus{border-color:var(--roles)}.field+.field{margin-top:.6rem}.btn{border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);font-family:var(--font-header);padding:.75rem 1rem;font-size:.9rem;font-weight:700}.btn-primary{background:var(--roles);border-color:var(--roles);color:var(--bg);flex:1}.btn-primary:disabled{opacity:.5}.btn-ghost{background:var(--surface);color:var(--text-muted)}.btn-danger{background:var(--threat);border-color:var(--threat);color:#fff}.btn-block{width:100%}.error-text{color:var(--threat);font-size:.85rem}.role-pick{text-align:left;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);width:100%;margin-bottom:.4rem;padding:.6rem .7rem;font-size:.88rem;display:block}.role-pick.active{background:var(--tools);border-color:var(--tools);color:var(--bg);font-weight:700}.auth-block{border:1px dashed var(--border);border-radius:var(--radius);background:color-mix(in srgb, var(--surface-raised) 60%, transparent);padding:.8rem}.auth-block .auth-hint{color:var(--text-muted);margin:0 0 .6rem;font-size:.74rem;line-height:1.45}.signed-in-row{border-radius:var(--radius);background:color-mix(in srgb, var(--roles) 14%, var(--surface));border:1px solid var(--roles);justify-content:space-between;align-items:center;gap:.5rem;padding:.6rem .7rem;font-size:.82rem;display:flex}.signed-in-row .signed-in-email{color:var(--roles);font-weight:700}.link-btn{color:var(--text-muted);font-family:var(--font-body);background:0 0;border:none;padding:0;font-size:.78rem;text-decoration:underline}.game-header{border-radius:var(--radius);background:linear-gradient(135deg, color-mix(in srgb, var(--threat) 55%, var(--bg)), color-mix(in srgb, var(--adversary) 55%, var(--bg)));color:#fff;justify-content:space-between;align-items:center;margin-bottom:.9rem;padding:.85rem 1rem;display:flex}.game-header .gh-title{font-family:var(--font-header);font-size:.92rem;font-weight:700}.game-header .gh-sub{opacity:.82;margin-top:.1rem;font-size:.72rem}.game-header .gh-actions{align-items:center;gap:.4rem;display:flex}.gh-btn{color:#fff;background:#00000047;border:none;border-radius:6px;align-items:center;gap:.3rem;padding:.35rem .5rem;font-size:.72rem;display:flex}.bar-row{margin-bottom:.9rem}.bar-top{justify-content:space-between;align-items:baseline;margin-bottom:.3rem;display:flex}.bar-top .bar-label{font-family:var(--font-header);letter-spacing:.16em;text-transform:uppercase;color:var(--text-muted);font-size:.68rem}.bar-top .bar-value{font-family:var(--font-mono);font-size:1.05rem;font-weight:700}.bar-top .bar-value small{color:var(--text-muted);font-size:.7rem;font-weight:400}.bar-track{background:color-mix(in srgb, var(--border) 60%, transparent);border:1px solid var(--border);border-radius:99px;height:.65rem;overflow:hidden}.bar-fill{height:100%;transition:width .2s}.bar-adj{gap:.3rem;margin-top:.35rem;display:flex}.bar-adj button{border:1px solid var(--border);background:var(--surface-raised);font-size:.76rem;font-family:var(--font-mono);border-radius:6px;flex:1;padding:.35rem}.bar-adj button:disabled{opacity:.5;cursor:default}.stat-grid{grid-template-columns:1fr 1fr;gap:.75rem;margin-top:.7rem;display:grid}.stat-block .stat-btn{border:1px solid var(--border);background:var(--surface-raised);width:100%;font-family:var(--font-mono);border-radius:8px;padding:.55rem;font-size:.85rem}.pm-row{gap:.3rem;display:flex}.pm-row button{border:1px solid var(--border);background:var(--surface-raised);border-radius:8px;flex:1;padding:.5rem}.pm-row .pm-val{text-align:center;font-weight:700;font-family:var(--font-mono);flex:1;padding:.5rem}.stage-grid{grid-template-columns:1fr 1fr;gap:.5rem;display:grid}.stage-tile{border-radius:var(--radius);text-align:left;border:1px solid;padding:.65rem .7rem}.stage-tile .stage-state{font-family:var(--font-header);text-transform:uppercase;letter-spacing:.08em;align-items:center;gap:.35rem;font-size:.68rem;font-weight:700;display:flex}.stage-tile .stage-name{opacity:.85;margin-top:.3rem;font-size:.76rem}.stage-dot{border-radius:50%;width:.55rem;height:.55rem;display:inline-block}.stage-hidden{background:color-mix(in srgb, var(--border) 35%, var(--surface));border-color:var(--border);color:var(--text-muted)}.stage-detected{background:color-mix(in srgb, var(--threat) 18%, var(--surface));border-color:var(--threat);color:var(--threat)}.stage-scoped{background:color-mix(in srgb, var(--ops) 18%, var(--surface));border-color:var(--ops);color:var(--ops)}.stage-locked{background:color-mix(in srgb, var(--roles) 18%, var(--surface));border-color:var(--roles);color:var(--roles)}.ic-panel{border-color:color-mix(in srgb, var(--threat) 40%, var(--border))}.ic-panel .label{color:var(--threat)}.ic-actions{gap:.5rem;margin-bottom:.6rem;display:flex}.ic-actions button{font-family:var(--font-header);border:none;border-radius:8px;flex:1;padding:.6rem;font-size:.82rem;font-weight:700}.ic-actions button:disabled{opacity:.6}.ic-loud{background:var(--threat);color:#fff}.ic-quiet{background:var(--surface-raised);color:var(--text);border:1px solid var(--border)!important}.chip-wrap{flex-wrap:wrap;gap:.35rem;margin-bottom:.6rem;display:flex}.chip{font-size:.72rem;font-family:var(--font-mono);border:1px solid var(--border);background:var(--surface-raised);color:var(--text-muted);border-radius:99px;padding:.32rem .55rem}.chip.active{background:var(--adversary);border-color:var(--adversary);color:#fff}.dc-row{gap:.6rem;margin-bottom:.6rem;display:flex}.dc-field{flex:1}.dc-field .dc-caption{color:var(--text-muted);margin-bottom:.25rem;font-size:.72rem}.roll-btn{border-radius:var(--radius);background:var(--text);width:100%;color:var(--bg);font-family:var(--font-header);border:none;justify-content:center;align-items:center;gap:.5rem;padding:.7rem;font-weight:700;display:flex}.roll-btn:disabled{opacity:.6}.roll-result{text-align:center;font-family:var(--font-mono);border-radius:8px;margin-top:.6rem;padding:.55rem;font-size:.9rem;font-weight:700}.roll-hit{background:color-mix(in srgb, var(--roles) 22%, var(--surface));color:var(--roles)}.roll-miss{background:color-mix(in srgb, var(--threat) 22%, var(--surface));color:var(--threat)}.roster-row{justify-content:space-between;padding:.2rem 0;font-size:.86rem;display:flex}.roster-row .me{color:var(--roles);font-weight:700}.roster-row .role{color:var(--text-muted);font-size:.76rem}.log-list{flex-direction:column;gap:.35rem;max-height:11rem;display:flex;overflow-y:auto}.log-item{color:var(--text-muted);border-bottom:1px solid var(--border);padding-bottom:.35rem;font-size:.76rem}.story-list{flex-direction:column;gap:.55rem;max-height:16rem;display:flex;overflow-y:auto}.story-item{color:var(--text);background:var(--surface-raised);border-left:2px solid var(--adversary);border-radius:8px;padding:.55rem .65rem;font-size:.84rem;line-height:1.5}.story-item .story-time{font-family:var(--font-mono);color:var(--text-muted);margin-top:.3rem;font-size:.65rem;display:block}.story-empty{color:var(--text-muted);padding:.4rem .1rem;font-size:.82rem;font-style:italic}.story-export-link{color:var(--tools);font-size:.74rem;text-decoration:none}.story-export-link:hover{text-decoration:underline}.conn-dot{background:var(--text-muted);border-radius:50%;width:.45rem;height:.45rem;margin-right:.35rem;display:inline-block}.conn-dot.live{background:var(--roles)}.foot-note{color:var(--text-muted);text-align:center;margin-top:1rem;padding:0 .5rem;font-size:.7rem;line-height:1.5}body[data-texture=neon] .theme-pick.active,body[data-texture=neon] .btn-primary,body[data-texture=neon] .stage-detected,body[data-texture=neon] .stage-scoped,body[data-texture=neon] .stage-locked,body[data-texture=neon] .chip.active{box-shadow:0 0 14px color-mix(in srgb, var(--roles) 55%, transparent)}body[data-texture=neon] .stage-detected{box-shadow:0 0 14px color-mix(in srgb, var(--threat) 55%, transparent)}body[data-texture=neon] .stage-scoped{box-shadow:0 0 14px color-mix(in srgb, var(--ops) 55%, transparent)}body[data-texture=paper] .game-header:after{content:"";width:0;position:absolute}@media (width<=380px){.stat-grid,.stage-grid{grid-template-columns:1fr 1fr}}
