/* PERÚ SMP · Tawantinsuyu — animated extras (home + wiki). Ideas adapted from dqnamo/website, rewritten without React.
   Every widget is a self-contained "game panel" in stone and gold, so it reads the same on the light and dark themes. */
.fx{--fx-bg:#1d1a15;--fx-bg2:#26221c;--fx-bg3:#2f2a22;--fx-ink:#EFE7D6;--fx-ink2:#C9BDA6;--fx-line:#5a4c37;
  --fx-gold:#E9B84C;--fx-gold-hi:#F8DC86;--fx-gold-lo:#8C6418;--fx-gold-ink:#3a2706;--fx-stone:#4f4433;--fx-stone-hi:#6e604a;--fx-stone-lo:#2c251b;
  --fx-pixel:"Pixelify Sans","Archivo","Arial Black",system-ui,sans-serif;--fx-mono:"Chivo Mono",ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
  --fx-display:"Archivo","Arial Black","Helvetica Neue",Arial,sans-serif;--fx-body:"Chivo",ui-sans-serif,system-ui,sans-serif;
  margin:28px 0;background:var(--fx-bg);color:var(--fx-ink);border:2px solid var(--fx-line);padding:clamp(16px,3vw,24px);font-family:var(--fx-body);font-size:15px;line-height:1.5;
  display:flex;flex-direction:column;gap:14px;max-width:100%;box-sizing:border-box}
.fx *,.fx *::before,.fx *::after{box-sizing:border-box}
.fx-h{margin:0;font-family:var(--fx-pixel);font-size:18px;font-weight:400;color:var(--fx-gold-hi);letter-spacing:.04em;display:flex;align-items:center;gap:10px}
.fx-h::before{content:"";width:12px;height:12px;flex:none;border:2px solid currentColor;background:linear-gradient(90deg,currentColor 50%,transparent 50%)}
.fx-p{margin:0;color:var(--fx-ink2);font-size:14px;max-width:68ch}
.fx-note{margin:0;font-family:var(--fx-mono);font-size:11.5px;color:var(--fx-ink2);opacity:.85}
.fx-row{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:center}
.fx-pix{image-rendering:pixelated;image-rendering:crisp-edges}
.fx-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.fx :focus-visible{outline:3px solid var(--fx-gold-hi);outline-offset:2px}

