/* Plan a Weekend - page chrome. All colours come from the theme tokens in themes.css (4 themes x light/dark,
   chosen in the header; generated by scripts/gen-themes.py). Event cards: ctw-card.css + ctw-theme.css. */
*{box-sizing:border-box}
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
body{margin:0;font:16px/1.5 Inter,system-ui,-apple-system,"Segoe UI",sans-serif;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;transition:background .2s,color .2s}
h1,h2,h3{color:var(--heading);line-height:1.2}
h1{font-size:clamp(1.7rem,3.4vw,2.3rem);margin:.4em 0 .5em}h2{font-size:1.35rem;margin:1.6em 0 .6em}
a{color:var(--heading)}
main{max-width:1312px;margin:0 auto;padding:16px}

/* Header */
.top{background:var(--surface);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:50}
.top-in{max-width:1312px;margin:0 auto;padding:10px 16px;display:flex;gap:12px 16px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.brand{display:block;line-height:0;border-radius:8px}.brand img{height:44px;width:auto;display:block}
.menu{display:flex;align-items:center;gap:16px;margin-left:auto;flex-wrap:wrap}
.top nav{display:flex;gap:4px;flex-wrap:wrap}
.menu-btn{display:none}
.top nav a{padding:8px 14px;border-radius:999px;color:var(--heading);font-weight:600;text-decoration:none;transition:background .15s,color .15s}
.top nav a:hover{background:var(--hl)}
.top nav a[aria-current="page"]{background:var(--primary);color:#fff}
/* Header dropdown (Map > Event Map, Venue Map): a <details>, so it works without JavaScript */
.nav-drop{position:relative}
.nav-drop summary{list-style:none;cursor:pointer;padding:8px 14px;border-radius:999px;color:var(--heading);font-weight:600;transition:background .15s,color .15s;white-space:nowrap}
.nav-drop summary::-webkit-details-marker{display:none}
.nav-drop summary::after{content:"";display:inline-block;margin-left:7px;width:6px;height:6px;border:solid currentColor;border-width:0 2px 2px 0;transform:translateY(-2px) rotate(45deg)}
.nav-drop[open] summary::after{transform:translateY(1px) rotate(225deg)}
.nav-drop summary:hover,.nav-drop[open] summary{background:var(--hl)}
.nav-drop summary.is-current{background:var(--primary);color:#fff}
.nav-drop summary:focus-visible{outline:2px solid var(--heading);outline-offset:2px}
.nav-drop-menu{position:absolute;z-index:60;top:calc(100% + 6px);left:0;min-width:170px;display:flex;flex-direction:column;gap:2px;padding:6px;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 10px 30px rgba(0,0,0,.18)}
.top .nav-drop-menu a{display:block;padding:9px 12px;border-radius:10px;font-size:.95rem;white-space:nowrap}
.top a:focus-visible{outline:2px solid var(--heading);outline-offset:2px}
/* Desktop header. The logo, the menu and the controls need about 1,390px side by side. On wide screens (1560px and up) they share
   one row inside a wider header; below that the logo and controls share the first row and the whole menu sits on the second,
   instead of every group wrapping onto its own line. Phones and tablets (860px and under) use the menu button instead. */
@media (min-width:861px){
  .menu{display:contents}
  .top-in{flex-wrap:wrap;gap:8px 12px}
  .brand{order:1}
  .prefs{order:2;margin-left:auto;flex:0 0 auto;gap:6px;white-space:nowrap}
  .prefs .acct-link{padding:8px 10px}
  .prefs .acct-btn{padding:6px 14px}
  .top nav{order:3;flex:1 1 100%;flex-wrap:nowrap;justify-content:flex-start;gap:2px}
  .top nav a{padding:8px 9px;font-size:.95rem;white-space:nowrap}
}
@media (min-width:1560px){
  .top-in{max-width:1560px;flex-wrap:nowrap;gap:8px 20px}
  .top nav{order:2;flex:1 1 auto;min-width:0;justify-content:center}
  .prefs{order:3;margin-left:0}
}

/* Skip link */
.skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--primary);color:#fff;padding:10px 16px;border-radius:0 0 10px 0;font-weight:700;text-decoration:none}
.skip:focus{left:0}

/* Theme + light/dark controls */
.prefs{display:flex;gap:8px;align-items:center}
.prefs select,.mode-btn{font:inherit;font-size:14px;min-height:38px;border:1px solid var(--line-2);background:var(--surface);color:var(--heading);border-radius:999px;cursor:pointer}
.prefs select{padding:6px 12px;font-weight:600}
.mode-btn{width:38px;padding:0;display:inline-flex;align-items:center;justify-content:center}
form.filters[aria-busy="true"]{opacity:.6;transition:opacity .15s}
.prefs select:hover,.mode-btn:hover{border-color:var(--hl-edge);background:var(--hl)}
.prefs :is(select,button):focus-visible{outline:2px solid var(--heading);outline-offset:2px}
.mode-btn svg{width:18px;height:18px}
html[data-mode="light"] .mode-btn .i-sun,html:not([data-mode]) .mode-btn .i-sun{display:none}
html[data-mode="dark"] .mode-btn .i-moon{display:none}

/* Hero + search */
.hero{padding:28px 0 8px}.hero h1{margin:0 0 .2em}.hero p{margin:0 0 14px;color:var(--muted)}
.search{display:flex;gap:8px;max-width:560px;margin:0 0 14px}.search input{flex:1;min-width:0}

/* Form controls: filter bar, search */
.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:14px 0;padding:12px;background:var(--surface);border:1px solid var(--line);border-radius:16px}
.filters :is(input,select,button),.search :is(input,button){font:inherit;font-size:15px}
.filters :is(input,select),.search input{padding:9px 14px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading);min-height:42px}
.filters :is(input,select):hover,.search input:hover{border-color:var(--hl-edge)}
.filters :is(input,select,button):focus-visible,.search :is(input,button):focus-visible{outline:2px solid var(--heading);outline-offset:2px}
.filters input::placeholder,.search input::placeholder{color:var(--muted);opacity:.8}
.filters input[name=q]{flex:1 1 180px}
.filters input[name=postcode]{width:10.5em;flex:0 1 10.5em}.filters button.ghost{background:transparent;color:var(--heading);border:1px solid var(--line-2)}.filters button.ghost:hover{background:var(--surface-2,var(--surface));border-color:var(--hl-edge)}.home-search input[name=q]{flex:2 1 220px}

