:root{--bg:#f4f6f3;--card:#fff;--ink:#172019;--muted:#69746b;--line:#dce4dc;--soft:#edf3ed;--accent:#193f2b;--accent2:#2c6b49;--good:#176b3a;--bad:#a43a32;--warn:#95651c;--shadow:0 10px 28px rgba(28,44,34,.06)}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.topbar{max-width:1380px;margin:auto;padding:20px 24px 10px;display:flex;justify-content:space-between;align-items:center;gap:16px}.brand{display:flex;align-items:center;gap:12px}.brand-mark{display:grid;place-items:center;width:44px;height:44px;border-radius:13px;background:var(--accent);color:#fff;font-size:12px;font-weight:900;letter-spacing:.05em}h1,h2,p{margin-top:0}h1{font-size:22px;margin-bottom:0}h2{font-size:20px;margin-bottom:0}.eyebrow{font-size:10px;font-weight:900;letter-spacing:.13em;color:var(--muted);margin-bottom:5px}.top-actions,.controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.tabs{max-width:1380px;margin:auto;padding:0 24px;display:flex;gap:4px;overflow:auto;border-bottom:1px solid var(--line)}.tab{border:0;background:transparent;color:var(--muted);padding:12px 14px;font-weight:800;font-size:12px;white-space:nowrap;border-bottom:3px solid transparent;cursor:pointer}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.count-pill{display:inline-grid;place-items:center;min-width:18px;height:18px;border-radius:9px;background:var(--soft);font-size:10px;margin-left:3px}main{max-width:1380px;margin:auto;padding:16px 24px 50px;display:grid;gap:16px}.view{display:none;gap:16px}.active-view{display:grid}.panel{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:20px;box-shadow:var(--shadow)}.match-picker{display:flex;justify-content:space-between;align-items:center;gap:20px}.match-picker select{min-width:480px}.section-head{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:18px}.controls-head{align-items:flex-end}.grid.two{display:grid;grid-template-columns:1.35fr 1fr;gap:16px}.match-summary{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;text-align:center;gap:22px}.team-name{font-size:28px;font-weight:950}.match-mid strong{font-size:16px}.match-meta{font-size:12px;color:var(--muted);margin-top:5px}.badge{display:inline-flex;align-items:center;padding:6px 9px;border-radius:999px;font-size:10px;font-weight:900}.badge.good{background:#e5f4e9;color:var(--good)}.badge.bad{background:#f9e9e6;color:var(--bad)}.badge.warn{background:#fff1d8;color:var(--warn)}.badge.neutral{background:var(--soft);color:var(--muted)}select,input{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:10px;padding:10px 12px;font:inherit}button{border:0;border-radius:10px;padding:10px 13px;background:var(--accent);color:#fff;font:inherit;font-weight:850;cursor:pointer}button:hover{filter:brightness(1.05)}button.ghost{background:var(--soft);color:var(--accent)}button.small{padding:7px 10px;font-size:11px}.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.stat{background:var(--soft);padding:12px;border-radius:12px}.stat b{font-size:18px;display:block}.stat span{font-size:10px;color:var(--muted)}.lineup-columns{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}.lineup-team{border:1px solid var(--line);border-radius:12px;padding:12px}.lineup-team h3{font-size:14px;margin:0 0 8px}.player-chip{display:inline-flex;margin:3px 3px 0 0;padding:4px 7px;border-radius:8px;background:var(--soft);font-size:10px}.player-chip.bench{background:#fff1d8}.player-chip.emergency{background:#f7e5e3}.model-note{margin-top:14px;border-left:3px solid var(--accent2);padding:10px 12px;background:var(--soft);border-radius:0 10px 10px 0;font-size:12px}.model-note strong{display:block;margin-bottom:3px}.top-leg-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}.top-leg{border:1px solid var(--line);border-radius:12px;padding:12px}.top-leg .p{font-size:20px;font-weight:950;color:var(--good)}.top-leg .sel{font-size:12px;font-weight:800;margin:4px 0}.top-leg .meta{font-size:10px;color:var(--muted)}.player-card-list{display:grid;gap:12px}.player-card{border:1px solid var(--line);border-radius:14px;padding:14px}.player-card-head{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:10px}.player-card-head h3{margin:0;font-size:17px}.player-market-row{display:grid;grid-template-columns:210px 100px 90px 1fr 110px;gap:10px;align-items:center;padding:9px 0;border-top:1px solid var(--line);font-size:12px}.prob{font-weight:950}.prob.high{color:var(--good)}.prob.mid{color:var(--warn)}.prob.low{color:var(--bad)}.recent-strip{display:flex;gap:4px;overflow:auto}.recent-cell{min-width:48px;padding:5px 6px;border-radius:7px;text-align:center;font-size:10px;font-weight:800}.recent-cell.hit{background:#e5f4e9;color:var(--good)}.recent-cell.miss{background:#f9e9e6;color:var(--bad)}.recent-cell.na{background:var(--soft);color:var(--muted)}.add-leg{background:var(--soft);color:var(--accent);padding:7px 9px;font-size:10px}.multi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.multi-card{border:1px solid var(--line);border-radius:14px;padding:14px}.multi-top{display:flex;justify-content:space-between;gap:12px}.multi-strategy{display:block;font-size:9px;color:var(--muted);text-transform:uppercase;font-weight:900}.multi-title{font-size:17px}.multi-legs{display:grid;gap:7px;margin:14px 0}.multi-leg{display:flex;justify-content:space-between;gap:8px;background:var(--soft);padding:8px 10px;border-radius:9px;font-size:11px}.multi-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.metric{font-size:10px;color:var(--muted)}.metric b{display:block;color:var(--ink);font-size:14px}.multi-actions{margin-top:12px}.send-builder{width:100%;background:var(--soft);color:var(--accent)}.value-box{border-top:1px solid var(--line);margin-top:12px;padding-top:12px;display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end}.value-box label{display:grid;gap:5px;font-size:10px;color:var(--muted)}.value-result{grid-column:1/-1;font-size:11px;min-height:18px}.value-result.good{color:var(--good);font-weight:900}.value-result.bad{color:var(--bad);font-weight:900}.builder-grid{grid-template-columns:1.15fr 1fr}.builder-legs,.candidate-list{display:grid;gap:8px}.builder-leg,.candidate{display:grid;grid-template-columns:1fr auto auto;gap:8px;align-items:center;border:1px solid var(--line);border-radius:10px;padding:9px 10px;font-size:11px}.remove-leg{background:#f9e9e6;color:var(--bad);padding:6px 8px}.candidate button{padding:6px 8px}.builder-summary{margin-top:12px;display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.dependency-box{margin-top:10px;border:1px solid var(--line);border-radius:12px;padding:10px;background:var(--soft);font-size:11px}.dependency-head,.dependency-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.dependency-head{margin-bottom:6px}.dependency-head span,.dependency-row small{color:var(--muted)}.dependency-row{padding:5px 0;border-top:1px solid var(--line)}.builder-value{margin-top:14px}.wide-search{width:100%;margin-bottom:10px}.note{font-size:11px;color:var(--muted);margin:12px 0 0}.field-layout{display:grid;grid-template-columns:280px 1fr;gap:16px}.tactics-panel{align-self:start}.field-control{display:grid;gap:6px;font-size:11px;color:var(--muted);margin-top:18px}.legend{display:grid;gap:8px;margin-top:18px;font-size:11px;color:var(--muted)}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px}.field-dot{background:#2d6849}.bench-dot{background:#c89537}.emerg-dot{background:#ae5149}.oval-panel{padding:12px}.oval{min-height:600px;border:3px solid #d7ded6;border-radius:50% / 42%;background:radial-gradient(circle at center,#f9fbf8 0,#eef4ed 75%);padding:42px;display:grid;grid-template-columns:1fr 1fr;gap:28px;align-items:center}.field-team{display:grid;gap:8px}.field-team h3{text-align:center;margin:0 0 5px}.field-player{border:1px solid var(--line);background:#fff;border-radius:10px;padding:8px;text-align:center;font-size:10px;cursor:pointer}.field-player.bench{background:#fff4de}.field-player.emergency{background:#fae9e7}.field-player:hover{outline:2px solid #aac9b5}.empty{padding:24px;text-align:center;color:var(--muted)}.check{font-size:11px;color:var(--muted)}
@media(max-width:1050px){.top-leg-grid{grid-template-columns:repeat(3,1fr)}.multi-grid{grid-template-columns:1fr 1fr}.builder-grid,.field-layout{grid-template-columns:1fr}.oval{min-height:auto;border-radius:30px;grid-template-columns:1fr 1fr}.player-market-row{grid-template-columns:1.4fr 80px 70px 1fr 90px}}
@media(max-width:760px){.topbar{align-items:flex-start}.match-picker{align-items:stretch;flex-direction:column}.match-picker select{min-width:0;width:100%}.grid.two,.multi-grid,.lineup-columns,.oval{grid-template-columns:1fr}.match-summary{grid-template-columns:1fr}.top-leg-grid{grid-template-columns:1fr 1fr}.player-market-row{grid-template-columns:1fr 70px 70px}.recent-strip{grid-column:1/-1}.player-market-row .add-leg{grid-column:3}.stat-grid{grid-template-columns:1fr 1fr}.controls{align-items:stretch}.controls input,.controls select{flex:1;min-width:130px}}

.scenario-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.scenario-card{border:1px solid var(--line);border-radius:12px;padding:11px}.scenario-top{display:flex;justify-content:space-between;gap:12px;font-size:12px}.scenario-top span{font-weight:900}.scenario-bar{height:7px;background:var(--soft);border-radius:999px;overflow:hidden;margin-top:9px}.scenario-bar i{display:block;height:100%;background:var(--green);border-radius:999px}.tactical-preview{display:grid;gap:8px}.tactic-line{display:flex;justify-content:space-between;gap:12px;padding:9px 10px;background:var(--soft);border-radius:9px;font-size:12px}.tactic-line span{color:var(--muted)}.team-style-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.team-style-card{border:1px solid var(--line);border-radius:13px;padding:13px}.profile-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;margin-top:10px}.scenario-detail{display:grid;gap:8px}.synergy-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.synergy-card{display:grid;grid-template-columns:1fr auto;gap:8px;border:1px solid var(--line);border-radius:13px;padding:12px}.synergy-score{font-size:18px;font-weight:900}.synergy-score.pos{color:var(--green)}.synergy-score.neg{color:var(--red)}.synergy-metrics{grid-column:1/-1;display:flex;gap:7px;flex-wrap:wrap}.synergy-metrics span{background:var(--soft);border-radius:8px;padding:5px 7px;font-size:10px;color:var(--muted)}.synergy-metrics b{color:var(--ink)}.mini-context{display:grid;gap:6px;padding:10px;background:var(--soft);border-radius:11px;font-size:11px}.field-tactical-summary{margin:12px 0}.tab[data-view="tactics"]{white-space:nowrap}@media(max-width:900px){.scenario-grid,.team-style-grid,.synergy-grid{grid-template-columns:1fr}}