/* Tactile buttons: pressable stone and gold (TactileButton) */
.fx-tb{--d:5px;position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:10px 16px;margin-bottom:var(--d);border:0;cursor:pointer;
  font:700 14px/1 var(--fx-display);font-stretch:125%;letter-spacing:.02em;background:var(--fx-stone);color:var(--fx-ink);
  box-shadow:inset 0 2px 0 var(--fx-stone-hi),inset 0 -2px 0 #3d3427,0 var(--d) 0 var(--fx-stone-lo);transition:transform .15s cubic-bezier(.23,1,.32,1),box-shadow .15s cubic-bezier(.23,1,.32,1)}
.fx-tb.gold,.fx-tb[aria-pressed="true"]{background:var(--fx-gold);color:var(--fx-gold-ink);box-shadow:inset 0 2px 0 var(--fx-gold-hi),inset 0 -2px 0 #c9962e,0 var(--d) 0 var(--fx-gold-lo)}
@media (hover:hover) and (pointer:fine){.fx-tb:hover{transform:translateY(2px);box-shadow:inset 0 2px 0 var(--fx-stone-hi),inset 0 -2px 0 #3d3427,0 calc(var(--d) - 2px) 0 var(--fx-stone-lo)}
  .fx-tb.gold:hover,.fx-tb[aria-pressed="true"]:hover{box-shadow:inset 0 2px 0 var(--fx-gold-hi),inset 0 -2px 0 #c9962e,0 calc(var(--d) - 2px) 0 var(--fx-gold-lo)}}
.fx-tb:active{transform:translateY(var(--d));box-shadow:inset 0 2px 0 var(--fx-stone-hi),inset 0 -2px 0 #3d3427,0 0 0 var(--fx-stone-lo)}
.fx-tb.gold:active{box-shadow:inset 0 2px 0 var(--fx-gold-hi),inset 0 -2px 0 #c9962e,0 0 0 var(--fx-gold-lo)}
.fx-tb:disabled{opacity:.45;cursor:not-allowed;transform:none}
/* The site's own gold and stone buttons get the same pressable edge, without changing their markup */
.btn.btn-gold,.btn.btn-stone{--fx-d:5px;transition:transform .15s cubic-bezier(.23,1,.32,1),box-shadow .15s cubic-bezier(.23,1,.32,1);margin-bottom:var(--fx-d)}
.btn.btn-gold{box-shadow:0 var(--fx-d) 0 #8C6418}
.btn.btn-stone{box-shadow:0 var(--fx-d) 0 rgba(0,0,0,.45)}
@media (hover:hover) and (pointer:fine){.btn.btn-gold:hover,.btn.btn-stone:hover{transform:translateY(2px)}
  .btn.btn-gold:hover{box-shadow:0 calc(var(--fx-d) - 2px) 0 #8C6418}.btn.btn-stone:hover{box-shadow:0 calc(var(--fx-d) - 2px) 0 rgba(0,0,0,.45)}}
.btn.btn-gold:active,.btn.btn-stone:active{transform:translateY(var(--fx-d));box-shadow:0 0 0 transparent}
@media (prefers-reduced-motion:reduce){.fx-tb,.btn.btn-gold,.btn.btn-stone{transition:none}}

/* Inti sun (LogoTraceLoader) */
.fx-inti .tr{fill:none;stroke:currentColor;stroke-linecap:square;stroke-linejoin:miter}
.fx-inti .sun-ray{fill:#E8B23C}.fx-inti .sun-ring{fill:#F3CC63}.fx-inti .sun-disc{fill:#D99A26}.fx-inti .sun-core{fill:#F8DC86}
@keyframes fx-loop{to{stroke-dashoffset:-1}}
.fx-search-sun{position:absolute;right:10px;top:50%;width:26px;height:26px;margin-top:-13px;color:#E9B84C;pointer-events:none}
.fx-search-wrap{position:relative}
.fx-search-wrap input{padding-right:44px!important}

/* Arrival ticket (Ticket) */
.fx-join-grid{display:grid;grid-template-columns:auto minmax(0,1fr);gap:24px;align-items:center}
@media (max-width:640px){.fx-join-grid{grid-template-columns:minmax(0,1fr);justify-items:center}}
.fx-ticket-wrap{width:min(100%,240px);perspective:1100px;filter:drop-shadow(0 1px 1px rgb(0 0 0/30%)) drop-shadow(0 18px 26px rgb(0 0 0/40%))}
.fx-ticket{--notch:13px;--stub:25%;--corner:10px;aspect-ratio:5/9;display:grid;grid-template-rows:minmax(0,1fr) var(--stub);color:#1b1206;
  background:linear-gradient(145deg,rgb(255 255 255/18%),transparent 42%),#E9B84C;transition:transform .22s cubic-bezier(.23,1,.32,1);
  clip-path:polygon(0 var(--corner),var(--corner) 0,calc(100% - var(--corner)) 0,100% var(--corner),100% calc(100% - var(--stub) - var(--notch)),calc(100% - var(--notch)) calc(100% - var(--stub)),100% calc(100% - var(--stub) + var(--notch)),100% calc(100% - var(--corner)),calc(100% - var(--corner)) 100%,var(--corner) 100%,0 calc(100% - var(--corner)),0 calc(100% - var(--stub) + var(--notch)),var(--notch) calc(100% - var(--stub)),0 calc(100% - var(--stub) - var(--notch)))}
.fx-t-body{position:relative;padding:18px 18px 12px;display:flex;flex-direction:column;gap:10px;min-height:0}
.fx-t-body::after{content:"";position:absolute;left:calc(var(--notch) + 6px);right:calc(var(--notch) + 6px);bottom:0;border-bottom:2px dashed currentColor;opacity:.35}
.fx-t-top{display:flex;justify-content:space-between;font-family:var(--fx-pixel);font-size:12px;letter-spacing:.1em}
.fx-t-sun{align-self:center;fill:currentColor}
.fx-t-lbl{display:block;font-family:var(--fx-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;opacity:.75}
.fx-t-big{display:block;font-family:var(--fx-pixel);font-size:36px;line-height:1}
.fx-t-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 10px;margin:0}
.fx-t-grid dt{font-family:var(--fx-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;opacity:.7}
.fx-t-grid dd{margin:0;font:700 12.5px var(--fx-display);font-stretch:125%}
.fx-t-stub{padding:12px 18px;display:flex;flex-direction:column;justify-content:center;gap:4px}
.fx-t-ip{font:700 13px var(--fx-mono)}

/* Hold to copy (HoldToConfirmButton) */
.fx-hold{position:relative;isolation:isolate;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;min-height:50px;min-width:min(100%,280px);padding:0 18px;
  border:2px solid var(--fx-gold);background:var(--fx-bg2);color:var(--fx-gold-hi);cursor:pointer;user-select:none;-webkit-user-select:none;touch-action:none;font:700 14px var(--fx-display);font-stretch:125%}
.fx-hold-fill{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:0 18px;background:var(--fx-gold);color:var(--fx-gold-ink);clip-path:inset(0 100% 0 0)}
.fx-hold.holding .fx-hold-fill{clip-path:inset(0 0 0 0);transition:clip-path 1400ms steps(14)}
.fx-hold:not(.holding) .fx-hold-fill{transition:clip-path .18s cubic-bezier(.23,1,.32,1)}
.fx-hold.ok{background:var(--fx-gold);color:var(--fx-gold-ink)}
.fx-hold.ok .fx-hold-fill{display:none}
.fx-hold-msg{font:13px var(--fx-mono);color:var(--fx-ink2);overflow-wrap:anywhere}
@media (prefers-reduced-motion:reduce){.fx-hold .fx-hold-fill{transition:none!important}}

/* Roadmap blocks */
.fx-blocks{display:grid;grid-template-columns:repeat(var(--n,27),minmax(0,1fr));gap:3px;margin:18px 0 8px}
@media (max-width:560px){.fx-blocks{grid-template-columns:repeat(14,minmax(0,1fr))}}
.fx-b{aspect-ratio:1;background:rgba(0,0,0,.35);box-shadow:inset 0 0 0 2px rgba(0,0,0,.25)}
.fx-b.done{background:#E9B84C;box-shadow:inset 0 3px 0 #F8DC86,inset 0 -3px 0 #a2771f}
.fx-b.wip{background:repeating-linear-gradient(135deg,#E9B84C 0 4px,#6b5020 4px 8px);box-shadow:inset 0 0 0 2px #a2771f}
.fx-b.pop{animation:fx-pop .22s cubic-bezier(.3,1.6,.5,1)}
@keyframes fx-pop{from{transform:scale(.3)}to{transform:scale(1)}}
.fx-legend{display:flex;flex-wrap:wrap;gap:6px 18px;font-family:var(--fx-mono,ui-monospace,monospace);font-size:13px;margin:0 0 18px;opacity:.9}
.fx-legend span{display:inline-flex;align-items:center;gap:8px}
.fx-legend i{width:14px;height:14px;display:inline-block}

/* News ticker (AnimatedBanner) */
.fx-ticker{position:relative;overflow:hidden;background:#0c0b08;border-block:2px solid #8C6418;padding:12px 0;margin:0 0 22px;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
.fx-ticker-track{display:flex;gap:40px;width:max-content;animation:fx-tick 40s linear infinite}
.fx-ticker:hover .fx-ticker-track,.fx-ticker:focus-within .fx-ticker-track{animation-play-state:paused}
.fx-ticker a{display:inline-flex;align-items:center;gap:10px;font-family:"Pixelify Sans","Archivo",system-ui,sans-serif;font-size:15px;color:#EFE7D6;text-decoration:none;white-space:nowrap}
.fx-ticker a::before{content:"";width:10px;height:10px;background:#E9B84C}
.fx-ticker a:hover{color:#F8DC86}
@keyframes fx-tick{to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){.fx-ticker-track{animation:none;flex-wrap:wrap;width:auto;padding:0 16px;gap:10px 24px}.fx-ticker{-webkit-mask-image:none;mask-image:none}}

/* Item cards (PlayingCards + IridescentFoil) */
.fx-fan{position:relative;height:330px;display:flex;justify-content:center;align-items:flex-end}
.fx-card{--rot:0deg;--tx:0px;--ty:0px;position:absolute;bottom:62px;width:150px;height:214px;perspective:900px;cursor:pointer;border:0;padding:0;background:none;color:inherit;font:inherit;
  transform:translateX(var(--tx)) translateY(var(--ty)) rotate(var(--rot));transform-origin:50% 120%;transition:transform .35s cubic-bezier(.23,1,.32,1)}
.fx-card:hover,.fx-card:focus-visible{z-index:20;--ty:-26px}
.fx-card-in{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .5s cubic-bezier(.23,1,.32,1)}
.fx-card.flip .fx-card-in{transform:rotateY(180deg)}
.fx-f,.fx-bk{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;border:3px solid #17130d;box-shadow:0 14px 24px -10px #000;overflow:hidden;display:flex;flex-direction:column;text-align:left}
.fx-f{background:linear-gradient(160deg,#3a3227,#221d17);padding:10px;gap:8px}
.fx-bk{transform:rotateY(180deg);background:#EFE7D6;color:#26221c;padding:11px;gap:5px;font-size:11px;line-height:1.4;overflow:auto}
.fx-bk b{font:700 12px var(--fx-display);font-stretch:125%}
.fx-c-top{display:flex;justify-content:space-between;align-items:center;gap:6px;font-family:var(--fx-pixel);font-size:11px;color:var(--fx-gold-hi)}
.fx-c-art{flex:1;display:grid;place-items:center;background:repeating-conic-gradient(#2a241c 0 25%,#302920 0 50%) 0 0/16px 16px;border:2px solid #17130d}
.fx-c-art img{width:88px;height:88px}
.fx-c-name{font:700 12.5px/1.2 var(--fx-display);font-stretch:125%;color:var(--fx-ink);min-height:2.4em}
.fx-rar{font:10px var(--fx-mono);padding:1px 5px;background:#17130d;color:var(--fx-ink2);white-space:nowrap}
.fx-card.rare .fx-rar{background:var(--fx-gold);color:var(--fx-gold-ink)}
.fx-card.rare .fx-f{border-color:var(--fx-gold)}
.fx-card.rare .fx-f::after{content:"";position:absolute;inset:0;pointer-events:none;mix-blend-mode:color-dodge;opacity:.28;transition:opacity .2s;
  background:radial-gradient(circle at var(--mx,50%) var(--my,40%),rgb(255 255 255/.45),transparent 45%),conic-gradient(from calc(var(--ang,0) * 1deg) at var(--mx,50%) var(--my,40%),#ff6b6b,#ffd93d,#6bff95,#4dd8ff,#a77bff,#ff6bd6,#ff6b6b)}
.fx-card.rare:hover .fx-f::after,.fx-card.rare:focus-visible .fx-f::after{opacity:.6}
@media (max-width:700px){.fx-fan{height:auto;flex-wrap:wrap;gap:12px}.fx-card{position:relative;bottom:auto;transform:none!important;width:146px;height:208px}}
@media (prefers-reduced-motion:reduce){.fx-card,.fx-card-in{transition:none}}

/* Khipu */
.fx-khipu-wrap{background:var(--fx-bg2);border:2px solid var(--fx-line);padding:14px 8px 8px;overflow-x:auto}
.fx-khipu{display:block;width:100%;min-width:600px;height:auto}
.fx-khipu .cord{cursor:pointer}.fx-khipu .cord:focus{outline:none}
.fx-khipu .cord:focus-visible .hit{stroke:#F8DC86;stroke-width:2;stroke-dasharray:4 3}
.fx-khipu .knot{transform-box:fill-box;transform-origin:center}
.fx-khipu .knot.on{animation:fx-knot .35s cubic-bezier(.3,1.6,.5,1) both}
@keyframes fx-knot{from{transform:scale(0)}to{transform:scale(1)}}
.fx-khipu .l1{font:700 12px var(--fx-display);font-stretch:125%;fill:#EFE7D6}
.fx-khipu .l2{font:11px var(--fx-mono);fill:#C9BDA6}
.fx-khipu .locked{opacity:.4}
.fx-khipu-sum{display:flex;flex-wrap:wrap;gap:8px 20px;align-items:center;font:13px var(--fx-mono);color:var(--fx-ink2)}
.fx-khipu-sum b{color:var(--fx-gold-hi);font-family:var(--fx-pixel);font-size:16px;font-weight:400}
.fx-k-detail{min-height:3em;font-size:14px;color:var(--fx-ink2)}
.fx-k-detail b{color:var(--fx-ink)}

/* Qhapaq Ñan map */
.fx-nan{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:18px;align-items:start}
@media (max-width:700px){.fx-nan{grid-template-columns:minmax(0,1fr)}}
.fx-map{position:relative;border:2px solid var(--fx-line);background:#14120e;aspect-ratio:1}
.fx-map img{position:absolute;inset:0;width:100%;height:100%;opacity:.88}
.fx-map svg{position:absolute;inset:0;width:100%;height:100%}
.fx-map .road{fill:none;stroke:#EFE7D6;stroke-opacity:.35;stroke-width:14;stroke-linejoin:round;stroke-linecap:round}
.fx-map .road-on{fill:none;stroke:#E9B84C;stroke-width:26;stroke-linejoin:round;stroke-linecap:square}
.fx-map .city circle{fill:#17130d;stroke:#F8DC86;stroke-width:10}
.fx-map .city.cusco circle{fill:#E9B84C}
.fx-map .city text{font-family:var(--fx-pixel);font-size:96px;fill:#EFE7D6;paint-order:stroke;stroke:#17130d;stroke-width:22px;stroke-linejoin:round}
.fx-map .runner{fill:#C2334A;stroke:#17130d;stroke-width:8}
.fx-routes{display:flex;flex-direction:column;gap:8px}
.fx-route{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;text-align:left;width:100%;background:var(--fx-bg2);border:2px solid var(--fx-line);color:var(--fx-ink);padding:10px 12px;cursor:pointer;font:inherit}
.fx-route[aria-pressed="true"]{border-color:var(--fx-gold);background:var(--fx-bg3)}
.fx-route .n{font:700 14px var(--fx-display);font-stretch:125%}
.fx-route .b{font-family:var(--fx-pixel);color:var(--fx-gold-hi);font-size:14px;white-space:nowrap}
.fx-route .r{grid-column:1/-1;font-size:12.5px;color:var(--fx-ink2)}

/* Glossary words (ScrambleText) */
.fx-gloss{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
.fx-word{display:flex;flex-direction:column;gap:2px;text-align:left;background:var(--fx-bg2);border:2px solid var(--fx-line);padding:12px 14px;min-height:80px;cursor:pointer;color:var(--fx-ink);font:inherit}
.fx-word:hover,.fx-word.on{border-color:var(--fx-gold)}
.fx-word .w{font-family:var(--fx-pixel);font-size:19px;color:var(--fx-gold-hi);line-height:1.15;white-space:pre-wrap;overflow-wrap:anywhere}
.fx-word .g{font:11px var(--fx-mono);color:var(--fx-ink2)}

/* Qhatu receipt (ReceiptPrinter) */
.fx-qhatu{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:22px;align-items:start}
@media (max-width:700px){.fx-qhatu{grid-template-columns:minmax(0,1fr);justify-items:center}}
.fx-wares{display:flex;flex-direction:column;gap:6px;width:100%}
.fx-ware{display:grid;grid-template-columns:auto 32px minmax(0,1fr) auto;gap:10px;align-items:center;background:var(--fx-bg2);border:2px solid var(--fx-line);padding:6px 10px;cursor:pointer}
.fx-ware:has(input:checked){border-color:var(--fx-gold)}
.fx-ware input{accent-color:#E9B84C;width:18px;height:18px;margin:0}
.fx-ware img{width:32px;height:32px}
.fx-ware .nm{font-size:14px}.fx-ware .pr{font-family:var(--fx-pixel);color:var(--fx-gold-hi);white-space:nowrap}
.fx-printer{width:min(100%,270px);display:flex;flex-direction:column;align-items:center}
.fx-machine{position:relative;width:100%;padding:12px 12px 30px;background:var(--fx-stone);border:2px solid #17130d;box-shadow:inset 0 2px 0 var(--fx-stone-hi),inset 0 -3px 0 #2c251b,0 20px 36px -20px #000}
.fx-m-head{display:flex;align-items:center;gap:8px;height:34px;font-family:var(--fx-pixel);font-size:12px;letter-spacing:.1em;color:var(--fx-gold-hi)}
.fx-screen{display:flex;align-items:center;gap:10px;padding:12px 14px;background:#0c0b08;border:2px solid #17130d;box-shadow:inset 0 0 18px rgb(0 0 0/70%);font-family:var(--fx-pixel);font-size:13px;color:var(--fx-gold-hi);min-height:46px}
.fx-spin{width:12px;height:12px;flex:none;background:#E9B84C;opacity:.35}
.fx-printer[data-stage="processing"] .fx-spin,.fx-printer[data-stage="printing"] .fx-spin{opacity:1;animation:fx-blink .5s steps(2) infinite}
.fx-printer[data-stage="complete"] .fx-spin{opacity:1;background:#6fbf5a;animation:none}
@keyframes fx-blink{50%{opacity:.2}}
.fx-slot{position:absolute;left:22px;right:22px;bottom:10px;height:8px;background:#0c0b08;box-shadow:inset 0 2px 3px #000}
.fx-output{position:relative;width:calc(100% - 36px);height:440px;margin-top:-14px;overflow:hidden;z-index:1}
.fx-paper{position:relative;margin:0 4px;padding:20px 16px 26px;background:#EFE7D6;color:#26221c;font:12px/1.5 var(--fx-mono);transform:translateY(calc(-100% + 2px));opacity:0}
.fx-paper p{margin:0;color:inherit}
.fx-paper hr{border:0;border-top:1px dashed #26221c;opacity:.5;margin:9px 0}
.fx-paper .c{text-align:center}.fx-paper .s{font-size:11px;opacity:.75}
.fx-paper .r{display:flex;justify-content:space-between;gap:10px}
.fx-paper .t{font-weight:700;font-size:14px}
.fx-printer[data-stage="printing"] .fx-paper{opacity:1;animation:fx-feed 1.75s linear forwards}
.fx-printer[data-stage="complete"] .fx-paper{opacity:1;transform:none}
@keyframes fx-feed{0%{transform:translateY(calc(-100% + 2px))}7.5%,10.5%{transform:translateY(-91%)}18%,21%{transform:translateY(-81%)}28.5%,31.5%{transform:translateY(-70%)}
  39%,42%{transform:translateY(-58%)}49.5%,52.5%{transform:translateY(-45%)}60%,63%{transform:translateY(-32%)}70.5%,73.5%{transform:translateY(-20%)}
  81%,84%{transform:translateY(-10%)}91.5%,94.5%{transform:translateY(-3%)}100%{transform:translateY(0)}}
@media (prefers-reduced-motion:reduce){.fx-printer .fx-paper{animation:none!important}.fx-printer[data-stage="printing"] .fx-paper{transform:none;opacity:1}.fx-printer .fx-spin{animation:none!important}}

/* Race start */
.fx-race{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px;align-items:start}
@media (max-width:700px){.fx-race{grid-template-columns:minmax(0,1fr)}}
.fx-lights{display:flex;gap:10px;justify-content:center;padding:14px;background:#0c0b08;border:2px solid #17130d}
.fx-light{width:38px;height:38px;background:#2a1414;box-shadow:inset 0 0 0 4px #17130d}
.fx-light.red{background:#d63c3c;box-shadow:inset 0 0 0 4px #17130d,0 0 18px #d63c3c}
.fx-light.green{background:#5fd35f;box-shadow:inset 0 0 0 4px #17130d,0 0 18px #5fd35f}
.fx-clock{font-family:var(--fx-pixel);font-size:42px;text-align:center;color:var(--fx-gold-hi);font-variant-numeric:tabular-nums;line-height:1.1;margin:10px 0 4px}
.fx-clock-note{text-align:center;font:12px var(--fx-mono);color:var(--fx-ink2);min-height:1.5em}
.fx-race-stats{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;margin:12px 0 0;font-size:14px}
.fx-race-stats dt{font:11px var(--fx-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--fx-ink2);padding-top:2px}
.fx-race-stats dd{margin:0}

/* Title badges */
.fx-badges{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px}
.fx-badge{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:6px;padding:14px;border:3px solid var(--fx-gold);background:linear-gradient(160deg,#3d3122,#211b13);color:var(--fx-ink);text-align:left;font:inherit}
.fx-badge::after{content:"";position:absolute;inset:0;pointer-events:none;mix-blend-mode:color-dodge;opacity:0;transition:opacity .2s;
  background:linear-gradient(calc(var(--ang,110) * 1deg),transparent 30%,rgb(255 230 160/.55) 48%,rgb(160 220 255/.4) 55%,transparent 70%)}
.fx-badge:hover::after,.fx-badge:focus-visible::after{opacity:1}
.fx-badge .ttl{font-family:var(--fx-pixel);font-size:18px;color:var(--fx-gold-hi);line-height:1.15}
.fx-badge .col{font:700 12px var(--fx-display);font-stretch:125%}
.fx-badge .cond{font-size:12.5px;color:var(--fx-ink2)}
.fx-badge .rw{font:11px var(--fx-mono);color:var(--fx-gold)}

/* Willana board with undo (UndoNotice) */
.fx-board{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px;padding:14px;background:#3b2c1a;border:4px solid #241a0f;box-shadow:inset 0 0 0 2px #5a4428}
.fx-errand{background:#EFE7D6;color:#26221c;padding:12px 14px 14px;display:flex;flex-direction:column;gap:6px;box-shadow:0 6px 0 -2px rgb(0 0 0/35%);transition:opacity .2s,transform .2s}
.fx-errand.gone{opacity:0;transform:translateY(8px) rotate(2deg)}
.fx-errand .ty{font-family:var(--fx-pixel);font-size:16px}
.fx-errand .ex{font-size:13px}.fx-errand .pay{font:700 12px var(--fx-mono)}
.fx-errand .tag{font:10px var(--fx-mono);letter-spacing:.06em;text-transform:uppercase;opacity:.65}
.fx-errand button{align-self:flex-start;margin-top:4px;font:700 12px var(--fx-mono);background:transparent;border:2px solid #26221c;color:#26221c;padding:6px 10px;cursor:pointer}
.fx-toast{visibility:hidden;position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translate(-50%,140%);z-index:60;display:flex;align-items:center;gap:14px;
  background:#0c0b08;border:2px solid #E9B84C;color:#EFE7D6;padding:10px 12px 12px 16px;font:14px "Chivo",system-ui,sans-serif;max-width:calc(100% - 32px);transition:transform .25s cubic-bezier(.23,1,.32,1)}
.fx-toast.show{visibility:visible;transform:translate(-50%,0)}
.fx-toast button{font:700 13px "Chivo Mono",ui-monospace,monospace;background:#E9B84C;color:#3a2706;border:0;padding:8px 12px;cursor:pointer}
.fx-toast .bar{position:absolute;left:0;bottom:0;height:3px;background:#E9B84C;width:100%;transform-origin:left}
.fx-toast.show .bar{animation:fx-shrink 5s linear forwards}
@keyframes fx-shrink{to{transform:scaleX(0)}}
@media (prefers-reduced-motion:reduce){.fx-toast,.fx-errand{transition:none}}

/* Passport stamps (Stamp) */
.fx-stamps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
@media (max-width:640px){.fx-stamps{grid-template-columns:repeat(2,minmax(0,1fr))}}
.fx-stamp-btn{position:relative;display:block;width:100%;padding:0;border:0;background:none;cursor:pointer;color:inherit;filter:drop-shadow(0 1px 1px rgb(0 0 0/30%)) drop-shadow(0 10px 18px rgb(0 0 0/35%))}
.fx-stamp{display:flex;flex-direction:column;gap:6px;aspect-ratio:4/5;padding:10px;background:linear-gradient(145deg,rgb(255 255 255/30%),transparent 42%),#EFE7D6;color:#26221c;transition:transform .2s cubic-bezier(.23,1,.32,1)}
.fx-stamp img{display:block;width:100%;flex:1;min-height:0;object-fit:cover;border:2px solid #26221c}
.fx-stamp .nm{font:800 12px var(--fx-display);font-stretch:125%;text-transform:uppercase;letter-spacing:.04em;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fx-stamp .val{position:absolute;top:16px;right:16px;font-family:var(--fx-pixel);font-size:13px;color:#F8DC86;background:#26221c;padding:1px 5px}
@media (hover:hover) and (pointer:fine){.fx-stamp-btn:hover .fx-stamp{transform:translateY(-3px) rotate(-1deg)}}
.fx-postmark{position:absolute;inset:18% 6% auto auto;width:68%;pointer-events:none;color:#A11D33;opacity:0;transform:scale(1.6) rotate(-24deg)}
.fx-postmark svg{display:block;width:100%;height:auto;mix-blend-mode:multiply}
.fx-stamp-btn[aria-pressed="true"] .fx-postmark{opacity:.88;transform:scale(1) rotate(-14deg);transition:transform .22s cubic-bezier(.3,1.6,.5,1),opacity .08s}
.fx-stamp-btn.thud .fx-stamp{animation:fx-thud .25s ease-out}
@keyframes fx-thud{40%{transform:scale(.96)}100%{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.fx-stamp-btn .fx-postmark,.fx-stamp-btn .fx-stamp{transition:none!important;animation:none!important}}
