*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  /* ── New palette ── */
  --page:#3B4870;
  --header:#2A3557;
  --ink:#F4EFE4;
  --ink-soft:#B8C4E0;
  --logo:#F0E6D2;
  --nav-active:rgba(240,230,210,.16);
  /* Card accents */
  --coral:#F0997B;   --coral-dark:#4A1B0C;
  --teal:#5DCAA5;    --teal-dark:#04342C;
  --pink:#ED93B1;    --pink-dark:#4B1528;
  --amber:#FAC775;   --amber-dark:#412402;
  --green:#97C459;   --green-dark:#173404;
  --blue:#85B7EB;    --blue-dark:#042C53;
  /* Legacy aliases used in map.js / misc */
  --bg:var(--page);--panel:transparent;--border:rgba(184,196,224,.18);
  --text:var(--ink);--accent:var(--coral);--gold:var(--amber);
  --snow:var(--ink);
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:0.01ms!important;transition-duration:0.01ms!important}
}
html{font-size:16px}
body{
  font-family:'Segoe UI',system-ui,-apple-system,sans-serif;
  background:var(--page);color:var(--ink);min-height:100vh;
  overflow-x:hidden;
}
.hidden{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
a{color:var(--blue)}
button{
  background:var(--coral);color:#fff;border:none;border-radius:8px;
  padding:8px 16px;cursor:pointer;font-size:.9rem;font-weight:600;
  transition:background .2s;
}
button:hover,button:focus-visible{background:#d4805e}
button:focus-visible{outline:2px solid var(--amber);outline-offset:2px}
input,textarea{
  background:rgba(0,0,0,.2);color:var(--ink);border:1px solid var(--border);
  border-radius:8px;padding:8px 12px;font-size:.9rem;width:100%;
  font-family:inherit;
}
input:focus,textarea:focus{outline:2px solid var(--blue);border-color:var(--blue)}
label{display:block;font-size:.85rem;color:var(--ink-soft);margin:8px 0 4px}

/* ═══ Hero Banner (untouched) ═══ */
.hero{position:relative;border-radius:16px;overflow:hidden;background:#0A2140;margin:0}
.hero svg{display:block;width:100%;height:auto}
.hero-copy{position:absolute;left:0;right:0;top:8%;text-align:center;padding:0 24px;text-shadow:0 2px 12px rgba(6,16,36,.9),0 0 26px rgba(6,16,36,.7)}
.hero-title{margin:0;font-size:clamp(30px,5.2vw,52px);font-weight:600;color:#FFF6EC;letter-spacing:-.5px}
.hero-sub{margin:10px 0 0;font-size:clamp(14px,1.9vw,18px);color:#D8E7F4}
.hero-btn{margin-top:22px;background:#E24B4A;color:#FFF6EC;border:none;border-radius:999px;padding:14px 30px;font-size:16px;font-weight:600;cursor:pointer}
.hero-btn:hover{background:#c83a3a}
.hero-btn:focus-visible{outline:3px solid #FFD277;outline-offset:3px}
.hero-count{margin:14px 0 0;font-size:14px;color:#FFD277}
@keyframes hero-fall{to{transform:translateY(470px)}}
@keyframes hero-sway{0%,100%{transform:translateX(-9px)}50%{transform:translateX(9px)}}
@keyframes hero-spin{to{transform:rotate(360deg)}}
@keyframes twk{0%,100%{opacity:.25}50%{opacity:1}}
@keyframes cross{0%{transform:translate(920px,172px)}24%{transform:translate(636px,126px)}100%{transform:translate(-260px,84px)}}
@keyframes wisp{0%{transform:translate(0,0) scale(.5);opacity:0}22%{opacity:.6}70%{opacity:.3}100%{transform:translate(-11px,-28px) scale(1.05);opacity:0}}
@keyframes glow{0%,100%{opacity:1}50%{opacity:.62}}
.sk{animation:cross 20s linear infinite}
.hero-flake{transform-box:fill-box;transform-origin:center}
.hero-wisp{transform-box:fill-box;transform-origin:50% 100%}
@media(prefers-reduced-motion:reduce){
  .sk,.hero-sn,.hero-sw,.hero-flake,.hero-wisp,.hero-bulb,.hero-win{animation:none!important}
  .hero-wisp{opacity:.4}
}

/* ═══ Nav Bar ═══ */
#main-nav{
  display:flex;align-items:center;gap:8px;
  padding:8px 12px;background:var(--header);border-bottom:1px solid rgba(240,230,210,.08);
  flex-wrap:wrap;
}
.nav-title{font-weight:800;color:var(--logo);font-size:1.1rem;margin-right:8px}
.nav-greeting{font-size:.85rem;color:var(--ink-soft);margin-right:auto}
.nav-links{display:flex;gap:4px;flex-wrap:wrap}
.nav-btn{
  background:transparent;color:var(--ink-soft);padding:6px 10px;font-size:.8rem;
  border-radius:6px;font-weight:500;
}
.nav-btn:hover{background:rgba(240,230,210,.08)}
.nav-btn.active{background:var(--nav-active);color:var(--ink)}

/* ═══ Layout ═══ */
#app{display:flex;flex-direction:column;min-height:calc(100vh - 50px)}
#view-tracker{display:flex;flex-direction:column;flex:1}
#map-container{position:relative;width:100%;flex:1;min-height:300px;overflow:hidden;background:#2c3460}
#map-container svg{display:block;width:100%;height:100%}

/* Stars */
.star{fill:#fff;opacity:0}
@keyframes twinkle{0%,100%{opacity:.2}50%{opacity:1}}
.star{animation:twinkle var(--dur) ease-in-out infinite;animation-delay:var(--delay)}

/* ═══ Tracker Panels ═══ */
#panels{
  display:grid;grid-template-columns:1fr;gap:12px;padding:12px;
  max-width:1400px;width:100%;margin:0 auto;
}
@media(min-width:600px){#panels{grid-template-columns:1fr 1fr}}
@media(min-width:900px){#panels{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1200px){#panels{grid-template-columns:repeat(4,1fr)}}
.panel{
  background:transparent;border:2px solid var(--border);border-radius:14px;
  padding:16px;
}
.panel h2{font-size:.85rem;color:var(--ink-soft);margin-bottom:8px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}
.panel .big{font-size:1.5rem;font-weight:700;color:var(--ink)}
.panel .sub{font-size:.8rem;color:var(--ink-soft);margin-top:4px}
.fun-fact{font-style:italic;color:var(--teal);margin-top:6px;font-size:.85rem}
.weather-info{margin-top:6px;font-size:.85rem;color:var(--ink-soft)}
.weather-icon{font-size:1.1rem;margin-right:4px}

/* Accent-bordered panels */
#panel-status{border-color:var(--coral)}
#panel-status h2{color:var(--coral)}
#panel-current{border-color:var(--teal)}
#panel-current h2{color:var(--teal)}
#panel-next{border-color:var(--pink)}
#panel-next h2{color:var(--pink)}
#panel-gifts{border-color:var(--amber)}
#panel-gifts h2{color:var(--amber)}
#panel-distance{border-color:var(--green)}
#panel-distance h2{color:var(--green)}
#panel-local{border-color:var(--blue)}
#panel-local h2{color:var(--blue)}
#panel-speed{border-color:var(--coral)}
#panel-speed h2{color:var(--coral)}
#search-panel{border-color:var(--teal)}
#search-panel h2{color:var(--teal)}

/* Speed toggle */
#speed-toggle{display:flex;gap:6px;flex-wrap:wrap}
#speed-toggle button{padding:6px 12px;font-size:.8rem;background:rgba(240,230,210,.08);color:var(--ink-soft);border:1px solid var(--border)}
#speed-toggle button.active{background:var(--coral);color:#fff;border-color:var(--coral)}
#speed-toggle button:hover:not(.active){background:rgba(240,230,210,.12)}

/* Search */
#search-panel{grid-column:1/-1}
#search-panel .search-row{display:flex;gap:8px;margin-bottom:8px}
#search-panel input{flex:1}
#search-result{min-height:2.5em;line-height:1.5}

/* Countdown overlay */
#countdown-overlay{
  position:absolute;top:0;left:0;right:0;bottom:0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  background:rgba(42,53,87,.92);z-index:10;
}
.countdown-title{font-size:clamp(1.2rem,3vw,1.8rem);margin-bottom:16px;color:var(--ink)}
.countdown-boxes{display:flex;gap:clamp(8px,2vw,20px);flex-wrap:wrap;justify-content:center}
.countdown-unit{
  background:transparent;border:2px solid var(--amber);border-radius:14px;
  padding:clamp(12px,2vw,24px) clamp(16px,3vw,32px);text-align:center;
  min-width:clamp(60px,12vw,100px);
}
.countdown-unit .num{
  font-size:clamp(1.8rem,5vw,3.5rem);font-weight:800;color:var(--amber);
  font-variant-numeric:tabular-nums;
}
.countdown-unit .lbl{font-size:clamp(.65rem,1.5vw,.85rem);color:var(--ink-soft);margin-top:4px;text-transform:uppercase}
.countdown-sub{margin-top:20px;font-size:.95rem;color:var(--teal)}
.countdown-demo-hint{margin-top:12px;font-size:.8rem;color:var(--ink-soft)}

/* Santa SVG */
#santa-group{transition:transform .3s linear}

/* Tooltip */
#city-tooltip{
  position:absolute;background:var(--header);border:1px solid var(--border);
  border-radius:8px;padding:8px 12px;font-size:.8rem;pointer-events:none;
  opacity:0;transition:opacity .2s;z-index:5;white-space:nowrap;color:var(--ink);
}
#city-tooltip.show{opacity:1}

/* Counters */
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}
.gift-pulse{animation:pulse .4s ease}
@keyframes countUp{from{opacity:.7}to{opacity:1}}
.count-tick{animation:countUp .15s ease}

/* Distance / speed */
.stat-row{display:flex;justify-content:space-between;align-items:baseline;margin-top:4px}
.stat-label{font-size:.75rem;color:var(--ink-soft)}
.stat-value{font-size:1rem;font-weight:600;color:var(--ink)}

/* ═══ Shared view styles ═══ */
.view-content{
  max-width:1000px;width:100%;margin:0 auto;padding:24px 16px;
}
.view-narrow{max-width:600px}
.view-title{font-size:1.6rem;color:var(--ink);margin-bottom:8px;font-weight:700}
.view-desc{font-size:.9rem;color:var(--ink-soft);margin-bottom:16px}

/* ═══ Outline SVG icons (shared) ═══ */
.card-icon{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}

/* ═══ Advent Calendar ═══ */
.dev-toggle-label{
  display:inline-flex;align-items:center;gap:6px;
  font-size:.8rem;color:var(--ink-soft);margin-bottom:16px;cursor:pointer;
}
.dev-toggle-label input{width:auto}

.advent-grid{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:10px;
}
@media(min-width:600px){.advent-grid{grid-template-columns:repeat(6,1fr)}}
@media(min-width:900px){.advent-grid{grid-template-columns:repeat(8,1fr)}}

.advent-door{
  aspect-ratio:1;border-radius:14px;border:2px solid var(--border);
  background:transparent;display:flex;flex-direction:column;
  align-items:center;justify-content:center;cursor:pointer;
  transition:transform .2s,border-color .2s;position:relative;overflow:hidden;
  padding:6px;
}
.advent-door .door-num{
  font-size:1.4rem;font-weight:800;color:var(--amber);
}
.advent-door.locked{opacity:.45;cursor:not-allowed}
.advent-door.locked .door-num{color:var(--ink-soft)}
.advent-door.unlocked:hover{transform:scale(1.05);border-color:var(--amber)}
.advent-door.opened{
  border-color:var(--teal);
}
.advent-door.opened .door-num{font-size:1rem;color:var(--teal)}
.advent-door .door-treat{font-size:.6rem;color:var(--ink-soft);text-align:center;margin-top:2px;line-height:1.2}

/* ═══ Workshop Hub ═══ */
.workshop-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;
}
.workshop-building{
  background:transparent;border:2px solid var(--border);border-radius:14px;
  padding:24px 16px;display:flex;flex-direction:column;align-items:center;
  text-align:center;cursor:pointer;transition:transform .2s,border-color .2s;
}
.workshop-building:hover{transform:scale(1.03)}
/* Per-game accent colours */
.workshop-building[data-accent="coral"]{border-color:var(--coral)}
.workshop-building[data-accent="coral"] .building-name{color:var(--coral)}
.workshop-building[data-accent="coral"] .card-icon{color:var(--coral)}
.workshop-building[data-accent="coral"]:hover{border-color:var(--coral)}

.workshop-building[data-accent="teal"]{border-color:var(--teal)}
.workshop-building[data-accent="teal"] .building-name{color:var(--teal)}
.workshop-building[data-accent="teal"] .card-icon{color:var(--teal)}
.workshop-building[data-accent="teal"]:hover{border-color:var(--teal)}

.workshop-building[data-accent="pink"]{border-color:var(--pink)}
.workshop-building[data-accent="pink"] .building-name{color:var(--pink)}
.workshop-building[data-accent="pink"] .card-icon{color:var(--pink)}
.workshop-building[data-accent="pink"]:hover{border-color:var(--pink)}

.building-icon{margin-bottom:8px;display:flex;align-items:center;justify-content:center}
.building-name{font-size:1.1rem;font-weight:700;margin-bottom:4px}
.building-desc{font-size:.8rem;color:var(--ink-soft);margin-bottom:8px}
.building-best{font-size:.75rem;color:var(--ink)}

/* ═══ Letter to Santa ═══ */
.letter-form{display:flex;flex-direction:column;gap:4px;margin-bottom:20px}
.letter-form textarea{resize:vertical}
.letter-decorated{margin-top:16px}
.letter-border{
  background:#fdf5e6;color:#2d1a00;border:4px double #cc0000;
  border-radius:14px;padding:24px;position:relative;
  font-family:Georgia,"Times New Roman",serif;line-height:1.7;
}
.letter-header{
  text-align:center;font-size:1.3rem;font-weight:700;color:#cc0000;
  margin-bottom:12px;
}
.letter-holly{margin:0 6px}
.letter-date{font-size:.85rem;color:#666;margin-bottom:12px}
.letter-sign{margin-top:16px}
.letter-stamp{
  position:absolute;top:12px;right:16px;font-size:2rem;
  transform:rotate(12deg);opacity:.8;
}
.letter-disclaimer{
  font-size:.75rem;color:var(--ink-soft);margin-top:12px;text-align:center;
}

/* ═══ Nice List Check ═══ */
.nice-form{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}
.nice-form input{flex:1;min-width:180px}
.nice-spinner{
  width:60px;height:60px;border:4px solid var(--border);
  border-top-color:var(--amber);border-radius:50%;
  margin:20px auto;animation:spin 1s linear infinite;
}
.nice-spinner.spin2{border-top-color:var(--teal)}
@keyframes spin{to{transform:rotate(360deg)}}
.nice-checking{text-align:center;color:var(--ink-soft);font-size:.95rem}
.nice-result-card{
  background:transparent;border:2px solid var(--teal);border-radius:14px;
  padding:24px;text-align:center;max-width:400px;margin:0 auto;
}
.nice-star{font-size:3rem;margin-bottom:8px}
.nice-name{font-size:1.5rem;font-weight:800;color:var(--ink);margin-bottom:8px}
.nice-verdict{font-size:.95rem;color:var(--ink-soft);margin-bottom:12px;line-height:1.4}
.nice-badge{
  display:inline-block;background:var(--teal);color:var(--teal-dark);
  padding:8px 20px;border-radius:20px;font-weight:700;font-size:1rem;
}

/* ═══ Sleigh Customizer ═══ */
.customizer-controls{
  display:flex;flex-direction:column;gap:4px;margin-bottom:16px;
}
.customizer-controls input[type="color"]{
  width:80px;height:40px;padding:2px;cursor:pointer;
  border-radius:8px;border:1px solid var(--border);
}
.preview-label{font-size:1rem;color:var(--amber);margin-bottom:8px}
#sleigh-preview-canvas{
  border-radius:14px;border:2px solid var(--border);
  max-width:100%;
}

/* ═══ Game Modal ═══ */
.modal-overlay{
  position:fixed;top:0;left:0;right:0;bottom:0;
  background:rgba(42,53,87,.92);z-index:100;
  display:flex;align-items:center;justify-content:center;
  padding:16px;
}
.modal-box{
  background:var(--page);border:2px solid var(--border);border-radius:14px;
  width:100%;max-width:480px;max-height:90vh;overflow-y:auto;
}
.modal-header{
  display:flex;justify-content:space-between;align-items:center;
  padding:16px 20px;border-bottom:1px solid var(--border);
}
.modal-header h2{font-size:1.1rem;color:var(--amber)}
.modal-close-btn{
  background:none;color:var(--ink-soft);font-size:1.6rem;padding:4px 8px;
  line-height:1;border-radius:4px;
}
.modal-close-btn:hover{background:rgba(240,230,210,.08)}
.game-area{padding:20px}

/* Game shared styles */
.game-round{font-size:.8rem;color:var(--ink-soft);margin-bottom:8px}
.game-prompt{font-size:1.2rem;font-weight:700;color:var(--ink);margin-bottom:12px;line-height:1.4}
.game-hint{font-size:.8rem;color:var(--ink-soft);margin-bottom:8px}
.game-input{margin-bottom:8px}
.game-btn{margin-top:8px}
.game-feedback{margin-top:8px;font-weight:600;min-height:1.5em}
.game-result{font-size:1.3rem;font-weight:700;color:var(--amber);margin-bottom:12px;text-align:center}
.game-options{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.game-option-btn{
  background:transparent;border:2px solid var(--border);padding:12px;border-radius:10px;
  font-size:1rem;color:var(--ink);transition:background .2s,border-color .2s;
}
.game-option-btn:hover{border-color:var(--ink-soft);background:rgba(240,230,210,.06)}

/* Timer bar */
.game-timer-bar{
  width:100%;height:6px;background:rgba(184,196,224,.12);border-radius:3px;
  margin-bottom:12px;overflow:hidden;
}
.game-timer-fill{
  height:100%;background:var(--teal);border-radius:3px;
  transition:width .1s linear;width:100%;
}

/* ═══ Snowflake celebration overlay ═══ */
.snowflake-overlay{
  position:fixed;top:0;left:0;right:0;bottom:0;
  pointer-events:none;z-index:9999;overflow:hidden;
}
.snowflake-particle{
  position:absolute;top:-40px;
  animation:snowfall linear forwards;
  color:#fff;text-shadow:0 0 6px rgba(150,200,255,.8);
}
@keyframes snowfall{
  0%{transform:translateY(0) rotate(0deg);opacity:1}
  100%{transform:translateY(110vh) rotate(360deg);opacity:0.3}
}

/* Game button row */
.game-btn-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}
.game-hint-btn{background:transparent;border:1px solid var(--border);color:var(--ink-soft)}
.game-hint-btn:hover:not(:disabled){background:rgba(240,230,210,.08);color:var(--ink)}
.game-skip-btn{background:transparent;border:1px solid var(--border);color:var(--ink-soft);font-weight:400;font-size:.8rem}
.game-skip-btn:hover{background:rgba(240,230,210,.08);color:var(--ink)}

/* Level picker */
.level-picker{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.level-option{display:flex;flex-direction:column;align-items:stretch}
.level-btn{
  display:flex;align-items:center;gap:10px;
  background:transparent;border:2px solid var(--border);color:var(--ink);
  padding:14px 20px;border-radius:10px;font-size:1rem;font-weight:600;
  text-align:left;transition:border-color .15s,background .15s;
}
.level-btn:hover{border-color:var(--ink-soft);background:rgba(240,230,210,.06)}
.level-btn .card-icon{flex-shrink:0}
.level-desc{font-size:.75rem;color:var(--ink-soft);margin:2px 0 0 4px}

/* ═══ Music toggle ═══ */
.music-toggle-btn{
  background:transparent;border:1px solid rgba(240,230,210,.15);
  color:var(--ink-soft);padding:5px 12px;font-size:.75rem;
  border-radius:999px;font-weight:500;white-space:nowrap;
}
.music-toggle-btn:hover{background:rgba(240,230,210,.08);color:var(--ink)}
.music-toggle-btn[aria-pressed="true"]{background:rgba(240,230,210,.12);color:var(--amber);border-color:var(--amber)}

/* ═══ Sound control ═══ */
.snd-control{
  display:inline-flex;align-items:center;gap:8px;
  padding:4px 6px;border-radius:999px;background:rgba(240,230,210,.07);
}
.snd-btn{
  display:grid;place-items:center;width:34px;height:34px;padding:0;
  border:none;border-radius:50%;background:transparent;color:var(--amber);cursor:pointer;
}
.snd-btn:hover{background:rgba(250,199,117,.16)}
.snd-btn:focus-visible{outline:3px solid var(--amber);outline-offset:2px}
.snd-btn[aria-pressed="false"]{color:var(--ink-soft)}
.snd-range{
  width:0;opacity:0;margin:0;
  transition:width .18s ease,opacity .18s ease;
  accent-color:var(--amber);cursor:pointer;
}
.snd-control:hover .snd-range,
.snd-control:focus-within .snd-range{width:84px;opacity:1}
.snd-range:focus-visible{outline:2px solid var(--amber);outline-offset:3px;border-radius:999px}
@media(hover:none){.snd-range{width:84px;opacity:1}}
@media(prefers-reduced-motion:reduce){.snd-range{transition:none}}

/* ═══ Print stylesheet for Letter ═══ */
@media print{
  body *{visibility:hidden}
  #letter-preview,#letter-preview *{visibility:visible}
  #letter-preview{position:absolute;top:0;left:0;width:100%}
  .letter-disclaimer,.game-btn{display:none!important}
  .letter-border{border-color:#cc0000!important;color:#000!important}
}