/* Buttons: same colour as the card Tickets button */
.cta,.filters button,.search button{background:var(--accent);color:#fff;border:0;border-radius:999px;padding:10px 22px;min-height:42px;font-weight:700;text-decoration:none;cursor:pointer;display:inline-block;transition:background .15s}
.cta:hover,.filters button:hover,.search button:hover{background:var(--accent-dark)}

/* Pills */
.chips a{display:inline-block;padding:7px 14px;margin:0 8px 8px 0;border:1px solid var(--line-2);border-radius:999px;text-decoration:none;background:var(--surface);color:var(--heading);font-weight:600;font-size:.92rem;transition:background .15s,border-color .15s}
.chips a:hover{background:var(--hl);border-color:var(--hl-edge)}
.pager{display:flex;gap:10px;margin:22px 0}.pager a{padding:9px 18px;border-radius:999px;border:1px solid var(--line-2);background:var(--surface);text-decoration:none;font-weight:600}.pager a:hover{background:var(--hl);border-color:var(--hl-edge)}

/* City / category tiles */
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}
.tile{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden;text-decoration:none;color:inherit;display:block;box-shadow:0 2px 12px rgba(0,0,0,.06);transition:border-color .15s,transform .15s}
.tile:hover{border-color:var(--hl-edge);transform:translateY(-2px)}
.tile .body{padding:14px}.tile h3{margin:0 0 6px;font-size:1.05rem}
.tile .meta,.event .meta{color:var(--muted);font-size:.92rem;margin:0}.price{font-weight:700;color:var(--heading)}

/* Event page */
.hero p.hero-stats{font-size:1.15rem;color:inherit}.hero-stats a{color:inherit;text-decoration:none}.hero-stats a:hover,.hero-stats a:focus-visible{text-decoration:underline}.hero-stats strong{color:var(--accent,inherit)}
.hero-img{max-width:100%;border-radius:14px}
.credit{color:var(--muted);font-size:.85rem}
footer{border-top:1px solid var(--line);background:var(--surface);margin-top:32px}
.foot-in{max-width:1312px;margin:0 auto;padding:18px 16px;color:var(--muted);font-size:.85rem}.foot-in p{margin:0}

/* Mobile menu */
@media (max-width:860px){
  .menu-btn{display:inline-flex;align-items:center;gap:8px;margin-left:auto;min-height:42px;padding:0 14px;border:1px solid var(--line-2);background:var(--surface);color:var(--heading);border-radius:999px;font:inherit;font-weight:600;cursor:pointer}
  .menu-btn svg{width:20px;height:20px}
  .menu-btn:hover{background:var(--hl);border-color:var(--hl-edge)}
  .menu-btn:focus-visible{outline:2px solid var(--heading);outline-offset:2px}
  html:not(.js) .menu-btn{display:none}
  html:not(.js) .menu{flex-basis:100%;margin-left:0}
  html.js .menu{display:none;position:absolute;left:0;right:0;top:100%;margin:0;background:var(--surface);border-bottom:1px solid var(--line);padding:12px 16px 16px;flex-direction:column;align-items:stretch;gap:12px;box-shadow:0 12px 24px rgba(0,0,0,.12)}
  html.js .menu[data-open]{display:flex}
  .top nav{flex-direction:column}
  .nav-drop-menu{position:static;box-shadow:none;border:0;background:transparent;padding:0 0 0 14px}
  .nav-drop summary{padding:12px 14px}
  .top nav a{padding:13px 14px;border-radius:12px}
  .prefs{justify-content:space-between;padding-top:8px;border-top:1px solid var(--line)}
  .prefs select{flex:1;max-width:220px}
}