.risk-line{margin-top:6px;font-size:11px;color:var(--warn);font-weight:600}.risk-line strong{color:var(--bad)}

.context-line{display:flex;gap:8px;flex-wrap:wrap;font-size:11px;margin:5px 0;color:var(--muted)}.context-line span{padding:2px 6px;border-radius:999px;background:rgba(127,127,127,.08)}.context-line.ctx-up span:first-child{font-weight:700}.context-line.ctx-down span:first-child{font-weight:700}

.role-line{font-weight:700;margin-top:3px}.role-line.ctx-up{color:#157347}.role-line.ctx-down{color:#b02a37}.role-line.ctx-flat{color:#667085}


/* Validation dashboard */
.validation-hero{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px}
.validation-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.validation-card{border:1px solid var(--line,#dfe4ea);border-radius:14px;padding:14px;background:rgba(255,255,255,.68)}
.validation-card-top{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:10px}
.validation-metrics{display:grid;gap:6px;font-size:.88rem;color:var(--muted,#667085)}
.validation-table-wrap{overflow:auto}
.validation-table{width:100%;border-collapse:collapse;min-width:760px}
.validation-table th,.validation-table td{padding:10px 9px;border-bottom:1px solid var(--line,#e6e9ef);text-align:right;font-size:.88rem}
.validation-table th:first-child,.validation-table td:first-child{text-align:left}
.good-text{color:#16803a;font-weight:800}.bad-text{color:#b42318;font-weight:800}.neutral-text{color:#667085;font-weight:700}
.bad.badge,.badge.bad{background:#fee4e2;color:#b42318}

.final-lock-banner{grid-column:1/-1;display:flex;justify-content:space-between;gap:12px;align-items:center;padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:var(--panel);font-size:13px}.final-lock-banner strong{font-size:13px}.final-lock-banner span{opacity:.75;text-align:right}@media(max-width:700px){.final-lock-banner{align-items:flex-start;flex-direction:column}.final-lock-banner span{text-align:left}}


.shadow-timeline{position:relative;display:grid;gap:0;margin-top:18px}.shadow-timeline:before{content:"";position:absolute;left:13px;top:16px;bottom:16px;width:2px;background:var(--border)}.shadow-step{position:relative;display:grid;grid-template-columns:28px 1fr;gap:12px;padding:10px 0}.shadow-dot{width:12px;height:12px;border-radius:50%;background:var(--panel);border:2px solid var(--muted);margin:8px 0 0 8px;z-index:1}.shadow-step.recorded .shadow-dot{background:var(--text);border-color:var(--text)}.shadow-step.final-step .shadow-dot{width:16px;height:16px;margin-left:6px}.shadow-step-body{border:1px solid var(--border);border-radius:14px;padding:13px 15px;background:var(--panel)}.shadow-step.recorded .shadow-step-body{box-shadow:0 4px 14px rgba(0,0,0,.04)}.shadow-step.final-step .shadow-step-body{border-width:2px}.shadow-step-head{display:flex;justify-content:space-between;gap:14px;align-items:flex-start}.shadow-step-head>div{display:grid;gap:3px}.shadow-step-head strong{font-size:14px}.shadow-step-head span{font-size:12px;color:var(--muted)}.shadow-delta{font-size:12px;font-weight:700;margin-top:10px}.shadow-metrics{display:flex;gap:12px;flex-wrap:wrap;margin-top:9px;font-size:12px;color:var(--muted)}.shadow-metrics b{color:var(--text)}.shadow-hash,.shadow-pending{margin-top:8px;font-size:11px;color:var(--muted)}

/* Parallel-test environment marker */
.parallel-test-banner{position:sticky;top:0;z-index:1000;display:flex;justify-content:center;align-items:center;gap:10px;padding:8px 14px;border-bottom:1px solid var(--line,#dfe4ea);background:#fff7d6;color:#5f4b00;font-size:11px;letter-spacing:.02em}.parallel-test-banner strong{font-size:11px;letter-spacing:.09em}.parallel-test-banner span{opacity:.85}@media(max-width:760px){.parallel-test-banner{align-items:flex-start;flex-direction:column;gap:2px}}

/* Player Markets parity v17 */
.player-market-option{grid-template-columns:minmax(180px,220px) 90px 90px minmax(320px,1fr) minmax(250px,320px) 110px}
.market-select-wrap{display:flex;align-items:center}.threshold-select{width:100%;font-weight:850;padding:8px 10px}.fair-odds{font-weight:800;color:var(--muted)}
.recent-block{display:grid;gap:5px}.recent-caption{font-size:9px;font-weight:850;color:var(--muted);letter-spacing:.02em}.recent-strip{display:flex;gap:4px;overflow:auto}.recent-cell{min-width:44px}
@media(max-width:980px){.player-market-option{grid-template-columns:minmax(170px,1.2fr) 70px 80px 1fr}.player-market-option .context-line{grid-column:1/-1}.player-market-option .recent-block{grid-column:1/-2}.player-market-option .add-leg{grid-column:-2/-1}}
@media(max-width:760px){.player-market-option{grid-template-columns:1fr 72px 82px}.player-market-option .context-line,.player-market-option .recent-block{grid-column:1/-1}.player-market-option .add-leg{grid-column:3}}
