/* Japan 2028 — shared stylesheet */

:root{
  --ink:#0F1620; --ink-2:#48566B;
  --tile:#E7EBF0; --paper:#FFFFFF; --rule:#C9D2DD;
  --line:#1E4D8C; --flag:#E0921F; --flag-soft:#FBF0DC;
  --display:"Zen Kaku Gothic New",system-ui,sans-serif;
  --body:"IBM Plex Sans",system-ui,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,monospace;
  --pad:20px; --max:760px;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--tile);color:var(--ink);font-family:var(--body);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}
.wrap{max-width:var(--max);margin:0 auto;padding:0 var(--pad)}

.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-2);margin:0 0 10px}
h1,h2,h3{font-family:var(--display);font-weight:900;letter-spacing:-.02em;margin:0}
h1{font-size:clamp(34px,9vw,60px);line-height:.96}
h2{font-size:clamp(24px,6vw,34px);line-height:1.05}
h3{font-size:18px;font-weight:700;letter-spacing:-.01em}
p{margin:0 0 14px}
a{color:var(--line)}
a:focus-visible,.cta:focus-visible,nav a:focus-visible{outline:3px solid var(--flag);outline-offset:3px}

/* ---------- nav ---------- */
nav{position:sticky;top:0;z-index:20;background:var(--ink);border-bottom:1px solid #2A3646}
nav ul{display:flex;gap:0;margin:0 auto;padding:0;list-style:none;max-width:var(--max);overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
nav ul::-webkit-scrollbar{display:none}
nav a{
  display:block;padding:14px 15px;text-decoration:none;white-space:nowrap;
  font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:#8FA6C4;border-bottom:3px solid transparent;
}
nav a:hover{color:#fff}
nav a[aria-current="page"]{color:#fff;border-bottom-color:var(--flag)}

/* ---------- masthead ---------- */
.mast{background:var(--ink);color:#fff;padding:34px 0 0;border-bottom:6px solid var(--line);overflow:hidden}
.mast.slim{padding-bottom:28px}
.mast .eyebrow{color:#8FA6C4}
.mast h1{color:#fff}
.mast h1 em{font-style:normal;color:#7FA9E0}
.mast .sub{margin:18px 0 0;color:#C3CEDD;max-width:46ch;font-size:15px}
.mast .sub b{color:#fff}
.deadline{display:inline-flex;align-items:baseline;gap:10px;margin-top:20px;padding:9px 14px;background:var(--flag);color:#1E1403;border-radius:2px;font-family:var(--mono);font-size:13px}
.deadline b{font-weight:500;letter-spacing:.1em;text-transform:uppercase;font-size:10px;opacity:.75}

/* ---------- triptych hero ---------- */
.tript{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:28px 0 -34px;align-items:end}
.panel{position:relative;border-radius:999px;overflow:hidden;background:#1B2432;box-shadow:0 10px 40px rgba(0,0,0,.35)}
.panel img{display:block;width:100%;height:100%;object-fit:cover;filter:saturate(.82) contrast(1.04)}
.panel::after{content:"";position:absolute;inset:0;border-radius:999px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.14);pointer-events:none}
.p1{aspect-ratio:1/2}
.p2{aspect-ratio:1/2.3}
.p3{aspect-ratio:1/1.85}
.panel .lbl{
  position:absolute;left:0;right:0;bottom:16px;text-align:center;
  font-family:var(--mono);font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;
  color:#fff;text-shadow:0 1px 8px rgba(0,0,0,.8);
}
.panel.empty img{display:none}
.panel.empty{background:repeating-linear-gradient(45deg,#222D3D 0 14px,#1B2432 14px 28px)}

section{padding:38px 0 8px}
.sec-head{margin-bottom:22px}
.sec-head p{color:var(--ink-2);max-width:56ch;margin-top:10px}

/* ---------- photo slots ---------- */
.shot{margin:0 0 16px;background:var(--rule);border-radius:3px;overflow:hidden;position:relative}
.shot img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover}
.shot .slot{position:absolute;inset:0;display:none;align-items:center;justify-content:center;font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:#5C6B7E;text-align:center;padding:12px}
.shot.empty{background:repeating-linear-gradient(45deg,#D8DFE7 0 14px,#CFD8E2 14px 28px)}
.shot.empty img{display:none}
.shot.empty .slot{display:flex}
.shot.empty::before{content:"";display:block;padding-top:56.25%}

/* ---------- ballot ---------- */
.ballot{background:var(--paper);border:1px solid var(--rule);border-radius:3px;padding:20px;margin-bottom:14px}
.ballot .q{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--line);margin-bottom:14px}
.opt{padding:16px 0;border-top:1px solid var(--rule)}
.opt:first-of-type{border-top:0;padding-top:2px}
.opt-name{font-family:var(--display);font-weight:700;font-size:17px;display:flex;flex-wrap:wrap;align-items:baseline;gap:8px}
.tag{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;padding:2px 7px;border-radius:2px;background:var(--flag-soft);color:#8A5A05}
.tag.rec{background:#DCEAF8;color:#134577}
.pro,.con{display:flex;gap:9px;font-size:14.5px;margin-top:7px;color:var(--ink-2)}
.pro::before{content:"+";color:var(--line);font-family:var(--mono);flex:none}
.con::before{content:"\2212";color:#B4562B;font-family:var(--mono);flex:none}

.strip{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule);margin:12px 0 4px;border-radius:2px;overflow:hidden}
.strip div{background:#F7F9FB;padding:8px 10px}
.strip dt{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);margin:0}
.strip dd{font-family:var(--mono);font-size:13px;margin:2px 0 0;color:var(--ink)}
.strip dd.bad{color:#A8471F}
.strip dd.good{color:#1B6B3A}

/* ---------- route line ---------- */
.route{position:relative;margin:0;padding:0 0 0 34px;list-style:none}
.route::before{content:"";position:absolute;left:8px;top:10px;bottom:26px;width:4px;background:var(--line);border-radius:2px;transform-origin:top;transform:scaleY(var(--draw,1))}
.stop{position:relative;padding:0 0 32px}
.stop::before{content:"";position:absolute;left:-34px;top:6px;width:20px;height:20px;border-radius:50%;background:var(--tile);border:4px solid var(--line)}
.stop.change::before{border-color:var(--flag);background:#fff}
.stop-top{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px}
.stop-name{font-family:var(--display);font-weight:900;font-size:22px;letter-spacing:-.02em}
.stop-jp{font-family:var(--display);font-weight:700;font-size:13px;color:var(--ink-2)}
.nights{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#fff;background:var(--line);padding:3px 8px;border-radius:2px}
.stop ul{margin:10px 0 0;padding-left:18px;color:var(--ink-2);font-size:14.5px}
.stop li{margin-bottom:5px}
.stop li b{color:var(--ink);font-weight:600}
.stop .shot{margin-top:14px}
.leg{font-family:var(--mono);font-size:12px;color:var(--ink-2);margin-top:10px;padding:7px 10px;background:var(--paper);border-left:3px solid var(--rule)}

/* ---------- timeline ---------- */
.tl{position:relative;margin:0;padding:0 0 0 34px;list-style:none}
.tl::before{content:"";position:absolute;left:8px;top:10px;bottom:22px;width:4px;background:var(--rule);border-radius:2px}
.tl li{position:relative;padding:0 0 22px}
.tl li::before{content:"";position:absolute;left:-34px;top:5px;width:20px;height:20px;border-radius:50%;background:var(--tile);border:4px solid var(--rule)}
.tl li.now::before{border-color:var(--flag);background:var(--flag)}
.tl li.key::before{border-color:var(--line);background:var(--line)}
.tl .when{font-family:var(--mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);display:block}
.tl .what{font-family:var(--display);font-weight:700;font-size:16px;margin-top:2px}
.tl .why{font-size:14px;color:var(--ink-2);margin-top:3px}

/* ---------- notes ---------- */
.note{background:var(--paper);border:1px solid var(--rule);border-left:4px solid var(--flag);border-radius:3px;padding:18px;margin-bottom:14px}
.note.blue{border-left-color:var(--line)}
.note h3{margin-bottom:8px}
.note p:last-child{margin-bottom:0}
.note ul{margin:0;padding-left:18px;color:var(--ink-2);font-size:14.5px}
.note li{margin-bottom:6px}

/* ---------- cta ---------- */
.cta{display:block;background:var(--flag);color:#1E1403;text-align:center;text-decoration:none;font-family:var(--display);font-weight:900;font-size:clamp(20px,5vw,26px);padding:22px;border-radius:3px;margin:8px 0 10px;transition:transform .12s ease,box-shadow .12s ease}
.cta:hover{transform:translateY(-2px);box-shadow:0 6px 0 #A96D0F}
.cta:active{transform:translateY(0);box-shadow:none}
.cta-sub{text-align:center;font-family:var(--mono);font-size:12px;color:var(--ink-2);margin:0 0 8px}
.cta.ghost{background:transparent;color:var(--line);border:2px solid var(--line);font-size:17px;padding:15px}
.cta.ghost:hover{background:var(--line);color:#fff;box-shadow:none}

/* ---------- at a glance ---------- */
.glance{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--rule);border:1px solid var(--rule);border-radius:3px;overflow:hidden;margin-bottom:20px}
.glance div{background:var(--paper);padding:14px}
.glance dt{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);margin:0}
.glance dd{margin:4px 0 0;font-family:var(--display);font-weight:700;font-size:15px;line-height:1.3}

/* ---------- form embed ---------- */
.embed{background:var(--paper);border:1px solid var(--rule);border-radius:3px;overflow:hidden;margin-bottom:16px}
.embed iframe{display:block;width:100%;height:1400px;border:0}
.embed .fallback{padding:24px;text-align:center;font-family:var(--mono);font-size:13px;color:var(--ink-2)}

/* ---------- recap ---------- */
.recap{margin:0 0 20px;padding:0;list-style:none;counter-reset:r}
.recap li{position:relative;background:var(--paper);border:1px solid var(--rule);border-radius:3px;padding:14px 16px 14px 52px;margin-bottom:8px}
.recap li::before{
  counter-increment:r;content:"Q" counter(r);
  position:absolute;left:14px;top:14px;
  font-family:var(--mono);font-size:11px;letter-spacing:.08em;
  color:#fff;background:var(--line);padding:3px 6px;border-radius:2px;
}
.recap .rq{font-family:var(--display);font-weight:700;font-size:16px}
.recap .ra{font-size:14px;color:var(--ink-2);margin-top:3px}
.recap .ra a{text-decoration:none;border-bottom:1px solid var(--rule)}

footer{margin-top:44px;padding:24px 0 40px;border-top:1px solid var(--rule);font-family:var(--mono);font-size:12px;color:var(--ink-2)}
footer a{margin-right:14px}

@media (max-width:420px){
  .strip,.glance{grid-template-columns:1fr}
  nav a{padding:13px 12px;font-size:10px}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  html{scroll-behavior:auto}
  .route::before{transform:none!important}
}
