
:root:root{
  --page-text:#e9d8a6;--page-soft:#cdc09a;--page-muted:#b1ab8c;--on-fill:#e9d8a6;
  --text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted);
  --bg:#001219;--surface:#01242e;--high:#02313e;--raise:#034352;--line:#005f73;--line-soft:#034352;--line-strong:#06798a;--wrong:#022c39;
  --primary:#0a9396;--accent:#ee9b00;--blue:var(--accent);--blue-soft:var(--page-text);--gold:var(--accent);--toggle-on:#ee9b00;
  --mint:#94d2bd;--green:#1b8a6b;--danger:#bb3e03;--red:#bb3e03;--red-fill:#ae2012;
  --palette-match:#1b8a6b;--palette-close:#ca6702;--palette-miss:#ae2012;
  color-scheme:dark;scrollbar-color:var(--line) var(--bg);
}
:root:root[data-mode="light"]{
  --page-text:#001219;--page-soft:#12303a;--page-muted:#44575a;
  --bg:#e9d8a6;--surface:#f3e8c6;--high:#dfcd96;--raise:#d3bf82;--line:#b7a36a;--line-soft:#d3bf82;--line-strong:#8f7d49;--wrong:#dfcd96;
  --primary:#005f73;--accent:#8a4702;--toggle-on:#ca6702;
  --mint:#12614c;--green:#12614c;--danger:#9b2226;--red:#9b2226;
  color-scheme:light;
}