/* Footer navigation */
.foot-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:24px;margin-bottom:20px}
.foot-cols h2{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 10px}
.foot-cols ul{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.foot-cols a{color:var(--heading);text-decoration:none;font-size:.95rem}.foot-cols a:hover{text-decoration:underline}
.foot-note{border-top:1px solid var(--line);padding-top:14px!important}

/* Listing: quick dates, active filters, results, empty state */
.quick-dates{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 2px}
.quick-dates a{display:inline-block;padding:8px 16px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading);font-weight:600;text-decoration:none;transition:background .15s,border-color .15s}
.quick-dates a:hover{background:var(--hl);border-color:var(--hl-edge)}
.quick-dates a[aria-current="true"]{background:var(--primary);border-color:var(--primary);color:#fff}
.active-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:10px 0}
.fchip{display:inline-flex;align-items:center;gap:8px;padding:5px 6px 5px 12px;border-radius:999px;background:var(--hl);border:1px solid var(--hl-edge);color:var(--heading);font-size:.9rem}
.fchip b{font-weight:700}
.fchip a{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--surface);color:var(--heading);text-decoration:none;font-weight:700;line-height:1}
.fchip a:hover{background:var(--accent);color:#fff}
.clear-all{font-size:.9rem;font-weight:600}
.results-bar{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;margin:6px 0 14px;color:var(--muted)}
.results-bar strong{color:var(--heading)}
.empty{background:var(--surface);border:1px dashed var(--line-2);border-radius:16px;padding:28px 20px;text-align:center}
.empty h2{margin:0 0 6px}.empty p{margin:0 0 12px;color:var(--muted)}
.empty ul{list-style:none;margin:0 auto;padding:0;display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.empty li a{display:inline-block;padding:8px 16px;border-radius:999px;border:1px solid var(--line-2);text-decoration:none;font-weight:600;background:var(--bg)}
.empty li a:hover{background:var(--hl);border-color:var(--hl-edge)}
.filters label.f{display:flex;flex-direction:column;gap:2px;font-size:.75rem;color:var(--muted);font-weight:600}

/* Event page */
.crumbs{font-size:.88rem;color:var(--muted);margin:4px 0 14px}
.crumbs ol{list-style:none;display:flex;flex-wrap:wrap;gap:6px;padding:0;margin:0}
.crumbs li+li::before{content:"\203A";margin-right:6px;color:var(--line-2)}
.crumbs a{color:var(--muted)}.crumbs [aria-current]{color:var(--heading);font-weight:600}
.ev{display:grid;grid-template-columns:minmax(0,420px) minmax(0,1fr);gap:32px;align-items:start}
.ev-media{position:relative;border-radius:18px;overflow:hidden;aspect-ratio:4/5;background:var(--hl);border:1px solid var(--line);box-shadow:0 6px 24px rgba(0,0,0,.1)}
.ev-media .bg{position:absolute;inset:-10%;width:120%;height:120%;object-fit:cover;filter:blur(24px) saturate(1.2);opacity:.85}
.ev-media .poster{position:relative;z-index:1;width:100%;height:100%;object-fit:contain;display:block}
.ev-media .ph{display:grid;place-items:center;height:100%;font-weight:800;color:var(--heading);padding:24px;text-align:center}
.ev-media .ph-poster{align-content:center;gap:14px;background:linear-gradient(160deg,var(--hl),var(--surface) 70%);border:1px solid var(--line-2);border-radius:18px;box-sizing:border-box}
.ph-poster .ph-icon{font-size:clamp(72px,20vw,120px);line-height:1}
.ph-poster .ph-title{font-size:clamp(1.5rem,4.5vw,2.1rem);line-height:1.2;max-width:14em}
.ph-poster .ph-cat{font-size:.8rem;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--ink)}
/* Tinted poster (profile category sets poster colours): gradient, white type and an inset frame, like the sample flyer. */
.ev-media .ph-poster-tinted{position:relative;background:radial-gradient(circle at 50% 38%,rgba(255,255,255,.35),rgba(255,255,255,0) 60%),linear-gradient(135deg,var(--from),var(--to));border-color:transparent;color:#fff;gap:18px}
.ph-poster-tinted::before{content:"";position:absolute;inset:16px;border:2px solid rgba(255,255,255,.55);border-radius:10px;pointer-events:none}
.ph-poster-tinted .ph-title{font-size:clamp(1.6rem,5vw,2.4rem);text-transform:uppercase;letter-spacing:.02em;font-weight:900;color:#fff}
.ph-poster-tinted .ph-cat{color:rgba(255,255,255,.92);letter-spacing:.22em;font-size:.85rem}
[hidden]{display:none!important}
/* Header account links (Log in, Register, My account). */
.acct-link{padding:8px 12px;border:0;border-radius:999px;background:transparent;cursor:pointer;font:inherit;font-weight:600;color:var(--heading);text-decoration:none;white-space:nowrap}
.acct-link:hover{background:var(--hl)}
.acct-form{margin:0}
.acct-btn{border:1.5px solid var(--primary);color:var(--primary)}
.acct-btn:hover{background:var(--hl)}
.acct-btn-fill{background:var(--primary);color:#fff}
.acct-btn-fill:hover{background:var(--primary);filter:brightness(.92)}
.pop{margin:auto;max-width:min(420px,calc(100vw - 32px));padding:20px 22px;border:1px solid var(--line);border-radius:16px;background:var(--surface);color:var(--ink);box-shadow:0 12px 40px rgba(0,0,0,.25);white-space:normal;overflow-wrap:anywhere}
.pop::backdrop{background:rgba(0,0,0,.4)}
.pop h2{margin:0 0 8px;font-size:1.15rem;color:var(--heading)}
.pop p{margin:0 0 14px}
.account-form{display:grid;gap:14px;max-width:420px}
.account-form label{display:grid;gap:6px;font-weight:600}
.account-form input{font:inherit;padding:10px 12px;border:1px solid var(--line-2);border-radius:10px;background:var(--surface);color:var(--ink)}
.ev-datetile{position:absolute;z-index:2;left:14px;bottom:14px;background:var(--primary);color:#fff;border:1px solid rgba(255,255,255,.25);border-radius:12px;padding:8px 14px;display:flex;gap:8px;align-items:baseline;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.ev-datetile .d{font-size:1.7rem;font-weight:800;line-height:1}
.ev-main h1{margin-top:0}
.ev-facts{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:4px 18px;margin:16px 0}
.ev-facts div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.ev-facts div:last-child{border-bottom:0}
.ev-facts dt{color:var(--muted);font-weight:600}.ev-facts dd{margin:0;color:var(--ink)}
.ev-facts a{color:var(--heading)}
.ev-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:18px 0}
.cta-lg{padding:14px 30px;font-size:1.05rem}
.ev-btn{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading);font:inherit;font-weight:600;text-decoration:none;cursor:pointer}
.ev-btn:hover{background:var(--hl);border-color:var(--hl-edge)}
.ev-btn:focus-visible,.cta:focus-visible{outline:2px solid var(--heading);outline-offset:2px}
.ev-btn.fav-btn-active{background:var(--accent);border-color:var(--accent);color:#fff}
.ev-btn svg{width:18px;height:18px}
.ev-desc{white-space:pre-line;line-height:1.7;max-width:70ch}
.ev-related,.ev-nearby,.ev-venue-next{margin-top:36px}
.ev-sticky{display:none}
@media (max-width:860px){
  .ev{grid-template-columns:1fr;gap:18px}
  .ev-media{aspect-ratio:16/11;max-height:340px}
  .ev-facts div{grid-template-columns:84px minmax(0,1fr)}
  body:has(.ev-sticky) main{padding-bottom:96px}
  .ev-sticky{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;background:var(--surface);border-top:1px solid var(--line);padding:10px 16px;gap:12px;align-items:center;justify-content:space-between;box-shadow:0 -6px 18px rgba(0,0,0,.1)}
  .ev-sticky .p{font-weight:700;color:var(--heading)}
  .ev-sticky .cta{flex:0 0 auto}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}

.notice{background:var(--hl);border:1px solid var(--hl-edge);border-radius:12px;padding:10px 14px;margin:0 0 14px;color:var(--heading)}
.notice a{color:var(--heading)}
.notice-warn{background:var(--surface);border-color:var(--accent)}

/* Venue cards and pages: landscape photos fill the panel instead of letterboxing like portrait flyers */
.venue-cards .card-thumb{object-fit:cover;width:100%}
.ev-media-photo{aspect-ratio:4/3}
.ev-media-photo .poster{object-fit:cover}
.pill-static{display:inline-block;padding:7px 14px;margin:0 8px 8px 0;border:1px solid var(--line-2);border-radius:999px;background:var(--hl);color:var(--heading);font-weight:600;font-size:.92rem}
.ev-facts dd.chips{margin:0}.ev-facts dd.chips a{margin-bottom:4px}
.filters select{max-width:100%;min-width:0}
@media (max-width:560px){.filters select{flex:1 1 100%}}

/* Admin */
.admin-card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:18px 20px;margin:14px 0;max-width:720px}
.admin-card h2{margin-top:0}
.admin-card input[type=password]{width:100%;max-width:340px;padding:10px 14px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading);font:inherit}
.admin-card button,.admin-row button{background:var(--accent);color:#fff;border:0;border-radius:999px;padding:10px 22px;min-height:42px;font:inherit;font-weight:700;cursor:pointer}
.admin-card button:hover,.admin-row button:hover{background:var(--accent-dark)}
.admin-row{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 0;border-top:1px solid var(--line);max-width:720px}
.pill-on,.pill-off{display:inline-block;padding:2px 10px;border-radius:999px;font-weight:800;font-size:.85rem}
.pill-on{background:var(--hl);border:1px solid var(--hl-edge);color:var(--heading)}
.pill-off{background:var(--surface);border:1px solid var(--line-2);color:var(--muted)}
.muted{color:var(--muted)}
.admin-card label.f{display:block;font-weight:600;margin-bottom:6px;color:var(--muted)}
.admin-card form,.admin-card p{margin-top:0}

/* Made-up sample data (is_dummy): clearly labelled until it is removed (docs/dummy-data.md) */
.ctwUi .card{position:relative}
.dummy-flag{position:absolute;top:10px;left:10px;z-index:4;background:#111;color:#ffd24a;border:1px dashed #ffd24a;border-radius:6px;padding:2px 8px;font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}

/* Venue cards without a photo: a themed panel with an icon (the photo-style fallback text is white and unreadable on light themes) */
.venue-cards .card-media:not(:has(.card-thumb)){height:96px;background:linear-gradient(135deg,var(--primary),var(--accent));display:grid;place-items:center}
.venue-cards .card-media:not(:has(.card-thumb)) .card-media-fallback{display:none}
.card-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.cat-hero{display:block;width:min(100%,520px);aspect-ratio:16/9;object-fit:cover;border-radius:16px;margin:10px 0 14px}
.venue-ph{font-size:2.4rem;line-height:1;filter:drop-shadow(0 2px 4px rgba(0,0,0,.25))}
.ev-media-photo .ph{font-size:1.6rem}
.ev-media-photo:has(.ph){aspect-ratio:16/7;max-height:200px}

.quick-dates .n{display:inline-block;margin-left:4px;padding:0 7px;border-radius:999px;background:var(--hl);color:var(--heading);font-size:.78rem;font-weight:700}
.quick-dates a[aria-current="true"] .n{background:rgba(255,255,255,.22);color:#fff}

/* Nav: My Favourites count badge (updated by /assets/favs.js) */
.top nav .fav-count{display:inline-block;min-width:20px;padding:0 7px;margin-left:2px;border-radius:999px;background:var(--accent);color:#fff;font-size:.78rem;font-weight:800;text-align:center;line-height:20px}
.top nav .fav-count[hidden]{display:none}
.top nav a[aria-current="page"] .fav-count{background:#fff;color:var(--primary)}

/* Cookie banner (roadmap U14): shown until the visitor answers, hidden by the head script once they have. */
html[data-consent] .consent { display: none; }
.consent { position: fixed; left: 0; right: 0; bottom: 0; z-index: 60; display: flex; flex-wrap: wrap; gap: .75rem 1rem; align-items: center; justify-content: center; padding: .55rem 1rem; background: var(--ctw-surface, #fff); color: var(--ctw-text, #14313a); border-top: 1px solid var(--ctw-line, #dfe3e6); box-shadow: 0 -2px 14px rgba(0,0,0,.12); }
.consent p { max-width: 62ch; margin: 0; font-size: .85rem; line-height: 1.35; }
.consent-actions { display: flex; gap: .5rem; }
.consent button { min-width: 6.5rem; padding: .4rem .9rem; font: inherit; font-weight: 600; border-radius: 999px; border: 2px solid var(--ctw-accent, #cf4a22); background: transparent; color: inherit; cursor: pointer; }
.consent button[data-consent-choice="granted"] { background: var(--ctw-accent, #cf4a22); color: #fff; }
.consent button:focus-visible { outline: 3px solid var(--ctw-accent, #cf4a22); outline-offset: 2px; }
button.linkish { padding: 0; border: 0; background: none; color: inherit; font: inherit; text-decoration: underline; cursor: pointer; }
@media (max-width: 34rem) { .consent { gap: .4rem; padding: .5rem .75rem; } .consent p { font-size: .8rem; } .consent-actions { width: 100%; } .consent button { flex: 1; min-width: 0; } }

/* Admin navigation */
.admin-nav{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0 6px;max-width:960px}
.admin-nav a{display:inline-block;padding:7px 16px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading);text-decoration:none;font-weight:600;font-size:.92rem}
.admin-nav a:hover{border-color:var(--accent)}
.admin-nav a[aria-current="page"]{background:var(--accent);border-color:var(--accent);color:#fff}

/* Who's online */
.online-wide{max-width:960px}
.online-panel h2{margin-top:0}
.online-stats{display:flex;gap:12px;flex-wrap:wrap;list-style:none;padding:0;margin:18px 0 8px;max-width:960px}
.online-stat{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:12px 18px;min-width:132px}
.online-stat-quiet{background:transparent}
.online-stat-num{display:block;font-size:1.75rem;font-weight:800;line-height:1.1;color:var(--heading)}
.online-stat-label{display:block;margin-top:2px;color:var(--muted);font-size:.86rem}
.online-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 18px;max-width:960px}
@media (max-width:720px){.online-grid{grid-template-columns:1fr}}
.online-country-list{display:flex;gap:8px;flex-wrap:wrap;list-style:none;padding:0;margin:0 0 10px}
.online-country{display:inline-flex;align-items:center;gap:7px;padding:5px 12px;border:1px solid var(--line-2);border-radius:999px;background:var(--hl);color:var(--heading);font-size:.9rem}
.online-country-count{font-weight:800}
.online-flag{font-size:1.05em;line-height:1}
.online-members{list-style:none;padding:0;margin:0}
.online-member{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:9px 0;border-top:1px solid var(--line)}
.online-member:first-child{border-top:0}
.online-member.is-idle{opacity:.55}
.online-avatar{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:var(--accent);color:#fff;font-weight:800;font-size:.85rem;flex:none}
.online-member-name{font-weight:600;color:var(--heading);overflow-wrap:anywhere}
.online-member-where{margin-left:auto;color:var(--muted);font-size:.9rem}
.online-member-where a{color:inherit}
.online-member-ago{color:var(--muted);font-size:.82rem;min-width:70px;text-align:right}
.online-tally{list-style:none;padding:0;margin:0}
.online-tally-row{display:grid;grid-template-columns:1fr auto 90px;align-items:center;gap:10px;padding:7px 0;border-top:1px solid var(--line)}
.online-tally-row:first-child{border-top:0}
.online-tally-label{overflow-wrap:anywhere}
.online-tally-count{font-weight:700;color:var(--heading)}
.online-tally-bar{display:block;height:7px;border-radius:999px;background:var(--hl);overflow:hidden}
.online-tally-fill{display:block;height:100%;border-radius:999px;background:var(--accent)}
.online-range-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 10px}
.online-range-tabs a{padding:5px 13px;border:1px solid var(--line-2);border-radius:999px;color:var(--heading);text-decoration:none;font-size:.86rem;font-weight:600}
.online-range-tabs a[aria-current="page"]{background:var(--accent);border-color:var(--accent);color:#fff}
.online-chart{display:block;width:100%;height:auto;margin:4px 0 6px}
.online-chart text{fill:var(--muted);font-size:11px}
.online-grid-line{stroke:var(--line);stroke-width:1}
.online-line{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.online-line-dashed{stroke-dasharray:5 4}
.online-legend{display:flex;gap:12px;flex-wrap:wrap;list-style:none;padding:0;margin:0 0 6px;font-size:.84rem;color:var(--muted)}
.online-legend li{display:inline-flex;align-items:center;gap:6px}
.online-legend-dot{width:10px;height:10px;border-radius:3px;display:inline-block}
.online-busy-scroll{overflow-x:auto;padding-bottom:4px}
.online-busy{border-collapse:separate;border-spacing:3px;font-size:.68rem;color:var(--muted)}
.online-busy th{font-weight:600;text-align:center;min-width:22px}
.online-busy tbody th{text-align:right;padding-right:4px;color:var(--heading)}
.online-heat{display:block;width:20px;height:16px;border-radius:3px;border:1px solid var(--line)}
.online-foot{margin-top:18px}
.near-note{margin:6px 0 12px;color:var(--muted);font-size:.92rem}
/* Home planner: who, when, where, budget, then the next seven days. Controls match the site's rounded filters. */
.planner{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:18px 18px 16px;margin:10px 0 22px;box-shadow:0 6px 22px rgba(15,60,120,.07)}
.planner h2{margin:0 0 12px;font-size:1.35rem}
.planner-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px 12px;align-items:end}
.pl-field{display:grid;gap:5px;min-width:0}
.pl-field>span{font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding-left:14px}
.planner :is(input,select){box-sizing:border-box;font:inherit;font-size:15px;width:100%;min-width:0;height:44px;padding:9px 14px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading)}
.planner select{appearance:none;-webkit-appearance:none;padding-right:34px;background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);background-position:calc(100% - 19px) 52%,calc(100% - 14px) 52%;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
.planner :is(input,select):hover{border-color:var(--hl-edge)}
.planner :is(input,select,button):focus-visible{outline:2px solid var(--heading);outline-offset:2px}
.planner input::placeholder{color:var(--muted);opacity:.8}
.pl-go{font:inherit;font-size:16px;font-weight:700;min-height:44px;padding:10px 24px;border:0;border-radius:999px;background:var(--accent);color:#fff;cursor:pointer;transition:background .15s}
.pl-go:hover{background:var(--accent-dark)}
.pl-go{grid-column:1/-1}
@media(min-width:1000px){.planner-form{grid-template-columns:repeat(6,minmax(0,1fr)) auto}.pl-go{grid-column:auto}}
.day-label{margin:20px 0 8px;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.day-strip{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
.day-strip .day{display:grid;justify-items:center;gap:1px;padding:9px 2px 8px;border:1px solid var(--line-2);border-radius:14px;background:var(--surface);color:var(--heading);text-decoration:none;line-height:1.2;transition:background .15s,border-color .15s}
.day-strip .day:hover,.day-strip .day:focus-visible{background:var(--hl);border-color:var(--hl-edge)}
.day-strip .day-hot{background:var(--hl);border-color:var(--hl-edge)}
.day-strip .day-dow{font-size:.78rem;font-weight:600;color:var(--muted)}
.day-strip b{font-size:1.2rem}
.day-strip i{font-style:normal;font-size:.72rem;color:var(--accent-dark);font-weight:700}
@media(max-width:560px){.planner{padding:14px}.day-strip{gap:5px}.day-strip .day{border-radius:10px}.day-strip i{font-size:.65rem}}
.search-h{font-size:1.05rem;margin:6px 0}
.row-h{font-size:1.05rem;margin:14px 0 6px}
.chips a[hidden]{display:none}
/* What's on chip rails and the "More filters" drawer. */
.rails{display:grid;gap:6px;margin:10px 0 6px}
.rail{display:flex;align-items:center;gap:10px;min-width:0}
.rail-label{flex:0 0 3.2rem;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.rail .quick-dates{margin:0;min-width:0}
.rail .quick-dates a{padding:6px 14px;font-size:.92rem}
@media(max-width:640px){.rail{display:block}.rail-label{display:block;margin:0 0 4px}.rail .quick-dates{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}.rail .quick-dates a{white-space:nowrap}}
.rails-fold{display:grid;gap:6px}
.rails-fold>summary{display:none}
@media(max-width:640px){
  .rails-fold>summary{display:inline-flex;align-items:center;gap:8px;cursor:pointer;list-style:none;min-height:40px;padding:6px 16px;border:1px solid var(--line-2);border-radius:999px;font-weight:700;color:var(--heading);background:var(--surface);justify-self:start}
  .rails-fold>summary::-webkit-details-marker{display:none}
  .rails-fold>summary::after{content:"";width:6px;height:6px;border:solid currentColor;border-width:0 2px 2px 0;transform:translateY(-2px) rotate(45deg)}
  .rails-fold[open]>summary::after{transform:translateY(1px) rotate(225deg)}
  .rails-fold>summary .n{padding:0 7px;border-radius:999px;background:var(--accent);color:#fff;font-size:.78rem}
  .rails-fold[open]>summary{margin-bottom:4px}
  .rail .quick-dates a{min-height:40px;display:inline-flex;align-items:center}
}
.more-filters{margin:8px 0}
.more-filters>summary{display:inline-flex;align-items:center;gap:8px;cursor:pointer;list-style:none;padding:7px 16px;border:1px dashed var(--line-2);border-radius:999px;font-weight:700;color:var(--heading);background:transparent}
.more-filters>summary::-webkit-details-marker{display:none}
.more-filters>summary::after{content:"";width:6px;height:6px;border:solid currentColor;border-width:0 2px 2px 0;transform:translateY(-2px) rotate(45deg)}
.more-filters[open]>summary::after{transform:translateY(1px) rotate(225deg)}
.more-filters>summary:hover{background:var(--hl);border-color:var(--hl-edge)}
.more-filters>summary:focus-visible{outline:2px solid var(--heading);outline-offset:2px}
.more-filters>summary .n{display:inline-block;padding:0 7px;border-radius:999px;background:var(--accent);color:#fff;font-size:.78rem}
/* Plans: the "Add to plan" popover and the My plans page. */
.plan-btn-on{border-color:var(--accent)}
.plan-pop{position:absolute;z-index:2000;background:var(--surface);color:var(--heading);border:1px solid var(--line-2);border-radius:14px;box-shadow:0 10px 30px rgba(0,0,0,.22);padding:12px 14px;display:grid;gap:8px}
.plan-pop-h{margin:0;font-weight:700}
.plan-pop-list{list-style:none;margin:0;padding:0;display:grid;gap:4px;max-height:200px;overflow:auto}
.plan-pop-list label{display:flex;gap:6px;align-items:center;cursor:pointer}
.plan-pop-new{display:grid;grid-template-columns:1fr auto;gap:6px}
.plan-pop-new input[type=text]{grid-column:1/-1}
.plan-pop :is(input[type=text],input[type=date]){font:inherit;font-size:14px;padding:7px 12px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading);min-width:0}
.plan-pop-new button{font:inherit;font-size:14px;font-weight:700;border:0;border-radius:999px;padding:7px 14px;background:var(--accent);color:#fff;cursor:pointer}
.plan-pop-link{font-size:.92rem}
.plan{margin:18px 0 28px;padding-top:4px;border-top:1px solid var(--line)}
.plan-head{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.plan-head :is(input){font:inherit;font-size:16px;padding:8px 14px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading);min-height:42px}
.plan-name{flex:1 1 220px;font-weight:700}
.plan-remove{margin-top:8px}
.plan-new{margin:14px 0}
/* Eat and drink nearby. */
.eat-nearby{margin-top:36px}
.eat-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:12px}
.eat-group{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:12px 14px}
.eat-group h3{margin:0 0 6px;font-size:1rem}
.eat-group ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.eat-group li{display:grid;gap:1px}
.eat-group a{font-weight:600}
.eat-meta{font-size:.85rem;color:var(--muted)}
.eat-credit{margin:8px 0 0;color:var(--muted)}
/* Browse by type tiles: an icon in a soft circle, the name, then a plain count (no brackets). */
.tile-type{display:flex;align-items:center;gap:12px;padding:12px 14px}
.tile-type .body{padding:0}
.tile-icon{flex:0 0 44px;width:44px;height:44px;border-radius:50%;background:var(--hl);display:grid;place-items:center;font-size:1.35rem;line-height:1}
.tile-type h3{margin:0 0 2px}
.tiles-ideas{grid-template-columns:repeat(2,1fr)}@media (min-width:760px){.tiles-ideas{grid-template-columns:repeat(3,1fr)}}
.tile-idea{padding:10px 14px;background:var(--hl);border-color:var(--hl-edge)}
.tile-idea .tile-icon{background:var(--surface)}
.sec-h{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0 0 12px}.sec-h h2{margin:0}.sec-h a{font-weight:600;white-space:nowrap}
.home-cities{margin-top:28px}.home-cities .chips{margin:0}
.hero .home-search{margin:6px 0 12px}
.tile-search{margin:0 0 16px}
.tile-search input{width:100%;max-width:420px;min-height:44px;padding:8px 16px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading);font:inherit}
.show-more{display:block;margin:22px auto}
.filters{position:relative}
.suggest{position:absolute;z-index:30;list-style:none;margin:2px 0 0;padding:4px;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.14);max-width:min(92vw,420px);min-width:240px}
.suggest li{display:flex;flex-direction:column;border-radius:8px}
.suggest li a{padding:8px 10px 0;text-decoration:none;font-weight:600;color:var(--heading)}
.suggest-sub{padding:0 10px 8px;font-size:.82rem;color:var(--muted)}
.suggest li[aria-selected=true],.suggest li:hover{background:var(--hl)}
/* Admin SEO page. */
.seo-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,160px),1fr));gap:12px;margin:14px 0}
.seo-tile{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:12px 14px}
.seo-tile small{display:block;font-size:.75rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.seo-tile b{display:block;font-size:1.6rem;font-variant-numeric:tabular-nums;color:var(--heading)}
.seo-up{color:var(--ok,#1f7a3a)}.seo-down{color:var(--bad,#a3272c)}
.seo-section{margin:28px 0}
.seo-filters{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}
.seo-filters input,.seo-filters select{font:inherit;font-size:.9rem;padding:6px 10px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--heading);max-width:100%}
.seo-filters input[type=number]{width:9.5em}
.seo-scroll{overflow-x:auto}
.seo-table{border-collapse:collapse;width:100%;font-size:.92rem;font-variant-numeric:tabular-nums}
.seo-table th,.seo-table td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:top}
.seo-table th{font-size:.75rem;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.seo-table th[data-sort]{cursor:pointer}.seo-table th[aria-sort=descending]::after{content:" \25BE"}.seo-table th[aria-sort=ascending]::after{content:" \25B4"}
.seo-table td.num,.seo-table th.num{text-align:right}
.seo-pill{display:inline-block;font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:3px 8px;border-radius:999px;background:var(--hl);color:var(--heading);white-space:nowrap}
.seo-pill.good{background:#e3f3e7;color:#1f7a3a}.seo-pill.warn{background:#fbf0d9;color:#8a5a00}.seo-pill.bad{background:#f9e3e3;color:#a3272c}
.seo-spark{width:70px;height:18px;vertical-align:middle}.seo-spark path{stroke:var(--accent);fill:none;stroke-width:1.5}.seo-spark circle{fill:var(--accent)}
.seo-stale{background:#fbf0d9;color:#8a5a00;padding:10px 14px;border-radius:12px;margin:12px 0}
