/* brand.css owns colour, type, spacing and radius tokens. This game sets only
   its accent plus the two board-specific surface tints. */
:root{--accent:#6fdcc8;--accent-deep:#44ae9a;--accent-ink:#102622;}
*{box-sizing:border-box}body{font-size:var(--fs-sm);line-height:1.6}button,input,select{font:inherit}button,a,input,select,summary{outline-offset:5px}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}button,a{touch-action:manipulation}a{color:inherit;text-decoration:none}[hidden]{display:none!important}.button{background:var(--raised);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--text);padding:var(--s2) var(--s4);min-height:44px;transition:background .15s,border-color .15s;font-weight:600;font-size:var(--fs-xs);white-space:nowrap}.button:active{background:#2c2b3b;border-color:#555269}@media(hover:hover){.button:hover{background:#2c2b3b;border-color:#555269}}.button.primary{background:var(--human);border-color:var(--human);color:#171025}.button.primary:active{background:#c8b8ff}@media(hover:hover){.button.primary:hover{background:#c8b8ff}}.button.subtle{background:transparent}.button.selected{border-color:var(--human);color:var(--human)}.title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--s6)}.eyebrow{color:var(--subtle);font-size:var(--fs-2xs);font-weight:700;letter-spacing:2px}.separator{padding:0 var(--s2)}.title-dot{color:var(--human)}.subtitle{color:var(--muted);margin:var(--s2) 0 0;font-size:var(--fs-xs)}.workspace{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(310px,1fr);gap:var(--s5)}.game-card,.insight-card,.analytics-card{overflow:hidden}.card-top{display:flex;align-items:center;justify-content:space-between;padding:var(--s5) var(--s5);border-bottom:1px solid var(--line)}.card-top h2{font-size:var(--fs-2xs);letter-spacing:1.7px;font-weight:600;margin:0;color:var(--muted)}.pill{font-size:var(--fs-2xs);letter-spacing:1px;text-transform:uppercase;border:1px solid var(--line);padding:3px var(--s2);border-radius:var(--radius-xl);color:var(--muted);display:inline-flex;align-items:center;gap:var(--s1)}.pill.live{color:var(--jev);border-color:#284b43}.scoreboard{display:grid;grid-template-columns:1fr 35px 1fr;align-items:center;margin:var(--s5) var(--s6) 0}.score-card{position:relative}.score-card.is-turn.human{background:color-mix(in srgb,var(--human) 18%,var(--surface));border-color:color-mix(in srgb,var(--human) 45%,var(--line))}.score-card.is-turn.jev{background:color-mix(in srgb,var(--jev) 18%,var(--surface));border-color:color-mix(in srgb,var(--jev) 45%,var(--line))}.score-label{font-size:var(--fs-2xs);letter-spacing:1px;font-weight:650;display:flex;gap:var(--s2);align-items:center}.score-label>span:last-child:not(.player-mark):not(#opponent-name){margin-left:auto;font-size:var(--fs-2xs);color:var(--human)}#jev-turn{color:var(--jev)}.player-mark{display:inline-block;width:6px;height:6px;border-radius:2px}.human-dot{background:var(--human)}.jev-dot{background:var(--jev)}.score-value{font-size:var(--fs-num-lg);line-height:1.3;font-weight:650;letter-spacing:-1px;margin-top:var(--s1)}.human .score-value{color:var(--human)}.jev .score-value{color:var(--jev)}.score-unit{font-size:var(--fs-2xs);color:var(--muted)}.score-vs{text-align:center;font-size:var(--fs-2xs);color:var(--subtle);font-weight:600}.board-wrap{padding:var(--s5) var(--s6) var(--s5);max-width:510px;width:100%;margin:auto;--fit-reserve:300px}.board{--fit-max:444px;width:100%;margin-inline:auto;display:grid;grid-template-columns:12px 1fr 12px 1fr 12px 1fr 12px 1fr 12px;grid-template-rows:12px 1fr 12px 1fr 12px 1fr 12px 1fr 12px;aspect-ratio:1;position:relative;isolation:isolate}.dot{width:8px;height:8px;border-radius:50%;background:#e2deef;align-self:center;justify-self:center;z-index:4;pointer-events:none;box-shadow:0 0 0 3px var(--surface)}.edge{border:0;padding:0;background:transparent;position:relative;z-index:3;justify-self:center;align-self:center;display:flex;align-items:center;justify-content:center;min-width:0;min-height:0;opacity:1!important}.edge.h{width:calc(100% - 18px);min-width:44px;height:var(--tap);min-height:var(--tap)}.edge.v{width:var(--tap);min-width:var(--tap);height:calc(100% - 18px);min-height:44px}.edge:before{content:"";position:absolute;background:#363345;border-radius:var(--radius-sm);pointer-events:none}.edge.h:before{height:3px;width:calc(100% + 30px)}.edge.v:before{width:3px;height:calc(100% + 30px)}.edge.available:focus-visible:before,.edge.available:active:before,.edge.available.is-active:before{background:var(--human);box-shadow:0 0 14px color-mix(in srgb,var(--human) 19%,transparent)}@media(hover:hover){.edge.available:hover:before{background:var(--human);box-shadow:0 0 14px color-mix(in srgb,var(--human) 19%,transparent)}}.edge.owned-human:before{background:var(--human)}.edge.owned-jev:before{background:var(--jev)}.edge.last:before{box-shadow:0 0 14px currentColor}.box-cell{display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);align-self:stretch;justify-self:stretch;margin:0;z-index:0;font-size:var(--fs-sm);color:var(--subtle);font-weight:650}.box-cell.owned-human{background:#b5a1ff20;color:var(--human)}.box-cell.owned-jev{background:#65dac81b;color:var(--jev)}.turn-line{display:flex;align-items:center;gap:var(--s2);margin:0 var(--s5);padding:var(--s3) 0;border-top:1px solid var(--line)}.status-light{width:5px;height:5px;border-radius:50%;background:var(--jev);display:inline-block;flex-shrink:0}.turn-line p{font-size:var(--fs-xs);margin:0;flex:1}.turn-line>span:last-child{font-size:var(--fs-2xs);letter-spacing:1px;color:var(--subtle)}.game-controls{display:flex;gap:var(--s3);align-items:center;padding:var(--s4) var(--s5);border-top:1px solid var(--line);flex-wrap:wrap}.compact-label{font-size:var(--fs-2xs);color:var(--subtle);letter-spacing:1px;display:grid;gap:2px}.compact-label select{padding:2px var(--s4) 2px 0;background:transparent;border:0;min-height:27px;color:var(--text);font-size:var(--fs-2xs);letter-spacing:0}.check-label{font-size:var(--fs-2xs);color:var(--muted);display:flex;align-items:center;gap:var(--s1)}input[type=checkbox]{accent-color:var(--human);width:15px;height:15px}select{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--raised);padding:var(--s2) var(--s3);color:var(--text);max-width:100%;min-height:40px}.accessible-moves{font-size:var(--fs-2xs);color:var(--muted);padding:0 var(--s5) var(--s4)}.accessible-moves summary{cursor:pointer}.accessible-moves label{display:block;margin-top:var(--s2)}.inline{display:flex;gap:var(--s2);align-items:center;margin-top:var(--s2)}.notice{padding:var(--s3) var(--s5);border-top:1px solid #806344;color:#eed4ae;background:#30271e;font-size:var(--fs-2xs)}.insight-card{display:flex;flex-direction:column}.opponent-state{padding:var(--s5) var(--s5) var(--s4);display:flex;align-items:center;gap:var(--s3)}.agent-icon{border:1px solid #51436e;background:var(--human-bg);color:var(--human);width:45px;height:45px;display:grid;place-items:center;font-size:var(--fs-xl);border-radius:var(--radius);font-weight:650}.opponent-state h3{font-size:var(--fs-sm);margin:0;font-weight:600}.opponent-state p{margin:1px 0 0;font-size:var(--fs-2xs);color:var(--muted)}.pipeline{display:flex;align-items:center;justify-content:space-between;margin:0 var(--s5);font-size:var(--fs-2xs);color:var(--muted);border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--s2) var(--s3)}.pipeline i{font-style:normal;color:var(--subtle)}.pipeline.busy{border-color:var(--human)}.decision-hero{padding:var(--s6) var(--s5) var(--s5);display:flex;flex-direction:column;gap:3px}.decision-hero .eyebrow{font-size:var(--fs-2xs);letter-spacing:1.5px}.decision-hero strong{font-size:var(--fs-num-lg);font-weight:550;letter-spacing:-1px;color:var(--jev);line-height:1.5}.source-label{font-size:var(--fs-2xs);color:var(--muted)}.mini-grid{display:grid;grid-template-columns:1fr 1fr;margin:0 var(--s5);border-top:1px solid var(--line);border-left:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}.mini-grid>div{padding:var(--s4);border-right:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:var(--s1)}.mini-grid span{font-size:var(--fs-2xs);color:var(--muted)}.mini-grid strong{font-size:var(--fs-lg);font-weight:500;letter-spacing:-.5px}.factor-list{margin:var(--s5) var(--s5);padding-top:var(--s4);border-top:1px solid var(--line);font-size:var(--fs-2xs);color:var(--muted)}.factor{display:flex;align-items:center;justify-content:space-between;margin:var(--s2) 0;gap:var(--s2)}.factor b{color:var(--text);font-size:var(--fs-2xs);font-weight:550}.insight-footer{border-top:1px solid var(--line);padding:var(--s4) var(--s5);margin-top:auto;font-size:var(--fs-2xs);color:var(--muted);line-height:1.9}.tiny-dot{display:inline-block;width:4px;height:4px;background:var(--human);border-radius:50%;margin-right:var(--s1)}.muted{color:var(--subtle)}.analytics-card{margin-top:var(--s5)}.analytics-heading{display:flex;align-items:center;justify-content:space-between;padding:var(--s5) var(--s5) var(--s5);gap:var(--s4)}.analytics-heading h2{font-size:var(--fs-xl);letter-spacing:-.5px;font-weight:500;margin:var(--s2) 0 0}.analytics-heading .eyebrow{font-size:var(--fs-2xs)}.export-actions{display:flex;gap:var(--s2)}.tabs{display:flex;border-bottom:1px solid var(--line);padding:0 var(--s5);gap:var(--s5);overflow-x:auto}.tab{border:0;background:none;color:var(--muted);padding:var(--s3) 0 var(--s4);font-size:var(--fs-2xs);white-space:nowrap;border-bottom:2px solid transparent}.tab.active{color:var(--human);border-bottom-color:var(--human)}#event-count{font-size:var(--fs-2xs);background:var(--raised);padding:2px var(--s1);border-radius:var(--radius-sm);margin-left:4px}.tab-panel{padding:var(--s5) var(--s5) var(--s5)}.metric-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--s3);margin-bottom:var(--s5)}.metric-grid>div{border-right:1px solid var(--line);display:flex;flex-direction:column;gap:var(--s2)}.metric-grid>div:last-child{border:0}.metric-grid>div>span{font-size:var(--fs-2xs);color:var(--muted)}.metric-grid strong{font-size:var(--fs-num-sm);font-weight:500;letter-spacing:-.7px}.metric-grid strong>span{font-size:var(--fs-xs);color:var(--subtle);letter-spacing:0}.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s4)}.chart-box{background:#15151f;border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--s4) var(--s4) var(--s2)}.chart-box h3{font-size:var(--fs-2xs);letter-spacing:1px;color:var(--muted);font-weight:500;display:flex;justify-content:space-between;margin:0 0 var(--s2)}.chart-box h3 span{font-size:var(--fs-2xs);color:var(--subtle)}svg{width:100%;height:auto;overflow:visible}.chart-grid-line{stroke:#2b2a3b;stroke-width:1;stroke-dasharray:3 5}.chart-human{stroke:var(--human);fill:none;stroke-width:2.5}.chart-jev{stroke:var(--jev);fill:none;stroke-width:2.5}.chart-bar{fill:var(--human);opacity:.8}.chart-text{fill:var(--subtle);font-size:var(--fs-2xs);font-family:var(--font)}.overview-bottom{display:grid;grid-template-columns:1fr 1fr;gap:var(--s6);margin-top:var(--s5)}.overview-bottom h3{font-size:var(--fs-2xs);letter-spacing:1.2px;font-weight:500;color:var(--subtle)}.record-row{display:flex;justify-content:space-between;gap:var(--s4);margin:var(--s2) 0;font-size:var(--fs-2xs);color:var(--muted)}.record-row strong{font-weight:500;color:var(--text);text-align:right}.audit-result{font-size:var(--fs-2xs);color:var(--jev);margin:var(--s4) 0 0}.panel-toolbar{display:flex;justify-content:space-between;gap:var(--s4);align-items:center;margin-bottom:var(--s4);color:var(--muted);font-size:var(--fs-2xs)}.panel-toolbar p{margin:0}.panel-toolbar label{display:flex;align-items:center;gap:var(--s2);flex-shrink:0}.panel-toolbar select{font-size:var(--fs-2xs);max-width:240px}.table-scroll{overflow:auto;max-height:550px}table{border-collapse:collapse;width:100%;text-align:left;font-size:var(--fs-2xs);white-space:nowrap}th{font-size:var(--fs-2xs);font-weight:600;color:var(--muted);letter-spacing:.7px;text-transform:uppercase;background:#1b1b27;position:sticky;top:0}td,th{padding:var(--s3) var(--s3);border-bottom:1px solid var(--line)}td{color:var(--muted)}tr.selected-row td{color:var(--human);background:#b5a1ff0a}.fine-print{font-size:var(--fs-2xs);color:var(--subtle);margin-top:var(--s4);line-height:1.8}.timeline{max-height:550px;overflow:auto}.event{border-bottom:1px solid var(--line);padding:var(--s2) var(--s1)}.event summary{font-size:var(--fs-2xs);cursor:pointer;color:var(--muted)}.event summary b{font-weight:500;color:var(--text);margin:0 var(--s3)}.event pre{font-size:var(--fs-2xs);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--muted);max-height:360px;overflow:auto;background:#111119;padding:var(--s3);border-radius:var(--radius-sm)}.scope-tabs{display:flex;gap:var(--s2)}.page-footer{display:flex;align-items:center;justify-content:space-between;gap:var(--s4);padding:var(--s5) 0 var(--s2);color:var(--subtle);font-size:var(--fs-2xs)}.page-footer>div{letter-spacing:1px}.page-footer>div>span{margin:0 var(--s2)}.page-footer label{display:flex;align-items:center;gap:var(--s1)}.page-footer input{width:12px;height:12px}.replay-layout{display:grid;grid-template-columns:minmax(210px,350px) 1fr;gap:var(--s7);align-items:center}.replay-board{aspect-ratio:1}.replay-controls>strong{display:block;font-size:var(--fs-num-lg);color:var(--human);font-weight:500;margin:var(--s4) 0}.replay-controls>p{font-size:var(--fs-xs);color:var(--muted)}.replay-controls input[type=range]{width:100%;accent-color:var(--human)}.replay-line-human{stroke:var(--human);stroke-width:3;stroke-linecap:round}.replay-line-jev{stroke:var(--jev);stroke-width:3;stroke-linecap:round}.replay-line-empty{stroke:#3c374a;stroke-width:2}.replay-dot{fill:var(--text)}.replay-box-human{fill:#b5a1ff26}.replay-box-jev{fill:#65dac826}.replay-text{fill:var(--muted);font:12px var(--font)}dialog{color:var(--text);border:1px solid #4a435f;background:var(--surface);border-radius:var(--radius-lg);padding:var(--s5);max-width:570px;width:calc(100vw - 40px);box-shadow:0 35px 100px #0008}dialog::backdrop{background:#05050cbf;backdrop-filter:blur(3px)}.dialog-top{display:flex;gap:var(--s4);align-items:center;justify-content:space-between;margin-bottom:var(--s4)}.dialog-top h2{font-size:var(--fs-xl);font-weight:550;letter-spacing:-.6px;margin:0}dialog p{font-size:var(--fs-xs);color:var(--muted)}dialog h3{font-size:var(--fs-xs);margin:var(--s4) 0 var(--s1)}.export-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s2)}.toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);padding:var(--s3) var(--s5);border:1px solid #5c516d;background:#292234;border-radius:var(--radius-sm);box-shadow:0 10px 35px #0008;font-size:var(--fs-xs);max-width:90vw;z-index:99}
@media(min-width:1280px){.board-wrap{max-width:none;padding-top:var(--s5);padding-bottom:var(--s5)}.scoreboard{margin-left:var(--s6);margin-right:var(--s6)}}
@media(max-width:899px){.workspace{grid-template-columns:minmax(0,1.45fr) minmax(285px,1fr);gap:var(--s4)}.game-controls{gap:var(--s2)}.insight-card .card-top,.card-top{padding:var(--s4)}.mini-grid{margin:0 var(--s4)}.opponent-state,.decision-hero{padding-left:var(--s4);padding-right:var(--s4)}.pipeline,.factor-list{margin-left:var(--s4);margin-right:var(--s4)}.metric-grid{grid-template-columns:repeat(3,1fr);row-gap:var(--s5)}.metric-grid>div:nth-child(3){border:0}.scoreboard{margin:var(--s4) var(--s4) 0}.score-card{padding:var(--s3)}.score-label{font-size:var(--fs-2xs)}.score-label>span:last-child:not(.player-mark):not(#opponent-name){font-size:var(--fs-2xs)}.board-wrap{padding-left:var(--s5);padding-right:var(--s5)}.page-footer{flex-wrap:wrap}}
@media(max-width:600px){.title-row{margin-bottom:var(--s5)}.subtitle{font-size:var(--fs-2xs)}.workspace{grid-template-columns:1fr}.game-card{max-width:600px;width:100%;margin:auto}.insight-card{display:grid;grid-template-columns:1fr 1fr}.insight-card>.card-top{grid-column:1/-1}.opponent-state{grid-column:1/-1;padding:var(--s4)}.pipeline{grid-column:1/-1;margin-bottom:var(--s2)}.decision-hero{grid-column:1;padding-top:var(--s4);padding-bottom:var(--s2)}.mini-grid{grid-column:2;margin:var(--s3) var(--s4) var(--s3) 0}.mini-grid>div{padding:var(--s2)}.mini-grid strong{font-size:var(--fs-md)}.mini-grid span{font-size:var(--fs-2xs)}.factor-list{grid-column:1/-1;margin:var(--s2) var(--s4) var(--s4);padding-top:var(--s2)}.insight-footer{grid-column:1/-1;padding:var(--s3) var(--s4)}.analytics-heading{padding:var(--s4);align-items:flex-start}.analytics-heading h2{font-size:var(--fs-lg)}.analytics-heading .export-actions{flex-direction:column;gap:var(--s1)}.export-actions .button{padding:var(--s2) var(--s2);min-height:35px;font-size:var(--fs-2xs)}.tabs{padding:0 var(--s4);gap:var(--s5)}.tab-panel{padding:var(--s4)}.chart-grid{grid-template-columns:1fr;gap:var(--s3)}.overview-bottom{gap:var(--s5)}.panel-toolbar{align-items:flex-start;flex-direction:column;gap:var(--s3)}.replay-layout{grid-template-columns:1fr;gap:var(--s4)}.replay-board{max-width:310px;width:100%;margin:auto}.metric-grid strong{font-size:var(--fs-xl)}.metric-grid>div>span{font-size:var(--fs-2xs)}.page-footer{gap:var(--s2);line-height:2}.page-footer #connection{width:100%;order:3}}
@media(max-width:600px){.board-wrap{padding-left:var(--s4);padding-right:var(--s4);--fit-reserve:260px}.game-controls{padding:var(--s4);gap:var(--s2)}.scoreboard{margin:var(--s4) var(--s4) 0}.score-label{font-size:var(--fs-2xs)}.score-label>span:last-child:not(.player-mark):not(#opponent-name){display:none}.score-card{padding:var(--s3)}.mini-grid{margin-right:var(--s3)}.mini-grid>div{padding:var(--s2)}.overview-bottom{grid-template-columns:1fr}.title-row{gap:var(--s2)}.insight-card .card-top{padding:var(--s4)}.card-top h2{font-size:var(--fs-2xs)}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
.r0{grid-row:1}.c0{grid-column:1}
.r1{grid-row:2}.c1{grid-column:2}
.r2{grid-row:3}.c2{grid-column:3}
.r3{grid-row:4}.c3{grid-column:4}
.r4{grid-row:5}.c4{grid-column:5}
.r5{grid-row:6}.c5{grid-column:6}
.r6{grid-row:7}.c6{grid-column:7}
.r7{grid-row:8}.c7{grid-column:8}
.r8{grid-row:9}.c8{grid-column:9}
/* Shell integration. brand.css owns the header; one set of secondary controls
   lives in #jv-controls, which brand.js moves between the sheet and the header. */
.jv-tagline{margin:var(--s3) 0 0;font-size:var(--fs-xs);letter-spacing:2px;color:var(--subtle)}
.jv-status strong{color:var(--text)}.jv-status strong:first-of-type{color:var(--human)}.jv-status strong:last-of-type{color:var(--jev)}
.jv-hero{margin-bottom:var(--s6)}
@media(min-width:900px){#jv-controls .jv-sheet-item{border:1px solid var(--line);border-radius:var(--radius);font-weight:600;max-width:13rem;overflow:hidden;text-overflow:ellipsis}#jv-controls .jv-sheet-item:active{border-color:var(--accent)}@media(hover:hover){#jv-controls .jv-sheet-item:hover{border-color:var(--accent)}}}
@media(max-height:560px){.jv-hero{margin-bottom:var(--s4)}.subtitle{display:none}.scoreboard{margin-top:var(--s3)}.score-value{font-size:var(--fs-num-sm);margin-top:2px}.score-unit{display:none}.board-wrap{padding-top:var(--s3);padding-bottom:var(--s3);--fit-reserve:210px}.card-top{padding:var(--s3) var(--s4)}}
