:root{
  --page:#0C1714; --surface:#12241F; --ink:#F1EADB; --muted:#9AA8A0; --line:#2A4239;
  --sq-light:#CBB88A; --sq-dark:#2B5247; --frame:#0A1311;
  --brass:#D4B06A; --brass-ink:#E3C98F; --signal:#E5675C;
  --gold-hi:#E3C98F; --gold-lo:#C9A45C; --hair:rgba(212,176,106,.3);
  --k-b:#A56BD0; --k-g:#4A90D9;
  --piece:#17211E; --piece-edge:#E3C98F;
  --shadow:0 30px 60px -30px rgba(0,0,0,.85);
  --serif:'Cormorant Garamond', Georgia, 'Times New Roman', serif;
  --caps:'Cinzel', Georgia, serif;
  --sans:'Schibsted Grotesk', 'Segoe UI', system-ui, -apple-system, sans-serif;
  color-scheme:dark;
}
:root{box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
html{scroll-padding-top:env(safe-area-inset-top,0px)}
*,*::before,*::after{box-sizing:inherit}
body{margin:0;overflow-x:clip;background:var(--page);color:var(--ink);font:400 16px/1.55 var(--sans);-webkit-font-smoothing:antialiased;min-height:100%}
button{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--brass);outline-offset:3px}
[hidden]{display:none !important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

.app{max-width:1180px;margin:0 auto;padding:18px clamp(16px,4vw,40px) 56px}
.top{display:flex;align-items:center;gap:16px;margin-bottom:clamp(24px,5vw,56px)}
.brand{display:inline-flex;align-items:center;gap:12px;text-decoration:none}
.brand-mark{display:block;width:40px;height:auto}
.brand-word{display:block;width:150px;height:auto}
body:has(#hub:not([hidden])) .brand-word{display:none}
.icon-btn{display:inline-flex;align-items:center;gap:8px;background:none;border:1px solid var(--hair);border-radius:999px;padding:8px 14px;font-size:14px;font-weight:500;cursor:pointer;color:var(--muted)}
.icon-btn:hover{color:var(--ink);border-color:var(--muted)}
.icon-btn svg{width:18px;height:18px}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:999px;padding:14px 22px;font-weight:600;font-size:16px;line-height:1;cursor:pointer;border:1.5px solid transparent;transition:background-color .15s, border-color .15s}
.btn.primary{background:linear-gradient(180deg,var(--gold-hi),var(--gold-lo));color:#0C1714}
.btn.primary:hover{background:linear-gradient(180deg,#EDD9A8,var(--gold-hi))}
.btn.ghost{background:transparent;border-color:rgba(212,176,106,.55);color:var(--brass-ink)}
.btn.ghost:hover{border-color:var(--brass);color:var(--ink)}

/* ---------- Hub ---------- */
.caps{font-family:var(--caps);font-size:13px;letter-spacing:.3em;color:var(--brass);text-transform:uppercase}
.hero{position:relative;margin:0 calc(50% - 50vw);border-bottom:1px solid var(--hair)}
.hero picture,.hero-art{display:block;width:100%;height:auto}
.hero-logo{position:absolute;left:50%;top:3.5%;width:min(26%,520px);height:auto;translate:-50% 0;filter:drop-shadow(0 6px 18px rgba(0,0,0,.65))}
.feature{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:clamp(28px,5vw,64px);align-items:center;margin-top:clamp(36px,5vw,64px);padding:clamp(24px,4vw,52px);background:var(--surface);border:1px solid var(--hair);border-radius:18px;box-shadow:var(--shadow)}
.feature h1{font-family:var(--serif);font-weight:600;font-size:clamp(52px,7vw,88px);line-height:.92;letter-spacing:-.01em;margin:14px 0 22px}
.feature h1 span{display:block}
.lede{font-size:clamp(17px,1.6vw,18px);max-width:34em;margin:0 0 28px;color:#B9C4BE}
.feature-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px 20px}
.best-note{font-size:15px;color:var(--muted);font-variant-numeric:tabular-nums}
.feature-art{margin:0;justify-self:end;width:min(100%,420px);padding:10px;background:var(--frame);border-radius:10px;box-shadow:0 0 0 1px rgba(212,176,106,.5),var(--shadow)}
.mini{display:block;width:100%;height:auto;border-radius:3px}
.mini .l{fill:var(--sq-light)} .mini .d{fill:var(--sq-dark)}
.mini .route{fill:none;stroke-width:.09;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 1.8s cubic-bezier(.5,0,.2,1) .35s forwards}
.mini .route.g{animation-delay:.75s}
.mini .stop{opacity:0;animation:fade .3s ease-out forwards}

@keyframes draw{to{stroke-dashoffset:0}}
@keyframes fade{to{opacity:1}}

.workshop{margin-top:clamp(56px,8vw,96px)}
.workshop-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px 32px;padding-bottom:18px;margin-bottom:26px;border-bottom:1px solid var(--hair)}
.workshop h2{font-family:var(--serif);font-weight:600;font-size:clamp(32px,4vw,46px);line-height:1.05;margin:8px 0 0}
.workshop-head p{margin:0;color:var(--muted);max-width:26em}
.drills{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}
.drills li{display:flex;flex-direction:column;gap:10px;padding:22px 20px;background:var(--surface);border:1px solid rgba(212,176,106,.18);border-radius:14px}
.d-name{font-family:var(--serif);font-weight:600;font-size:25px;line-height:1.05}
.d-desc{color:var(--muted);font-size:15px;flex-grow:1}
.d-state{font-family:var(--caps);font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--gold-lo)}
.site-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px;margin-top:clamp(56px,8vw,96px);padding-top:24px;border-top:1px solid var(--hair);color:var(--muted);font-size:14px}
.site-foot .caps{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:12px}
.site-foot img{width:26px;height:auto}

/* ---------- Game ---------- */
.game-head{display:flex;align-items:center;flex-wrap:wrap;gap:12px 20px;margin-bottom:14px}
/* the buttons sit together at the right */
.top > .brand{margin-right:auto}
.acct{display:inline-flex;align-items:center;gap:8px}
.acct[hidden],.acct [hidden]{display:none}
body:has(#hub[hidden]) .top{margin-bottom:12px}
body:has(#hub:not([hidden])) .top{margin-bottom:18px}
.game-head h1{font-family:var(--serif);font-weight:600;font-size:clamp(28px,3.4vw,38px);letter-spacing:-.01em;margin:0}
.back{display:inline-flex;align-items:center;gap:6px;background:none;border:0;padding:6px 0;color:var(--muted);cursor:pointer;font-weight:500}
.back:hover{color:var(--ink)}
.back svg{width:16px;height:16px}
.game-grid{--bw:max(300px,min(664px,calc(100vh - 230px)));display:grid;grid-template-columns:minmax(0,var(--bw)) minmax(260px,340px);grid-template-areas:"board panel" "results panel";column-gap:clamp(20px,3.5vw,44px);row-gap:6px;align-items:start;justify-content:start}
.board-col{grid-area:board;min-width:0}
.panel{grid-area:panel}
.results{grid-area:results;min-width:0;display:grid;gap:18px}

.board-frame{width:100%;padding:clamp(6px,1.1vw,11px);background:var(--frame);border-radius:12px;box-shadow:0 0 0 1px rgba(212,176,106,.5),var(--shadow)}
@supports (height:100dvh){.game-grid{--bw:max(300px,min(664px,calc(100dvh - 230px)))}}
.board{position:relative;width:100%;aspect-ratio:1;border-radius:4px;overflow:hidden;container-type:inline-size;touch-action:none;user-select:none;-webkit-user-select:none}
.squares{position:absolute;inset:0;display:grid;grid-template-columns:repeat(8,1fr);grid-template-rows:repeat(8,1fr)}
.sq{position:relative;border:0;margin:0;padding:0;background:var(--sq-light);cursor:pointer;-webkit-tap-highlight-color:transparent}
.sq.dark{background:var(--sq-dark)}
.sq:focus-visible{outline:3px solid var(--brass);outline-offset:-3px;z-index:2}
.sq::before{content:"";position:absolute;inset:0;pointer-events:none}
.sq.goal::before{background:repeating-linear-gradient(135deg,color-mix(in oklab,var(--brass) 30%,transparent) 0 7%,transparent 7% 14%)}
/* Last move: the standard yellow tint, as on any chess site. */
.sq.last::before{background:rgba(255,236,61,.5)}
.sq.from::before{background:rgba(255,236,61,.38)}
.sq.homegoal{box-shadow:inset 0 0 0 .5cqi var(--kc),inset 0 0 2.6cqi color-mix(in oklab,var(--kc) 75%,transparent);animation:breathe 1.6s ease-in-out infinite}
@keyframes breathe{50%{box-shadow:inset 0 0 0 .5cqi var(--kc),inset 0 0 1cqi color-mix(in oklab,var(--kc) 40%,transparent)}}
.sq.hint::after{content:"";position:absolute;left:50%;top:50%;width:28%;height:28%;translate:-50% -50%;border-radius:50%;background:rgba(20,32,27,.3);pointer-events:none;transition:width .12s,height .12s}
.sq.dark.hint::after{background:rgba(241,234,219,.38)}
.sq.hint:hover::after{width:36%;height:36%}
.sq.closed{--nc:rgba(88,96,92,.8)}
.sq.dark.closed{--nc:rgba(214,218,212,.85)}
.sq.closed::after{content:"";position:absolute;left:50%;top:50%;width:38%;height:38%;translate:-50% -50%;border-radius:50%;box-sizing:border-box;border:.6cqi solid var(--nc);background:linear-gradient(135deg,transparent 45%,var(--nc) 45% 55%,transparent 55%);pointer-events:none}
.mk{position:absolute;inset:0;pointer-events:none;display:none}
.sq[data-mk] .mk{display:block}
.sq[data-mk="wp"] .mk::before,.sq[data-mk="wpdone"] .mk::before{content:"";position:absolute;left:50%;top:50%;width:40%;height:40%;translate:-50% -50%;rotate:45deg;border:.55cqi solid var(--kc);border-radius:2px;box-shadow:0 0 1.4cqi color-mix(in oklab,var(--kc) 60%,transparent)}
.sq[data-mk="wpdone"] .mk::before{width:24%;height:24%;background:var(--kc);opacity:.5;box-shadow:none}
.sq[data-mk="first"] .mk::before{content:"";position:absolute;inset:13%;border-radius:50%;border:.5cqi dashed var(--kc)}
.sq[data-mk="first"] .mk::after{content:"1st";position:absolute;right:6%;top:5%;font-size:2.1cqi;font-weight:700;line-height:1;color:var(--kc)}
.fx{position:absolute;inset:0;background:var(--signal);opacity:0;pointer-events:none}
.sq.gone{cursor:not-allowed}
.sq.gone .mk{display:block}
.sq.gone .mk::before{content:"";position:absolute;left:14%;top:18%;width:72%;height:72%;border-radius:50%;background:#3B2419;box-shadow:inset 0 -.7cqi 0 #5A331F,0 0 0 .35cqi var(--piece-edge);animation:char .4s ease-out}
.sq.gone .cf,.sq.gone .cr{opacity:.35}
@keyframes char{from{opacity:0}}
.fxcv{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.trail .sol{fill:none;stroke-width:.09;stroke-linecap:round;stroke-linejoin:round}
.trail.reviewing line:not(.sol){opacity:.5;stroke-width:.055}
.trail.reviewing circle{opacity:.4 !important}
.trail.only-b [data-k="g"],.trail.only-g [data-k="b"]{display:none}
.review-bar{display:flex;align-items:center;gap:8px;margin-top:12px;padding:6px;background:var(--surface);border:1px solid var(--hair);border-radius:999px}
.rb-btn{flex:none;width:44px;height:44px;display:grid;place-items:center;padding:0;border:1px solid rgba(212,176,106,.45);border-radius:50%;background:transparent;color:var(--brass-ink);cursor:pointer}
.rb-btn:hover:not(:disabled){border-color:var(--brass);color:var(--ink)}
.rb-btn:disabled{opacity:.35;cursor:default}
.rb-btn svg{width:18px;height:18px}
.rb-main{border:0;background:linear-gradient(180deg,var(--gold-hi),var(--gold-lo));color:#0C1714}
.rb-main:hover:not(:disabled){color:#0C1714;background:linear-gradient(180deg,#EDD9A8,var(--gold-hi))}
.rb-label{flex:1 1 auto;min-width:0;text-align:center;font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.review-bar .i-play,.review-bar.paused .i-pause{display:none}
.review-bar.paused .i-play{display:block}
.pieces .piece{transition:opacity .35s}
.pieces.only-b .piece:not(.bishop)[data-k="g"],.pieces.only-g .piece:not(.bishop)[data-k="b"]{opacity:0}
.aim{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:2}
.aim line{stroke:var(--signal);stroke-width:.05;stroke-dasharray:.12 .1;stroke-linecap:round;opacity:.6}
.piece.bishop,.arrow{pointer-events:none;z-index:4}
.ascend{position:absolute;left:0;top:0;width:12.5%;height:12.5%;pointer-events:none;z-index:5;--piece:#FFFFFF}
.ascend .rig{opacity:.88}
.ascend .rig svg{filter:drop-shadow(0 0 1cqi rgba(255,255,255,.9))}
.asc-halo{position:absolute;left:34%;top:-16%;width:44%;height:auto;overflow:visible}
.asc-halo ellipse{fill:none;stroke:#F2C94C;stroke-width:8;filter:drop-shadow(0 0 .6cqi rgba(242,201,76,.9))}
.asc-cloud{position:absolute;left:-12%;bottom:-22%;width:124%;height:auto;overflow:visible}
.asc-cloud path{fill:#FFFFFF;stroke:var(--piece-edge);stroke-width:3;stroke-linejoin:round}
.board.dead .squares,.board.dead .pieces,.board.dead .fxcv,.board.dead .trail{filter:grayscale(.75) brightness(.92);transition:filter 1.4s ease}
.piece.bishop{--kc:var(--piece-edge)}
.arrow{position:absolute;left:0;top:0;width:12.5%;height:12.5%}
.arrow svg{width:100%;height:100%;overflow:visible}
.bp-part{fill:#2F3A36;stroke:var(--piece-edge);stroke-width:3;stroke-linejoin:round}
.bp-hi{fill:none;stroke:#5E6E67;stroke-width:3;stroke-linecap:round}
.bp-eye{fill:#FBF8EF;stroke:var(--piece-edge);stroke-width:1.5}
.bp-pupil{fill:var(--piece-edge)}
.bp-brow,.bp-slit{fill:none;stroke:#FBF8EF;stroke-width:2.8;stroke-linecap:round}
.ar-shaft{fill:#C9A36B;stroke:var(--piece-edge);stroke-width:2.5}
.ar-head{fill:#DCE3E1;stroke:var(--piece-edge);stroke-width:2.5;stroke-linejoin:round}
.ar-feather{fill:var(--signal);stroke:var(--piece-edge);stroke-width:2.5;stroke-linejoin:round}
.ar-speed{stroke:var(--piece-edge);stroke-width:2.5;stroke-linecap:round;opacity:.5}
.fx.on{animation:redflash .95s ease-out}
@keyframes redflash{0%,34%,68%{opacity:.88}17%,51%,100%{opacity:0}}
.cf,.cr{position:absolute;font-size:2.05cqi;font-weight:700;line-height:1;pointer-events:none}
.cf{right:6%;bottom:5%}
.cr{left:6%;top:5%}
.sq.light .cf,.sq.light .cr{color:var(--sq-dark)}
.sq.dark .cf,.sq.dark .cr{color:var(--sq-light)}

.trail{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.trail line{stroke-width:.075;stroke-linecap:round}
.trail circle{stroke:none}
.trail .fresh{stroke-dasharray:1;stroke-dashoffset:1;animation:draw .28s ease-out forwards}

.pieces{position:absolute;inset:0;pointer-events:none}
.piece{position:absolute;left:0;top:0;width:12.5%;height:12.5%;pointer-events:auto;cursor:grab;touch-action:none;z-index:1;will-change:transform}
.rig{position:absolute;inset:0;transform-origin:50% 92%}
.rig svg{position:absolute;left:4%;bottom:3%;width:92%;height:92%;overflow:visible;filter:drop-shadow(0 .5cqi .6cqi rgba(0,0,0,.35))}
.kn-part{fill:var(--piece);stroke:var(--piece-edge);stroke-width:3;stroke-linejoin:round;stroke-linecap:round}
.kn-mane path{fill:var(--kc);stroke:var(--piece-edge);stroke-width:3;stroke-linejoin:round}
.kn-eye ellipse,.kn-nostril{fill:var(--piece-edge)}
.kn-glint{fill:#fff}
.kn-brow,.kn-mouth{fill:none;stroke:var(--piece-edge);stroke-width:2.2;stroke-linecap:round}
.kn-head,.kn-jaw,.kn-mane,.kn-ear,.kn-eye{transform-box:view-box}
.kn-head{transform-origin:58px 40px}
.kn-jaw{transform-origin:50px 46px}
.kn-mane{transform-origin:68px 44px}
.kn-ear{transform-origin:60px 16px}
.kn-eye{transform-origin:50px 25px}
.piece.ghost{pointer-events:none;opacity:.6;z-index:2}
.piece.ghost::before{background:transparent;border:.35cqi dashed var(--kc)}
.piece::before{content:"";position:absolute;left:19%;right:19%;bottom:9%;height:12%;border-radius:50%;background:var(--kc);z-index:-1;box-shadow:0 0 0 .3cqi rgba(0,0,0,.18)}
.piece.sel::before{box-shadow:0 0 0 .55cqi color-mix(in oklab,var(--kc) 45%,transparent),0 0 2.4cqi var(--kc)}
/* With standard piece sets the coloured base only stays where it carries meaning: Knight
   Challenge's two knights. */
:root:not([data-pieces="kingclegg"]) .view:not(#game) .piece::before{display:none}
.piece.dragging{cursor:grabbing;z-index:5}
/* The lift scales the art, not the piece: scaling the piece would scale its translate too, and
   the piece would drift away from the finger the further it is from the board's corner. */
.piece > *{transition:scale .12s}
.piece.dragging > *{scale:1.14}
/* A piece being slid (KC.slide) rides above every other piece and the move markers. */
.board .pieces .piece.dragging{z-index:9;transition:none}
/* "Slide the piece to move it": shown when a tap is refused because Move pieces is set to Slide. */
.slide-tip{position:absolute;left:50%;bottom:6%;z-index:12;translate:-50% 0;padding:7px 14px;border-radius:999px;background:rgba(12,23,20,.9);color:var(--ink);font-size:max(13px,3cqi);font-weight:600;white-space:nowrap;pointer-events:none;opacity:0}
.slide-tip.on{animation:slidetip 1.8s ease-out}
/* Knight Challenge: a jump home before rank 8 flashes the 8th rank and shows this pop-up over the board. */
.sq.goal-lit{box-shadow:inset 0 0 0 .7cqi var(--gold-hi),inset 0 0 3cqi color-mix(in oklab,var(--gold-hi) 80%,transparent);animation:goalpulse .5s ease-in-out 3}
@keyframes goalpulse{50%{box-shadow:inset 0 0 0 .7cqi var(--gold-hi),inset 0 0 6cqi var(--gold-hi)}}
.board-toast{position:absolute;left:50%;top:30%;z-index:12;translate:-50% 0;width:max-content;max-width:88%;padding:.6em 1.1em;border-radius:14px;background:var(--gold-hi);color:var(--page);font-size:max(16px,4.6cqi);font-weight:700;line-height:1.2;text-align:center;text-wrap:balance;box-shadow:0 8px 28px rgba(0,0,0,.5);pointer-events:none;opacity:0;transition:opacity .2s}
.board-toast.on{opacity:1;animation:toastin .25s ease-out}
@keyframes toastin{from{scale:.88}}
/* A copy of a piece following the pointer: a new piece dragged from a tray, or a knight slid in Plan first or Blind. */
.slide-float{position:fixed;left:0;top:0;z-index:1000;pointer-events:none;display:grid;place-items:center;color:var(--ink);font:700 28px/1 var(--sans)}
.slide-float > *{width:100%;height:100%;scale:1.14}
.slide-float svg{display:block;width:100%;height:100%}
/* Trays you drag new pieces from: no page scroll when a drag starts on them. */
:root:not([data-move="tap"]) .pal{touch-action:none}
.tray{display:flex;align-items:center;gap:12px;margin-top:12px}
.tray .pal{width:56px;flex:none}
.tray-note{color:var(--muted);font-size:14px}
@keyframes slidetip{0%{opacity:0}10%,75%{opacity:1}100%{opacity:0}}
.piece.done{cursor:default}
.piece.done::before{background:var(--brass);box-shadow:0 0 1.8cqi var(--brass)}

.overlay{position:absolute;inset:0;z-index:6;display:grid;place-items:center;padding:5%;background:color-mix(in oklab,var(--page) 52%,transparent);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.overlay.clear{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;pointer-events:none}
.par-flash{display:grid;justify-items:center;padding:3cqi 8cqi 3.5cqi;background:color-mix(in oklab,var(--surface) 94%,transparent);border-radius:14px;box-shadow:0 20px 50px -20px rgba(0,0,0,.45);animation:parflash 2s ease forwards}
.par-flash .par-label,.par-flash .par-unit{font-size:clamp(14px,3.2cqi,20px);font-weight:600;color:var(--muted)}
.par-flash .par-num{font-family:var(--serif);font-size:20cqi;line-height:1.05;color:var(--ink)}
@keyframes parflash{0%{opacity:0;scale:.92}12%{opacity:1;scale:1}85%{opacity:1;scale:1}100%{opacity:0;scale:.97}}
.count{font-family:var(--serif);font-size:36cqi;line-height:1;color:var(--ink);-webkit-text-stroke:.5cqi #0C1714;paint-order:stroke fill;text-shadow:0 1.5cqi 3cqi rgba(0,0,0,.35);animation:pop 1s cubic-bezier(.2,.8,.3,1) forwards}
.count.go{color:var(--brass);font-size:26cqi}
@keyframes pop{0%{scale:1.7;opacity:0}18%{scale:1;opacity:1}78%{opacity:1}100%{scale:.86;opacity:0}}
.card{display:flex;flex-direction:column;background:var(--surface);color:var(--ink);border-radius:14px;padding:clamp(18px,5cqi,32px);width:min(100%,430px);max-height:100%;overflow:hidden;box-shadow:0 20px 50px -20px rgba(0,0,0,.45)}
.card-body{flex:1 1 auto;min-height:0;overflow:auto}
.card-actions{flex:none;display:flex;flex-wrap:wrap;gap:10px;padding-top:14px}
.card{position:relative}
.card-close{position:absolute;top:10px;right:10px;width:36px;height:36px;display:grid;place-items:center;padding:0;border:0;border-radius:50%;background:transparent;color:var(--muted);cursor:pointer}
.card-close:hover{background:color-mix(in oklab,var(--ink) 10%,transparent);color:var(--ink)}
.card-close svg{width:18px;height:18px}
.result h2{padding-right:36px}
.card h2{font-family:var(--serif);font-weight:600;font-size:clamp(24px,5cqi,32px);line-height:1.1;margin:0 0 12px}
.card p{margin:0 0 12px;font-size:15px}
.card .small{color:var(--muted);font-size:14px}
.result .big{font-size:clamp(40px,11cqi,64px);font-weight:700;line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin:4px 0 8px}
.result .pb{font-weight:600;color:var(--brass-ink)}
.rstats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:16px 0}
.rstats dt{font-size:13px;color:var(--muted)}
.rstats dd{margin:0;font-weight:700;font-size:20px;font-variant-numeric:tabular-nums}
.rstats small{font-weight:500;color:var(--muted);font-size:13px}
.splits{width:100%;border-collapse:collapse;font-size:14px;font-variant-numeric:tabular-nums;margin-bottom:16px}
.splits th{font-weight:500;color:var(--muted);text-align:left;padding:4px 0}
.splits td{padding:6px 0;border-top:1px solid var(--line)}
.splits td:first-child{display:flex;align-items:center;gap:8px}
@container (max-width:600px){.card .splits{display:none}.card p{font-size:14px;line-height:1.45}}
@container (max-width:460px){.card{padding:16px}.card h2{font-size:20px;margin-bottom:8px}.card p{font-size:13px;line-height:1.4;margin-bottom:8px}.card .small{display:none}.result .big{font-size:40px}.rstats{margin:10px 0}.card .btn{padding:11px 16px;font-size:15px}}

.status{margin:14px 2px 0;min-height:3em;font-size:15px;color:var(--muted);max-width:60ch}
.status[data-tone="bad"]{color:var(--signal);font-weight:600}
.status[data-tone="good"]{color:var(--ink);font-weight:600}

.panel{display:flex;flex-direction:column;gap:22px}
.rules{border:1px solid var(--line);border-radius:12px;padding:10px 16px 14px;margin:0;display:grid;gap:12px;min-width:0}
.rules legend{padding:0 6px;font-family:var(--serif);font-weight:600;font-size:22px}
.rules:disabled .switch,.rules:disabled .rep{opacity:.55}
.rules:disabled label{cursor:not-allowed}
.switch{display:flex;align-items:center;gap:10px;cursor:pointer;font-weight:500}
.switch input,.seg input{position:absolute;opacity:0;width:1px;height:1px;margin:0}
.knob{position:relative;flex:none;width:40px;height:22px;border-radius:999px;background:var(--line);transition:background-color .15s}
.knob::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.3);transition:translate .15s}
.switch input:checked + .knob{background:var(--gold-lo)}
.switch input:checked + .knob::after{translate:18px 0}
.switch input:focus-visible + .knob{outline:3px solid var(--brass);outline-offset:2px}
.rep{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;font-weight:500}
.seg{display:inline-flex;border:1.5px solid var(--line);border-radius:8px;overflow:hidden}
.seg label{position:relative;cursor:pointer}
.seg span{display:block;min-width:30px;padding:6px 7px;text-align:center;font-weight:600;font-variant-numeric:tabular-nums}
.seg label + label span{border-left:1.5px solid var(--line)}
.seg input:checked + span{background:var(--gold-lo);color:#0C1714}
.seg input:focus-visible + span{outline:3px solid var(--brass);outline-offset:-3px}
.rules-note{margin:0;font-size:13px;color:var(--muted)}
.trail.off{display:none}
.plate{background:var(--surface);color:var(--ink);border:1px solid var(--hair);border-radius:14px;padding:20px 24px 18px}
.clock{display:block;font-weight:700;font-size:clamp(46px,5.6vw,64px);line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.plate-sub{display:block;margin-top:8px;font-size:14px;color:var(--muted)}
.tracks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 32px}
.t-name{display:flex;align-items:center;gap:8px;font-weight:600;margin-bottom:10px}
.pip{display:inline-block;flex:none;width:10px;height:10px;border-radius:50%;background:var(--kc)}
.steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,1fr)}
.steps li{position:relative;padding-top:20px;font-size:13px;line-height:1.3;color:var(--muted)}
.steps li::before{content:"";position:absolute;top:2px;left:0;width:14px;height:14px;border-radius:50%;border:2px solid var(--line);background:var(--surface);z-index:1}
.steps li:not(:last-child)::after{content:"";position:absolute;top:8px;left:14px;right:0;height:2px;background:var(--line)}
.steps li.done::before{background:var(--kc);border-color:var(--kc)}
.steps li.done:has(+ li.done)::after{background:var(--kc)}
.steps li.now{color:var(--ink);font-weight:600}
.steps li.now::before{border-color:var(--kc)}
.t-req{margin:-4px 0 10px 18px;font-size:13px;color:var(--muted)}
.t-req:empty{display:none}
.split{display:block;font-variant-numeric:tabular-nums;font-weight:500;color:var(--muted)}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0;padding:16px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.stats dt{font-size:13px;color:var(--muted)}
.stats dd{margin:2px 0 0;font-weight:700;font-size:22px;line-height:1.1;font-variant-numeric:tabular-nums}
.stats small{font-size:12px;font-weight:500;color:var(--muted)}
.sheet h2{font-family:var(--serif);font-weight:600;font-size:24px;margin:0}
.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}
.btn-sm{padding:8px 14px;font-size:14px}
.pgn{max-height:170px;overflow:auto;font-size:15px;line-height:2;font-variant-numeric:tabular-nums}
.pgn .tok{display:inline-block;white-space:nowrap;margin-right:10px}
.pgn .n{color:var(--muted);margin-right:4px}
.pgn .m{font-weight:600;border-bottom:2px solid var(--kc);padding-bottom:1px}
.pgn .c{color:var(--muted);font-size:14px;margin-right:10px}
.pgn .c.bad{color:var(--signal)}
.pgn .c.end{color:var(--ink);font-weight:600}
.pgn .empty{color:var(--muted);font-size:14px}
.pgn button.go{font:inherit;color:inherit;background:none;border:0;border-radius:6px;padding:0 4px;margin:0 6px 0 -4px;cursor:pointer}
.pgn button.go:hover{background:color-mix(in oklab,var(--gold-hi) 16%,transparent)}
.pgn button.go.cur{background:color-mix(in oklab,var(--gold-hi) 32%,transparent);outline:1px solid var(--gold-hi)}
.pgn button.go:focus-visible{outline:2px solid var(--gold-hi)}
.pgn-nav{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px}
.pgn-nav span{flex-basis:100%;font-size:13px;color:var(--muted)}
.lv-name{font-weight:600}
.lv-desc{margin:0;font-size:14px;line-height:1.45;color:var(--muted)}
.plate{position:relative;transition:background-color .3s}
.plate.low{background:#5A1F1B;border-color:var(--signal)}
.pen-pop{position:absolute;right:20px;top:16px;font-weight:700;font-size:20px;color:#FFD48A;opacity:0;pointer-events:none}
.pen-pop.on{animation:penpop 1.2s ease-out}
@keyframes penpop{0%{opacity:0;translate:0 8px}15%{opacity:1;translate:0 0}70%{opacity:1}100%{opacity:0;translate:0 -12px}}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.nudge{border-color:var(--signal);color:var(--signal)}
.btn.confirm{background:var(--signal);border-color:var(--signal);color:#fff}
.panel-actions{display:flex;flex-wrap:wrap;gap:8px}
.panel-actions .btn{padding:11px 12px;font-size:14px;white-space:nowrap}

#fx{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:50}
::view-transition-old(root),::view-transition-new(root){animation-duration:.28s}

@media (max-width:900px){
  .feature{grid-template-columns:1fr}
  .feature-art{justify-self:center}
  .game-grid{grid-template-columns:minmax(0,1fr);grid-template-areas:"board" "panel" "results";row-gap:22px}
  .results{max-width:600px}
  .board-frame{width:min(100%,600px)}
  .panel{max-width:600px}
}
@media (max-width:700px){
  .hero-logo{width:min(80%,440px);top:4.5%}
}
@media (max-width:620px){
  .tracks{grid-template-columns:1fr}
  .drills li{grid-template-columns:1fr auto}
  .d-desc{grid-column:1 / -1;grid-row:2}
}
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-delay:0s !important;transition:none !important}
}

/* ---------- Knight Route ---------- */
.drills .playable{padding:0;border-color:rgba(212,176,106,.5)}
.d-link{display:flex;flex-direction:column;gap:10px;height:100%;box-sizing:border-box;padding:22px 20px;color:inherit;text-decoration:none;border-radius:14px}
.d-link:hover{background:color-mix(in oklab,var(--brass) 8%,transparent)}
.d-link .d-state{color:var(--brass)}
/* Target ("go here next"): a plain blue ring, distinct from the yellow last move and the grey dots. */
.sq[data-mk="target"] .mk::before{content:"";position:absolute;inset:6%;border-radius:50%;border:.75cqi solid #2F7FE0;background:rgba(47,127,224,.16)}
/* A target one move away shows the ring without a move dot inside it. */
.sq.hint[data-mk="target"]::after{display:none}
.sq[data-mk="start"] .mk::before{content:"";position:absolute;inset:34%;border-radius:50%;background:rgba(241,234,219,.35)}
.target-now{display:grid;grid-template-columns:auto 1fr;align-items:baseline;gap:2px 16px;padding:16px 20px;border:1px solid var(--hair);border-radius:14px}
.target-now .caps{grid-column:1 / -1;font-size:11px}
.target-sq{font-family:var(--serif);font-weight:600;font-size:44px;line-height:1}
.target-sub{color:var(--muted);font-size:14px}
.legs{width:100%;border-collapse:collapse;font-size:14px;font-variant-numeric:tabular-nums}
.legs th{text-align:left;font-weight:500;color:var(--muted);padding:4px 8px 6px 0}
.legs td{padding:7px 8px 7px 0;border-top:1px solid var(--line)}
.legs td.over{color:var(--signal);font-weight:600}
.legs td.on{color:var(--brass-ink);font-weight:600}
.legs .empty{color:var(--muted)}
.legs .live td{color:var(--muted)}
.legs-wrap{max-height:340px;overflow:auto}
.legs thead th{position:sticky;top:0;background:var(--page)}

/* ---------- Knight Sight ---------- */
.sq.danger::before{background:rgba(229,103,92,.3)}
.sq[data-mk="visited"] .mk::before{content:"";position:absolute;left:50%;top:50%;width:16%;height:16%;translate:-50% -50%;border-radius:50%;background:var(--brass);opacity:.6}
.piece.queen{pointer-events:none;z-index:3;--kc:var(--piece-edge)}

/* ---------- Plan first and Blind (target drills) ---------- */
.trail .walked{stroke:var(--brass);stroke-opacity:.75}
.trail .planned{stroke:var(--ink);stroke-opacity:.85;stroke-dasharray:.16 .12}
.trail .plan-step circle{fill:#0C1714;stroke:var(--ink);stroke-width:.035}
.trail .plan-step text{fill:var(--ink);font:700 .22px var(--sans);text-anchor:middle;dominant-baseline:central}
.piece.vanish{opacity:0;transition-delay:.45s}

/* ---------- Coordinate Sprint ---------- */
.board.nolabels .cf,.board.nolabels .cr{display:none}
.sq.lit::before{background:var(--gold-hi);box-shadow:inset 0 0 0 .45cqi #0C1714,inset 0 0 0 1.1cqi var(--brass),0 0 2.4cqi var(--gold-hi);z-index:1}
.ask-line{display:none;margin:12px 2px 0;min-height:1.1em;font:600 34px/1.1 var(--serif);text-align:center}
@media (max-width:900px){.ask-line{display:block}}
.fx.good{background:var(--gold-hi)}
.fx.good.on{animation:goodflash .45s ease-out}
@keyframes goodflash{0%{opacity:.7}100%{opacity:0}}
.keypad{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;margin-top:12px}
.keypad[hidden]{display:none}
.key{min-height:46px;border-radius:8px;border:1.5px solid var(--line);background:var(--surface);color:var(--ink);font:600 20px/1 var(--sans);cursor:pointer;-webkit-tap-highlight-color:transparent}
.key:hover:not(:disabled){border-color:var(--brass)}
.key.sel{background:linear-gradient(180deg,var(--gold-hi),var(--gold-lo));border-color:var(--gold-lo);color:#0C1714}
.key:disabled{opacity:.45;cursor:default}
.key:focus-visible{outline:3px solid var(--brass);outline-offset:2px}
.clock.low{color:var(--signal)}
.chips{display:flex;flex-wrap:wrap;gap:6px;max-height:220px;overflow:auto}
.chip{padding:5px 10px;border-radius:999px;border:1px solid var(--hair);font-weight:600;font-variant-numeric:tabular-nums}
.chip small{font-weight:500;color:var(--muted)}
.chip.missed{border-color:color-mix(in oklab,var(--signal) 60%,transparent)}
.chips .empty{color:var(--muted);font-size:14px}

/* ---------- Knight's Tour ---------- */
.sq.off{cursor:default}
.sq.off::before{background:rgba(12,23,20,.72)}
.sq.off .cf,.sq.off .cr{opacity:.35}
.sq[data-mk="step"] .mk::before{content:attr(data-n);position:absolute;right:8%;top:6%;font:700 2.2cqi/1 var(--sans);color:var(--piece)}
.sq.dark[data-mk="step"] .mk::before{color:var(--ink)}
.sq[data-mk="step"]::before{background:color-mix(in oklab,var(--brass) 45%,transparent)}
.sq[data-mk="onward"] .mk::before{content:attr(data-n);position:absolute;left:50%;top:50%;width:40%;height:40%;translate:-50% -50%;display:grid;place-items:center;border-radius:50%;background:rgba(12,23,20,.82);border:.35cqi solid var(--brass);color:var(--brass-ink);font:700 2.6cqi/1 var(--sans)}

/* ---------- Bishop Relay ---------- */
.piece.relay-bishop,.piece.pawn{pointer-events:none;cursor:default}
.piece.relay-bishop{--kc:var(--brass);z-index:3}
.bi-slit,.bi-smile{fill:none;stroke:var(--piece-edge);stroke-width:2.6;stroke-linecap:round}
.bi-eye{fill:var(--piece-edge)}
.bi-glint{fill:#fff}
.piece.pawn{z-index:2;transition:opacity .25s,scale .25s}
.piece.pawn.black{--kc:#3B2419}
.piece.pawn.white{--kc:#7D6B45}
.piece.pawn.white .bp-part{fill:#EDE4CF;stroke:#7D6B45}
.piece.pawn.white .bp-pupil{fill:#2F3A36}
.piece.pawn.taken{opacity:0;scale:.5}
.sq.capture::after{content:"";position:absolute;inset:5%;border-radius:50%;border:.6cqi solid rgba(20,32,27,.38);pointer-events:none}
.sq.dark.capture::after{border-color:rgba(241,234,219,.45)}
.piece.pawn.black .rig{filter:drop-shadow(0 0 .45cqi rgba(227,201,143,.6))}

/* ---------- Blindfold Recall ---------- */
.recall-line{display:block;font-size:30px;min-height:1.2em;overflow-wrap:anywhere}
.trail .answer{stroke:var(--ink);stroke-opacity:.8;stroke-dasharray:.16 .12}
.lives{letter-spacing:.08em;color:var(--brass)}

/* ---------- Standard piece set (js/chess.js) and shared drill parts (js/shell.js) ---------- */
.piece.std{pointer-events:none;cursor:default;z-index:2;transition:opacity .2s}
.piece.std::before{display:none}
.pc path,.pc circle{stroke-width:3;stroke-linejoin:round}
.pc-w path,.pc-w circle{fill:#EDE4CF;stroke:#6E5E3C}
.pc-b path,.pc-b circle{fill:#26302C;stroke:#E3C98F}
.pc .pc-line{fill:none;stroke-linecap:round}
.pc-w .pc-eye{fill:#6E5E3C;stroke:none}
.pc-b .pc-eye{fill:#E3C98F;stroke:none}
.piece.std.missed{opacity:.4}
.piece.std.wrong svg{filter:drop-shadow(0 0 .8cqi var(--signal)) drop-shadow(0 0 .3cqi var(--signal))}
.sheet-body{max-height:220px;overflow:auto;font-size:15px;font-variant-numeric:tabular-nums}
.sheet-row{display:grid;grid-template-columns:2.2em 1fr auto;gap:8px;padding:6px 0;border-top:1px solid var(--line)}
.sheet-row:first-child{border-top:0}
.below-actions{display:flex;justify-content:center;margin-top:12px}
.below-actions .btn[hidden]{display:none}

/* ---------- Position Recall ---------- */
.palette{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-top:12px}
.pal{aspect-ratio:1;max-height:64px;display:grid;place-items:center;padding:4px;border-radius:8px;border:1.5px solid var(--line);background:var(--surface);color:var(--muted);font:700 20px/1 var(--sans);cursor:pointer}
.pal svg{width:100%;height:100%}
.pal-erase{grid-row:1 / 3;grid-column:7;aspect-ratio:auto;max-height:none}
.pal.sel{border-color:var(--brass);background:color-mix(in oklab,var(--brass) 22%,var(--surface));box-shadow:0 0 0 2px var(--brass) inset}
.pal:disabled{opacity:.45;cursor:default}

/* ---------- Piece Pairs (and any shell drill without a board) ---------- */
.stage{position:relative;aspect-ratio:1;container-type:inline-size;box-sizing:border-box;padding:2.4cqi;border-radius:14px;background:var(--frame);border:1px solid var(--hair);box-shadow:var(--shadow)}
.cards{display:grid;grid-template-columns:repeat(var(--cols,4),1fr);gap:2.2cqi}
.pcard{aspect-ratio:1;padding:0;border:0;background:none;cursor:pointer;perspective:700px;-webkit-tap-highlight-color:transparent}
.pc-inner{position:relative;display:block;width:100%;height:100%;transition:transform .35s ease;transform-style:preserve-3d}
.pcard.up .pc-inner{transform:rotateY(180deg)}
.pc-back,.pc-face{position:absolute;inset:0;border-radius:10px;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:grid;place-items:center;overflow:hidden;box-sizing:border-box}
.pc-back{background:url("../assets/kingclegg-crown.png") center / 42% auto no-repeat,radial-gradient(circle at 50% 40%,#1B342C,var(--surface));border:1.5px solid var(--hair)}
.pcard:hover .pc-back{border-color:var(--brass)}
.pc-face{transform:rotateY(180deg);background:var(--sq-light);border:1.5px solid var(--brass);padding:4%}
.pcard.done .pc-face{box-shadow:0 0 0 2px var(--gold-hi),0 0 3cqi var(--brass)}
.pcard:focus-visible{outline:3px solid var(--brass);outline-offset:2px;border-radius:10px}
.mini-board{width:100%;height:100%;display:block}
.mb-dark{fill:var(--sq-dark)}
.mb-dot{fill:var(--gold-hi);stroke:#0C1714;stroke-width:.09}
.mb-home{fill:#0C1714;stroke:var(--brass);stroke-width:.1}
.mini-board{overflow:visible}
.card-note{font:700 8.5cqi/1 var(--serif);color:#0C1714}
.pc-face:has(.card-cap){grid-template-rows:1fr auto;gap:2%}
.pc-face:has(.card-cap) .mini-board{min-height:0}
.card-cap{font:700 2.6cqi/1 var(--sans);text-transform:capitalize;color:#0C1714}

/* ---------- Attack Sweeper ---------- */
.sq.covered::before{background:rgba(12,23,20,.42)}
.sq.covered:hover::before{background:rgba(12,23,20,.28)}
.sq[data-mk="count"] .mk::before{content:attr(data-n);position:absolute;left:50%;top:50%;translate:-50% -50%;width:46%;height:46%;display:grid;place-items:center;border-radius:50%;background:rgba(12,23,20,.85);font:700 3.4cqi/1 var(--sans);color:var(--gold-hi)}
.sq[data-mk="count"] .mk[data-n=""]::before{display:none}
.sq[data-mk="count"] .mk[data-c="2"]::before{color:#8FD3B6}
.sq[data-mk="count"] .mk[data-c="3"]::before{color:#F0A08F}
.sq[data-mk="count"] .mk[data-c="4"]::before{color:var(--ink);box-shadow:0 0 0 .3cqi var(--signal)}
.sq[data-mk="flag"] .mk::before{content:"";position:absolute;inset:18%;background:url("../assets/kingclegg-crown.png") center / contain no-repeat;filter:drop-shadow(0 0 .5cqi #0C1714)}
.mode-seg{display:flex;width:100%;margin-top:12px}
.mode-seg label{flex:1}
.mode-seg span{display:block;text-align:center;padding:12px 0;font-size:16px}

/* ---------- Board Control ---------- */
.sq.uncovered::before{background:repeating-linear-gradient(135deg,rgba(227,201,143,.7) 0 9%,transparent 9% 18%)}
.piece.std.fixed svg{filter:drop-shadow(0 0 .9cqi var(--brass)) drop-shadow(0 0 .3cqi var(--brass))}
.trail .clash{stroke:var(--signal);stroke-width:.09;stroke-linecap:round}

/* ---------- Knight Swap ---------- */
.sq.goal-w .mk,.sq.goal-b .mk{display:block}
.sq.goal-w .mk::before,.sq.goal-b .mk::before{content:"";position:absolute;inset:7%;border-radius:50%;border:.45cqi dashed #EDE4CF}
.sq.goal-b .mk::before{border-color:#0C1714}
.board-clip{position:relative;overflow:hidden;overflow:clip;border-radius:4px;container-type:inline-size}
#swap .board{transform-origin:0 100%;transition:transform .3s ease}
.sq.picked::before{background:color-mix(in oklab,var(--brass) 35%,transparent);box-shadow:inset 0 0 0 .55cqi var(--gold-hi)}

/* ---------- Hub groups ---------- */
.drill-group + .drill-group{margin-top:clamp(36px,5vw,56px)}
.group-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 16px;margin-bottom:16px}
.group-head h3{margin:0;font-family:var(--caps);font-weight:600;font-size:15px;letter-spacing:.24em;text-transform:uppercase;color:var(--brass)}
.group-head p{margin:0;color:var(--muted);font-size:15px}
.drill-group .drills{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}

/* ---------- Threat Triage ---------- */
.trail .lastmove{stroke:var(--ink);stroke-opacity:.7;stroke-width:.07;stroke-dasharray:.14 .1}
.trail .lastmove-end{fill:var(--ink);fill-opacity:.7}
.trail .threat{stroke:var(--signal);stroke-width:.08;stroke-linecap:round}
.trail .threat-end{fill:var(--signal)}
.sq[data-mk="order"] .mk::before{content:attr(data-n);position:absolute;right:6%;top:5%;width:30%;height:30%;display:grid;place-items:center;border-radius:50%;background:#0C1714;border:.3cqi solid var(--gold-hi);color:var(--gold-hi);font:700 2.2cqi/1 var(--sans)}

/* ---------- Settings (gear in the header; js/settings.js) ---------- */
/* Board colours: on <html> for the whole site, and on each swatch in the dialog. */
[data-board="green"]{--sq-light:#EEEED2;--sq-dark:#769656}
[data-board="brown"]{--sq-light:#F0D9B5;--sq-dark:#B58863}
[data-board="blue"]{--sq-light:#DEE3E6;--sq-dark:#8CA2AD}
[data-board="walnut"]{--sq-light:#E3C59A;--sq-dark:#8A5B3C}
[data-board="slate"]{--sq-light:#DADADA;--sq-dark:#7D8796}
[data-board="purple"]{--sq-light:#E8E0F2;--sq-dark:#8E7CB8}
[data-board="coral"]{--sq-light:#F3E1D6;--sq-dark:#C9806B}
[data-board="throne"]{--sq-light:#CBB88A;--sq-dark:#2B5247}
/* Piece sets drawn from files (js/chess.js): dark pieces get a faint ivory edge on the Throne Room
   board, whose dark squares are darker than the sets were drawn for. Low specificity, so drill
   highlights (.wrong, .fixed) still win. */
:where(:root:not([data-pieces="kingclegg"])[data-board="throne"]) svg[data-art^="b"]{filter:drop-shadow(0 0 .28cqi rgba(241,234,219,.8)) drop-shadow(0 .4cqi .5cqi rgba(0,0,0,.3))}
/* Display switches. Coordinate Sprint's labelled level keeps its labels: they are the drill. */
:root[data-coords="off"] .cf,:root[data-coords="off"] .cr{display:none}
:root[data-coords="off"] #coords .board:not(.nolabels) .cf,:root[data-coords="off"] #coords .board:not(.nolabels) .cr{display:block}
:root[data-highlight="off"] .sq.from::before,:root[data-highlight="off"] .sq.last::before{background:none}
:root[data-motion="off"] *,:root[data-motion="off"] *::before,:root[data-motion="off"] *::after{animation-duration:.01ms !important;animation-delay:0s !important;transition:none !important}
/* The dialog */
.settings{width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow:auto;box-sizing:border-box;padding:22px 24px 24px;border:1px solid var(--hair);border-radius:16px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}
.settings::backdrop{background:rgba(6,12,10,.6);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.settings-head{position:relative;display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.settings-head h2{margin:0;font-family:var(--serif);font-weight:600;font-size:30px}
.settings-head .card-close{position:static}
.settings h3{margin:20px 0 10px;font-size:11px}
.swatches{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.sets{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.swatch,.set-preview{display:flex;flex-direction:column;align-items:center;gap:6px;padding:8px;border:1.5px solid var(--line);border-radius:10px;background:none;color:var(--ink);cursor:pointer}
.swatch:hover,.set-preview:hover{border-color:var(--muted)}
.swatch[aria-checked="true"],.set-preview[aria-checked="true"]{border-color:var(--brass);box-shadow:0 0 0 1px var(--brass) inset}
.sw-board{display:grid;grid-template-columns:1fr 1fr;width:100%;max-width:72px;aspect-ratio:1;border-radius:4px;overflow:hidden}
.sw-board i:nth-child(1),.sw-board i:nth-child(4){background:var(--sq-light)}
.sw-board i:nth-child(2),.sw-board i:nth-child(3){background:var(--sq-dark)}
.sw-name{font-size:13px;font-weight:600}
.set-pieces{display:flex;gap:2px;width:100%;justify-content:center;padding:4px;border-radius:6px;background:var(--sq-light)}
.set-pieces svg{width:24%;max-width:44px;aspect-ratio:1}
.pp-knight{display:contents;--kc:var(--brass)}
.settings-switches{display:grid;gap:12px}
.move-seg span{min-width:64px;padding:7px 14px}
.set-note{margin:14px 0 0;font-size:13px;color:var(--muted)}
.credits{font-size:12px;line-height:1.5}
.credits a{color:var(--brass)}
@media (max-width:480px){#settingsBtn span{display:none}.sets{grid-template-columns:repeat(2,1fr)}.swatches{grid-template-columns:repeat(4,1fr);gap:6px}.sw-name{font-size:11.5px}}

/* ---------- Review list (shell drills: Skip / Show solution) ---------- */
.review-list{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:6px;max-height:min(46cqi,320px);overflow:auto}
.review-item{display:flex;justify-content:space-between;gap:12px;width:100%;padding:8px 12px;border:1px solid var(--line);border-radius:8px;background:none;color:var(--ink);font:inherit;font-size:15px;text-align:left;cursor:pointer}
.review-item:hover{border-color:var(--brass)}
.rv-solved{color:#8FD19E}
.rv-skipped,.rv-shown{color:var(--brass)}
/* Targets table: skipped/shown legs, and rows that replay their route after the run. */
.legs td.helped{color:var(--brass)}
.legs tr.pick{cursor:pointer}
.legs tr.pick:hover td,.legs tr.pick:focus-visible td{background:color-mix(in oklab,var(--brass) 12%,transparent)}
.sheet-note{font-size:13px;color:var(--muted)}

/* ---------- Drill availability (admin: Live / Coming soon / Hidden) ---------- */
html[data-avail="pending"] .feature,html[data-avail="pending"] .workshop{visibility:hidden}
.drills li.soon{opacity:.55;border-color:rgba(212,176,106,.18)}
.drills li.soon .d-link{cursor:default}
.drills li.soon .d-link:hover{background:none}
.drills li.soon .d-state:not(.d-soon){display:none}
.drills li.soon .d-soon{color:var(--gold-lo)}
.avail-note{margin:0 0 18px;padding:12px 16px;border:1px solid var(--hair);border-radius:12px;background:var(--surface);color:var(--muted)}

/* ---------- Footer links and legal pages ---------- */
.foot-links{display:flex;flex-wrap:wrap;gap:6px 18px}
.foot-links a,.foot-copy a{color:var(--muted);text-decoration:none}
.foot-links a:hover{color:var(--ink);text-decoration:underline}
.foot-copy{flex-basis:100%}
.ver{white-space:nowrap}
.legal{max-width:760px;margin:0 auto;font-size:17px;line-height:1.65}
.legal h1{font-family:var(--serif);font-weight:600;font-size:clamp(38px,6vw,56px);line-height:1.05;margin:8px 0 4px}
.legal h2{font-family:var(--serif);font-weight:600;font-size:28px;margin:34px 0 6px}
.legal h3{font-size:17px;margin:20px 0 2px}
.legal p,.legal li{color:var(--ink)}
.legal ul{padding-left:1.3em;margin:8px 0 16px}
.legal li{margin:6px 0}
.legal a{color:var(--gold-hi)}
.legal .updated{color:var(--muted);font-size:14px;margin:0 0 22px}
