/* Layout: a European timetable. Blue masthead, a boxed map, then a rail of date blocks and ticket rows. */
:root{
  --bg:#EDF0F8; --surface:#FFFFFF; --ink:#0A1633; --muted:#4B5879; --line:#0A1633;
  --blue:#1737C7; --blue-deep:#0B1B5C; --on-blue:#FFFFFF; --yellow:#FFD21F; --on-yellow:#0A1633;
  --free:#0C7A4D; --soft:#DDE3F5;
  --map-bg:#DDE3F5;
  --display:'Archivo',system-ui,sans-serif;
  --body:'Instrument Sans',system-ui,-apple-system,sans-serif;
  --mono:'DM Mono',ui-monospace,Menlo,monospace;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#070D24; --surface:#101B47; --ink:#EEF2FF; --muted:#9FAED8; --line:#6E83D6;
  --blue:#6F8CFF; --blue-deep:#0B1B5C; --on-blue:#FFFFFF; --yellow:#FFD21F; --on-yellow:#0A1633;
  --free:#4FD69C; --soft:#1A2A63; --map-bg:#1A2A63; color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#070D24; --surface:#101B47; --ink:#EEF2FF; --muted:#9FAED8; --line:#6E83D6;
  --blue:#6F8CFF; --blue-deep:#0B1B5C; --on-blue:#FFFFFF; --yellow:#FFD21F; --on-yellow:#0A1633;
  --free:#4FD69C; --soft:#1A2A63; --map-bg:#1A2A63; color-scheme:dark}

*{box-sizing:border-box}
body{background:var(--bg);color:var(--ink);font:15px/1.5 var(--body);
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));
  padding-block:16px 64px}
button{font:inherit;color:inherit}
a{color:var(--blue)}
:focus-visible{outline:3px solid var(--yellow);outline-offset:2px}
.wrap{max-width:900px;margin:0 auto}

.hero{background:var(--blue-deep);color:var(--on-blue);padding:26px 22px 22px;border-radius:4px;position:relative;overflow:hidden}
.hero::after{content:"";position:absolute;right:-60px;top:-60px;width:220px;height:220px;border-radius:50%;border:22px solid var(--yellow);opacity:.9}
.eyebrow{font:500 12px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--yellow)}
h1{font:900 clamp(52px,15vw,104px)/.9 var(--display);font-stretch:125%;letter-spacing:-.04em;margin:12px 0 0;position:relative;z-index:1}
.sub{margin:12px 0 0;max-width:34ch;font-size:17px;position:relative;z-index:1}
.notice{margin:14px 0 0;font-size:12px;opacity:.75;position:relative;z-index:1}