/* Flat ocean theme. :root:root keeps these rules above each page's own defaults. */
:root:root :is(.welcome-orbit,.splash-orbit){border-color:var(--line);box-shadow:0 0 30px #005f7344}
:root:root :is(.welcome-orbit i,.splash-orbit b){background:var(--high);border-color:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.variant-choice,.difficulty-tab,.hunt-difficulty-tab,.tutorial-launch,.splash-help){background:var(--high);border-color:var(--line);color:var(--text);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.variant-choice.selected,.difficulty-tab.active,.hunt-difficulty-tab.active){background:var(--line);border-color:var(--toggle-on);box-shadow:0 0 0 1px #005f7388;--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.play-button,.splash-play,.next-difficulty,.hunt-next-tier,.candidate-browse,.tutorial-next,.tutorial-actions .primary,.classic-tutorial-actions button:last-child,.modal-actions .primary,.instructions .primary,.hunt-guess-core){background:var(--primary);border-color:var(--primary);color:var(--text);box-shadow:0 0 24px #0a939644;--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill)}
:root:root :is(.welcome-title em,.splash-inner h1 em,.splash-orbit i,.welcome-orbit>span){color:var(--primary)}
:root:root :is(.welcome>small,.welcome>p,.splash-inner p,.splash-back,.variant-choice small,.difficulty-tab small,.hunt-difficulty-tab small){color:var(--muted)}
:root:root :is(.game-shell,.map-card,.grid-card,.result,.signal-map-card,.tutorial-demo-shell,.tutorial-demo-map-card){background:var(--surface);border-color:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(dialog,.classic-tutorial,.tutorial-panel,.tutorial-shell){background:var(--surface);border-color:var(--line);color:var(--text);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.modal-head,.top,.topbar){background:var(--bg);border-color:var(--line-soft);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.icon-btn,.help,.top>a,button.close,.modal-head .close,.win-close,.tutorial-actions button:not(.primary),.classic-tutorial-actions button:not(:last-child)){background:var(--high);border-color:var(--line);color:var(--text);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}

/* Classic guesses, search, help, and map. */
:root:root :is(.searchbox,.tutorial-demo-search,#librarySearch){background:var(--surface);border-color:var(--line);color:var(--text);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.results,.candidate-dialog .modal-head){background:var(--surface);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.guess-card,.tutorial-guess-demo){background:var(--surface);border-color:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.pip,.hint-pips i,.tutorial-demo-pips i){background:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.pip.used,.hint-card.ready .hint-pips i){background:var(--blue);box-shadow:0 0 9px #ee9b0088;--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root :is(.clue,.studio-item,.icon-card,.tutorial-guess-clue,.signal-node,.signal-group,.group-trait,.orbit-tap,.tutorial-map-node,.candidate-game,.library-game,.trait-face,.map-node){background:var(--high);border-color:var(--line);color:var(--text);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.clue.exact,.studio-item.exact,.icon-card.exact,.tutorial-guess-clue.green,.signal-node.known,.signal-group.known,.group-trait.known,.orbit-tap.known,.trait.correct .trait-back,.map-node.known,.tutorial-map-node.green){background:var(--palette-match);border-color:var(--green);color:var(--text);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill)}
:root:root :is(.clue.close,.icon-card.close,.tutorial-guess-clue.gold,.signal-node.close,.group-trait.close,.orbit-tap.close,.tutorial-map-node.gold){background:var(--palette-close);border-color:var(--gold);color:var(--text);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill)}
:root:root :is(.trait.wrong .trait-back,.mismatch-row.strike){background:var(--palette-miss);border-color:var(--red);color:var(--text);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill)}
:root:root .new-sticker{color:var(--blue)}
:root:root :is(.signal-map,.signal-cover,.group-portrait,.map-center,.tutorial-map-core){background:var(--surface);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.signal-link,.signal-orbit-ring,.group-orbit){stroke:var(--line);border-color:var(--line);background:transparent}
:root:root .map-line{background:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.signal-link.known,.signal-link.close){background:transparent}
:root:root .signal-link.known{stroke:var(--green)}
:root:root .signal-link.close{stroke:var(--gold)}
:root:root :is(.signal-cover,.group-portrait,.map-center,.tutorial-map-core){border-color:var(--primary);box-shadow:0 0 24px #0a939644}
:root:root :is(.signal-question,.group-portrait>span,.map-center){color:var(--primary)}
:root:root :is(.signal-map-head span,.deck-section .deck-progress){color:var(--blue)}
:root:root .deck-section.complete .deck-progress{color:var(--green)}
:root:root .signal-hint-readout b{color:var(--mint)}
:root:root .signal-hints{border-color:var(--line)}
:root:root .meta-divider{background-color:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.hint-card.locked .hint-face,.hint-strip .hint-card:not(.ready):not(.revealed) .hint-face,.tutorial-demo-hint){background:var(--high);border-color:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.hint-face,.hint-choice,.hint-unlock-dialog,.classic-tutorial-visual,.tutorial-visual){background:var(--high);border-color:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.hint-card.ready .hint-face,.hint-strip .hint-card.ready .hint-face){background:#8a4702;border-color:var(--gold);box-shadow:0 0 14px #ee9b0066;--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root :is(.hint-card.revealed .hint-face,.hint-strip .hint-card.revealed .hint-face,.hint-reveal,.candidate-browse.hint-card.ready){background:var(--palette-match);border-color:var(--green);box-shadow:0 0 12px #0a939655;--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root :is(.hint-back,.hint-copy){background:var(--high);border-color:var(--toggle-on);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.hint-progress,.hint-progress i){background:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root .hint-card.ready .hint-progress i{background:var(--green);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root :is(.tutorial-demo-nav,.tutorial-stage){background:var(--bg);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.tutorial-demo-map-card,.tutorial-stage .tutorial-map-demo){background:var(--surface);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.tutorial-map-demo line){stroke:var(--blue)}
:root:root :is(.tutorial-spotlight){border-color:var(--blue);box-shadow:0 0 0 9999px #000a0ed9,0 0 28px #ee9b0099}
:root:root :is(.tutorial-pointer,.hint-unlock-dialog button,.win-share,.action){background:var(--blue);color:var(--text);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill)}
:root:root :is(.classic-tutorial-progress i,.tutorial-progress i){background:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.classic-tutorial-progress i.active,.tutorial-progress i.active){background:var(--blue);box-shadow:0 0 9px #ee9b0088;--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root :is(.classic-tutorial.hunt-variant .tutorial-flips .good,.tutorial-flips .good){background:var(--palette-match);border-color:var(--green);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root :is(.classic-tutorial.hunt-variant .tutorial-flips .bad,.tutorial-flips .bad){background:var(--palette-miss);border-color:var(--red);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root :is(.classic-tutorial.hunt-variant .tutorial-mini-map .core,.tutorial-mini-map .core){background:var(--surface);border-color:var(--primary);color:var(--primary);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.classic-tutorial.hunt-variant .tutorial-mini-map .node,.tutorial-mini-map .node){background:var(--palette-match);border-color:var(--green);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root :is(.classic-tutorial.hunt-variant .tutorial-mini-map .node.two,.tutorial-mini-map .node.two){background:var(--high);border-color:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.classic-tutorial.hunt-variant .tutorial-guess,.tutorial-guess){background:var(--primary);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root :is(.classic-tutorial.hunt-variant .tutorial-list span,.tutorial-list span){background:var(--high);border-color:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.classic-tutorial.hunt-variant .tutorial-finish strong,.tutorial-finish strong){background:var(--primary);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}

/* Clue Hunt's outcome and chooser keep win/loss semantics. */
:root:root .hunt-splash{background:var(--bg);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.trait-front:hover,.deck-grid .trait-front:hover,.deck-grid .trait-front:active,.deck-grid .trait-front:focus){background:var(--high);border-color:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.result.won,.hunt-outcome,.mismatch-row.match){border-color:var(--green);box-shadow:0 0 24px #0a939655}
:root:root :is(.result.lost,.hunt-outcome.lost,.mismatch-row.strike){border-color:var(--red);box-shadow:0 0 24px #ae201255}
:root:root .mismatch-row.match{background:var(--palette-match);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root .mismatch-row.strike{background:var(--palette-miss);--text:var(--on-fill);--text-soft:var(--on-fill);--muted:var(--on-fill);color:var(--text)}
:root:root .outcome-answer img{border-color:var(--green);box-shadow:0 0 0 4px #0a939633,0 0 24px #0a939699}
:root:root :is(.tutorial-finish span,.result.lost .result-status,.hunt-outcome.lost .outcome-heading){color:var(--red)}
:root:root :is(.result-status,.outcome-heading){color:var(--green)}

/* The design is deliberately flat: semantic states use solid fills, never outlines or glows. */
:root:root *,
:root:root *::before,
:root:root *::after{border-color:transparent!important;box-shadow:none!important}
:root:root .tutorial-spotlight{box-shadow:0 0 0 9999px #000a0ed9!important}

/* Group containers do not receive a status class; derive their fill from child traits. */
:root:root .signal-map-card .group-trait.known,
:root:root .signal-map-card .orbit-expanded-card .group-trait.known,
:root:root .mobile-orbit .orbit-tap.known{background:var(--palette-match)!important;color:var(--text);--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important}
:root:root .signal-map-card .group-trait.close,
:root:root .signal-map-card .orbit-expanded-card .group-trait.close,
:root:root .mobile-orbit .orbit-tap.close{background:var(--palette-close)!important;color:var(--text);--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important}
:root:root .signal-map-card .signal-group:has(.group-trait.known){background:#125a48!important;--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important;color:var(--text)!important}
:root:root .signal-map-card .signal-group:has(.group-trait.known):not(:has(.group-trait:not(.known))){background:var(--palette-match)!important;--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important;color:var(--text)!important}
:root:root .signal-map-card .signal-group:has(.group-trait.close):not(:has(.group-trait.known)){background:#6b3a05!important;--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important;color:var(--text)!important}
:root:root .mobile-orbit .signal-group{background:transparent!important}
:root:root .mobile-orbit .orbit-tap{background:var(--high)!important;--text:var(--page-text)!important;--text-soft:var(--page-soft)!important;--muted:var(--page-muted)!important}
:root:root .mobile-orbit .orbit-tap.partial-known{background:#125a48!important;--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important;color:var(--text)!important}
:root:root .mobile-orbit .orbit-tap.known{background:var(--palette-match)!important;--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important;color:var(--text)!important}
:root:root .orbit-overlay .orbit-expanded-card:has(.group-trait.known){background:#125a48!important;--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important;color:var(--text)!important}
:root:root .orbit-overlay .orbit-expanded-card:has(.group-trait.known):not(:has(.group-trait:not(.known))){background:var(--palette-match)!important;--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important;color:var(--text)!important}
:root:root .orbit-overlay .orbit-expanded-card:has(.group-trait.close):not(:has(.group-trait.known)){background:#6b3a05!important;--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important;color:var(--text)!important}

/* Orbit strokes and the mystery-game circle are part of the map, not card borders. */
:root:root .signal-map-card .group-orbit,
:root:root .map::before{border-color:var(--line)!important;border-radius:50%!important}
:root:root .signal-map-card .group-portrait,
:root:root .map-center{border-color:var(--primary)!important;border-radius:50%!important}
:root:root .mobile-orbit .orbit-tap,
:root:root .mobile-orbit .signal-group,
:root:root .map-node{border-radius:12px!important}
:root:root .orbit-expanded-card{border-radius:15px!important}
:root:root .splash-orbit::before{border-color:var(--line)!important}
:root:root .hunt-difficulty-tab.won{background:var(--palette-match)!important;color:var(--text);--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important}
:root:root .hunt-difficulty-tab.lost{background:var(--palette-miss)!important;color:var(--text);--text:var(--on-fill)!important;--text-soft:var(--on-fill)!important;--muted:var(--on-fill)!important}
:root:root .hunt-difficulty-tab.won small,
:root:root .hunt-difficulty-tab.lost small{color:var(--text)!important}
:root:root .outcome-choice::before,
:root:root #trailer:not(:empty)::before{background:var(--line);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}

/* The Classic / Clue Hunt chooser is the one place an outline carries meaning. */
:root:root .variant-choice{border-color:var(--line)!important}
:root:root .variant-choice.selected{border-color:var(--toggle-on)!important}

/* The map sits directly on its card. */
:root:root .signal-map{background:transparent}
/* Unavailable clues read as empty slots rather than faded cards. */
:root:root :is(.deck-grid .trait.resolved:not(.flipped),.clues-locked .trait:not(.flipped)) .trait-face{background:var(--bg);--text:var(--page-text);--text-soft:var(--page-soft);--muted:var(--page-muted)}
:root:root :is(.deck-grid .trait.resolved:not(.flipped),.clues-locked .trait:not(.flipped)) .trait-face>*{opacity:.5}

/* No touch feedback colours: taps never flash, select text, or leave a hover/focus state behind. */
*{-webkit-tap-highlight-color:transparent}
button,a,[role="button"]{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
:root:root :is(button,a,[role="button"]):focus:not(:focus-visible){outline:none}
@media(hover:none){
  :root:root :is(button,a,[role="button"]):is(:hover,:active){outline:none!important}
  :root:root .play-button:hover,:root:root .difficulty-tab:not(:disabled):active{transform:none}
  :root:root .map-node:hover{transform:translate(-50%,-50%)}
}

/* Panels and dialogs scroll without a visible scrollbar. */
body *{scrollbar-width:none}
body *::-webkit-scrollbar{display:none}

/* Light / dark switch on the start screens. */
.mode-toggle{position:fixed;z-index:21;top:max(16px,env(safe-area-inset-top));right:max(16px,env(safe-area-inset-right));min-height:44px;padding:0 16px;border:0;border-radius:999px;background:var(--high);color:var(--text);font-size:.68rem;font-weight:900;letter-spacing:.08em;cursor:pointer}
/* Orbit captions sit outside their tile, on the card. */
:root:root .signal-map-card .mobile-orbit .orbit-caption{color:var(--page-text)!important}