.controls{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-top:16px}
.field{display:grid;gap:4px;min-width:0}
.field label{font:500 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.field select,.field input{font:inherit;padding:10px 11px;border:2px solid var(--line);border-radius:4px;background:var(--surface);color:var(--ink);min-width:0;width:100%}
.filters{display:flex;flex-wrap:wrap;gap:10px 14px;margin-top:12px;align-items:center}
.seg{display:inline-flex;border:2px solid var(--line);border-radius:4px;overflow:hidden;background:var(--surface)}
.seg button{border:0;background:transparent;padding:7px 13px;font-size:13px;font-weight:600;cursor:pointer}
.seg button+button{border-left:2px solid var(--line)}
.seg button[aria-pressed="true"]{background:var(--yellow);color:var(--on-yellow)}
.count{margin-left:auto;font:500 12px var(--mono);letter-spacing:.04em;color:var(--muted)}
.note{font-size:12px;color:var(--muted);margin:0}
.ratenote{margin:8px 0 0}

.mapcard{margin-top:16px;border:2px solid var(--line);border-radius:4px;overflow:hidden;background:var(--map-bg);box-shadow:5px 5px 0 var(--line)}
.maphead{display:flex;align-items:center;gap:12px;justify-content:space-between;padding:9px 12px;background:var(--surface);border-bottom:2px solid var(--line);flex-wrap:wrap}
.legend{display:flex;gap:14px;font-size:12px;font-weight:500;align-items:center;flex-wrap:wrap}
.legend i{display:inline-block;width:12px;height:12px;border-radius:50%;vertical-align:-1px;margin-right:5px}
.lg-conf{background:var(--blue)}
.lg-meet{border:3px solid var(--blue);background:var(--surface)}
.lg-cafe{background:#D98A1E}
.btn{border:2px solid var(--line);background:var(--surface);border-radius:4px;padding:7px 12px;font-size:13px;font-weight:600;cursor:pointer;text-decoration:none;color:var(--ink);display:inline-flex;align-items:center;gap:6px}
.btn:hover{background:var(--soft)}
.btn.primary{background:var(--yellow);color:var(--on-yellow)}
.gmap{width:100%;height:360px;background:var(--map-bg)}
@media (min-width:700px){.gmap{height:440px}}
.mapmsg{padding:28px 16px;color:var(--muted);font-size:14px}
.mapfs{position:fixed;inset:0;z-index:1000;margin:0;border-radius:0;border:0;box-shadow:none;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top,0px)}
.mapfs .gmap{flex:1;height:auto}
.leaflet-container{font-family:var(--body)}

/* Timeline: a thick rail, a square date block per day, a boxed ticket per event */
.tl{position:relative;margin-top:30px}
.tl::before{content:"";position:absolute;left:15px;top:0;bottom:0;width:4px;background:var(--blue)}
.day{position:relative;padding-left:48px;margin-top:30px}
.day:first-child{margin-top:0}
.datebar{display:flex;align-items:center;gap:12px;margin:0 0 12px -48px}
.dnum{width:34px;height:34px;display:grid;place-items:center;background:var(--blue);color:var(--on-blue);font:900 20px var(--display);font-stretch:75%;flex:none}
.dmeta{font:800 22px/1 var(--display);font-stretch:75%;letter-spacing:.02em;text-transform:uppercase}
.drel{margin-left:auto;font:500 12px var(--mono);color:var(--muted);letter-spacing:.04em;text-transform:uppercase}
.stop{position:relative;margin-bottom:14px;min-width:0}
.dot{position:absolute;left:-40px;top:22px;width:18px;height:18px;border-radius:50%;border:4px solid var(--blue);background:var(--bg)}
.dot.conf{background:var(--blue);box-shadow:0 0 0 3px var(--bg)}
.stop.sel .dot{background:var(--yellow);border-color:var(--ink);box-shadow:0 0 0 3px var(--bg)}
.stop.past{opacity:.5}
.card{background:var(--surface);border:2px solid var(--line);border-radius:4px;min-width:0;box-shadow:4px 4px 0 var(--line)}
.stop.sel .card{box-shadow:4px 4px 0 var(--yellow);border-color:var(--ink)}
.head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:6px 16px;width:100%;text-align:left;background:transparent;border:0;padding:14px;cursor:pointer;align-items:start}
.tcol{display:flex;flex-direction:column;min-width:68px;padding-right:14px;border-right:2px dashed var(--line)}
.tm{font:500 24px/1.1 var(--mono);letter-spacing:-.02em}
.tz{font:500 11px var(--mono);color:var(--muted);letter-spacing:.06em;margin-top:2px}
.where{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;font-size:13px;color:var(--muted)}
.code{font:800 12px var(--display);letter-spacing:.1em;background:var(--ink);color:var(--bg);padding:2px 7px}
.kind{font:500 11px var(--mono);letter-spacing:.07em;text-transform:uppercase;color:var(--blue)}
.title{font:800 22px/1.15 var(--display);font-stretch:90%;letter-spacing:-.015em;margin:6px 0 4px;overflow-wrap:anywhere}
.when{font:500 12px var(--mono);color:var(--muted)}
.side{display:flex;flex-direction:column;align-items:flex-end;gap:10px;justify-content:space-between}
.price{font:500 13px var(--mono);padding:4px 9px;white-space:nowrap;border:2px solid var(--line)}
.price.paid{background:var(--yellow);color:var(--on-yellow);border-color:var(--on-yellow)}
.price.free{background:transparent;color:var(--free);border-color:var(--free)}
.chev{width:18px;height:18px;transition:transform .15s}
[aria-expanded="true"] .chev{transform:rotate(180deg)}
.body{padding:2px 14px 16px;border-top:2px dashed var(--line);display:grid;gap:14px}
.body p{margin:12px 0 0;max-width:62ch}
.meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px 16px;margin:0}
.meta dt{font:500 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.meta dd{margin:2px 0 0;overflow-wrap:anywhere;font-weight:500}
.actions{display:flex;flex-wrap:wrap;gap:8px}
.cafes h4{margin:0 0 6px;font:800 16px var(--display);font-stretch:90%}
.cafes ul{list-style:none;margin:0;padding:0;border:2px solid var(--line)}
.cafes li{display:flex;justify-content:space-between;gap:12px;padding:8px 10px;font-size:14px}
.cafes li+li{border-top:1px solid var(--line)}
.cafes li span:last-child{font:500 12px var(--mono);color:var(--muted);white-space:nowrap}
.cafes li a{color:inherit;text-decoration:none}
.cafes li a:hover{text-decoration:underline}
.empty{padding:28px 0;color:var(--muted)}
@media (max-width:520px){
  .head{grid-template-columns:minmax(0,1fr) auto}
  .tcol{grid-column:1/-1;flex-direction:row;align-items:baseline;gap:10px;border-right:0;padding-right:0;min-width:0}
  .count{margin-left:0;width:100%}
  .hero::after{width:150px;height:150px;border-width:16px;right:-50px;top:-50px}
}
@media (prefers-reduced-motion:reduce){.chev{transition:none}}
.lg-sel{background:var(--yellow);border:2px solid var(--ink)}
.price.unk{background:transparent;color:var(--muted);border-color:var(--muted);border-style:dashed}
.btn:disabled{opacity:.6;cursor:default}
.filters .btn{margin-left:auto}
.filters .count{margin-left:0}
