:root{
/* Layout + category mapping. Colours/fonts come from css/themes/<name>.css */
--r:14px;
--halloween:var(--accent);--halloween-t:var(--accent-text);
--outdoor:var(--c3);--outdoor-t:var(--c3-text);
--workshop:var(--primary);--workshop-t:var(--primary-strong);
--show:var(--c2);--show-t:var(--c2-text);
--play:var(--primary-strong);--play-t:var(--primary-strong);
--sport:var(--label);--sport-t:var(--label);
--c:var(--primary);--ct:var(--primary-strong);
--field:var(--card);--display-weight:400;
--card-shadow:0 6px 18px rgba(0,0,0,.06);
--example-bg:#FFE9A8;--example-text:#6B4F00;
}
*{box-sizing:border-box}html,body{margin:0}
body{font-family:var(--sans);background:var(--bg);color:var(--ink);line-height:1.4;padding-bottom:90px}
a{color:inherit}
.top{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;padding:12px max(16px,calc((100vw - 1100px)/2 + 16px));background:var(--header-bg);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.logo{font-family:var(--display);font-weight:var(--display-weight);font-size:1.5rem;text-decoration:none;letter-spacing:0;color:var(--ink)}
.lang{display:flex;background:var(--field);border:1px solid var(--line);border-radius:999px;padding:2px}
.lang button{border:0;background:none;padding:6px 10px;border-radius:999px;font-weight:700;font-size:.8rem;color:var(--mut);cursor:pointer}
.lang button.on{background:var(--ink);color:var(--on-primary)}
main{max-width:1100px;margin:0 auto;padding:0 16px}
.hero{padding:18px 0 8px}.hero p{margin:0 0 14px;font-family:var(--display);font-weight:var(--display-weight);font-size:1.6rem;line-height:1.15}
input,select,textarea{font:inherit;color:inherit}
#q{width:100%;padding:13px 16px;border:2px solid var(--line);border-radius:999px;background:var(--field);font-size:1rem;outline:none}
#q:focus{border-color:var(--primary)}
.filters .row{display:flex;gap:8px;padding:6px 0;align-items:center}
.scroll{overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding-left:16px!important;padding-right:16px!important}.scroll::-webkit-scrollbar{display:none}
.pill{flex:0 0 auto;border:1.5px solid var(--line);background:var(--field);padding:8px 14px;border-radius:999px;font-weight:700;font-size:.88rem;cursor:pointer;white-space:nowrap}
.pill.on{background:var(--primary-strong);border-color:var(--primary-strong);color:var(--on-primary)}
.pill.cat.on{background:var(--ink);border-color:var(--ink);color:var(--bg)}
#date{border:1.5px solid var(--line);border-radius:999px;padding:7px 12px;background:var(--field)}
.selects{flex-wrap:wrap}.selects select{flex:1 1 40%;padding:10px 12px;border:1.5px solid var(--line);border-radius:12px;background:var(--field);min-width:0}
.check{display:flex;align-items:center;gap:6px;font-weight:700;font-size:.9rem;white-space:nowrap}
.check input{width:20px;height:20px;accent-color:var(--primary-strong)}
.count{color:var(--mut);font-size:.85rem;font-weight:700;margin:10px 0 6px}
.list{display:grid;gap:12px;grid-template-columns:1fr}
@media(min-width:720px){.list{grid-template-columns:1fr 1fr}}
@media(min-width:1024px){.list{grid-template-columns:1fr 1fr 1fr}}
.card{display:flex;gap:12px;background:var(--card);border-radius:var(--r);padding:14px;text-decoration:none;box-shadow:0 1px 0 var(--line),var(--card-shadow);border-left:5px solid var(--c);transition:transform .15s}
.card:active{transform:scale(.98)}
.cat-halloween{--c:var(--halloween);--ct:var(--halloween-t)}.cat-outdoor{--c:var(--outdoor);--ct:var(--outdoor-t)}.cat-workshop{--c:var(--workshop);--ct:var(--workshop-t)}.cat-show{--c:var(--show);--ct:var(--show-t)}.cat-play{--c:var(--play);--ct:var(--play-t)}.cat-sport{--c:var(--sport);--ct:var(--sport-t)}
.date-chip{flex:0 0 54px;height:60px;border-radius:12px;background:var(--accent);color:var(--on-accent);display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:800}
.date-chip .d{font-size:1.5rem;line-height:1}.date-chip .m{font-size:.75rem;text-transform:uppercase}
.card-body{min-width:0;flex:1}
.card h3{margin:4px 0 4px;font-family:var(--display);font-weight:var(--display-weight);font-size:1.2rem;line-height:1.2}
.meta{margin:2px 0;color:var(--mut);font-size:.88rem}
.more{color:var(--primary-strong);font-weight:700}
.tags{display:flex;gap:6px;flex-wrap:wrap}
.tag{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ct,var(--label))}
.badge.example{font-size:.7rem;font-weight:800;text-transform:uppercase;background:var(--example-bg);color:var(--example-text);border-radius:6px;padding:1px 6px}
.foot{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px;font-size:.8rem}
.price{background:var(--surface);color:var(--ink);font-weight:800;border-radius:999px;padding:3px 10px}
.price.free{background:var(--c3-tint);color:var(--c3-text)}
.age{background:var(--primary-tint);color:var(--primary-strong);font-weight:800;border-radius:999px;padding:3px 10px}
.src{color:var(--mut);margin-left:auto}
.empty{padding:40px 16px;text-align:center;color:var(--mut)}
.link{background:none;border:0;color:var(--primary-strong);font-weight:800;cursor:pointer;font-size:1rem;text-decoration:none}
.back{display:inline-block;margin:16px 0 8px;text-decoration:none;font-weight:700;color:var(--mut)}
.detail,.submit{max-width:680px;margin:0 auto}

.detail h2,.submit h2{font-family:var(--display);font-weight:var(--display-weight);font-size:2rem;line-height:1.15;margin:8px 0 10px}
.desc{font-size:1.02rem}
dl{background:var(--card);border-radius:var(--r);padding:6px 16px;box-shadow:0 1px 0 var(--line)}
dt{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--label);margin-top:12px}
dd{margin:2px 0 12px;padding-bottom:10px;border-bottom:1px solid var(--line)}dd:last-child{border:0}
.slots{list-style:none;margin:0;padding:0}.slots li{padding:2px 0}
.btn{display:inline-block;margin-top:8px;padding:10px 16px;border-radius:999px;background:var(--primary-strong);color:var(--on-primary);text-decoration:none;font-weight:800;border:0;font-size:1rem;cursor:pointer}
.btn.primary{background:var(--accent);color:var(--on-accent);width:100%;padding:14px;margin-top:14px}
.notice{background:var(--surface);border-radius:12px;padding:12px 14px;font-weight:700;margin:8px 0}
.notice.ok{background:var(--c3-tint);color:var(--c3-text)}
form label{display:block;font-weight:700;font-size:.88rem;margin:10px 0}
form input:not([type=checkbox]),form select,form textarea{display:block;width:100%;margin-top:4px;padding:11px 12px;border:1.5px solid var(--line);border-radius:12px;background:var(--field);font-size:1rem}
form .two{display:grid;grid-template-columns:1fr 1fr;gap:10px}form .two label{margin:10px 0 0}
.fab{position:fixed;right:16px;bottom:calc(16px + env(safe-area-inset-bottom));background:var(--accent);color:var(--on-accent);text-decoration:none;font-weight:800;padding:14px 20px;border-radius:999px;box-shadow:0 8px 24px var(--accent-shadow);z-index:6}
.fab::before{content:"＋ "}
footer{max-width:1100px;margin:30px auto 0;padding:0 16px;color:var(--mut);font-size:.8rem;text-align:center}
.badge.tbc{font-size:.7rem;font-weight:800;text-transform:uppercase;background:var(--accent-tint);color:var(--accent-text);border-radius:6px;padding:1px 6px}
.notice.warn{background:var(--accent-tint);color:var(--warn-text)}

/* extras */
.hero{border-bottom:none}
.lang button.on{background:var(--primary-strong)}
.pill.cat.on{background:var(--ink);border-color:var(--ink);color:var(--bg)}

.top{border-bottom:1px solid var(--line)}
footer{border-top:1px solid var(--line);padding-top:16px}

/* ---- section tabs ---- */
.tabs{position:sticky;top:57px;z-index:4;display:flex;gap:4px;justify-content:center;padding:8px 16px;background:var(--header-bg);border-bottom:1px solid var(--line);backdrop-filter:blur(8px)}
.tabs a{flex:1 1 0;max-width:220px;text-align:center;padding:9px 8px;border-radius:999px;text-decoration:none;font-weight:700;font-size:.9rem;color:var(--mut);white-space:nowrap}
.tabs a.on{background:var(--primary-strong);color:var(--on-primary)}
/* ---- holidays ---- */
.hstrip{display:flex;gap:12px;align-items:center;padding:12px 14px;border-radius:var(--r);background:var(--surface);border:1.5px dashed var(--line)}
.hicon{font-size:1.6rem;flex:0 0 auto}
.hlabel{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--label)}
.hname{font-weight:800;font-size:1rem}
.hdate{color:var(--mut);font-size:.85rem}
.hnote{font-size:.85rem;margin-top:4px}
.hsrc{font-size:.75rem;color:var(--mut);margin-top:6px}.hsrc a{color:var(--primary-strong)}
.page-h{font-family:var(--display);font-weight:var(--display-weight);font-size:1.8rem;line-height:1.15;margin:0 0 6px}
.hero .sub{font-family:var(--sans);font-size:1rem;font-weight:400;color:var(--mut);margin:0 0 8px}
.month{font-family:var(--display);font-weight:var(--display-weight);font-size:1.25rem;margin:22px 0 8px;text-transform:capitalize}
.hlist{display:grid;gap:10px}
@media(min-width:720px){.hlist{grid-template-columns:1fr 1fr}}
.hrow{display:flex;gap:12px;background:var(--card);border-radius:var(--r);padding:12px 14px;box-shadow:0 1px 0 var(--line)}
.hday{flex:0 0 50px;height:56px;border-radius:12px;background:var(--surface);display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:800}
.hday .d{font-size:1.35rem;line-height:1}.hday .m{font-size:.7rem;text-transform:uppercase;color:var(--mut)}
.h-school .hday{background:var(--primary-tint)}
.h-local .hday{background:var(--accent-tint)}
.hint{color:var(--mut);font-size:.85rem}

/* ---- event card, Little Local style (works in every theme via fallbacks) ---- */
.list{gap:16px}
.ecard{display:flex;flex-direction:column;gap:0;padding:0;overflow:hidden;border-left:0;border:1px solid var(--card-border,var(--line));border-radius:var(--card-radius,var(--r));box-shadow:none;color:var(--ink);transition:transform .2s,box-shadow .2s}
.ecard:hover{transform:translateY(-3px);box-shadow:0 12px 24px rgba(60,66,48,.08)}
.evisual{position:relative;height:150px;overflow:hidden;display:flex;align-items:center;justify-content:center;background:var(--v,var(--surface))}
.v-orange{--v:var(--v-orange,color-mix(in srgb,var(--accent) 45%,var(--card)))}
.v-green{--v:var(--v-green,color-mix(in srgb,var(--c3) 55%,var(--card)))}
.v-blue{--v:var(--v-blue,color-mix(in srgb,var(--primary) 45%,var(--card)))}
.v-lilac{--v:var(--v-lilac,color-mix(in srgb,var(--c2) 50%,var(--card)))}
.v-yellow{--v:var(--v-yellow,color-mix(in srgb,#f2c94c 55%,var(--card)))}
.vsun{position:absolute;width:102px;height:102px;border-radius:50%;border:1px solid rgba(255,255,255,.6);top:22px;right:22%;opacity:.7}
.vhill{position:absolute;width:62%;height:96px;left:-6%;bottom:-46px;border-radius:50% 50% 0 0;background:var(--hill-1,color-mix(in srgb,var(--primary-strong) 80%,#000));transform:rotate(-6deg)}
.vhill:after{content:"";position:absolute;width:150%;height:80px;left:72%;bottom:2px;border-radius:50% 50% 0 0;background:var(--hill-2,var(--primary-strong));transform:rotate(9deg)}
.vemoji{position:relative;z-index:1;font-size:64px;line-height:1;filter:drop-shadow(0 7px 3px rgba(69,56,28,.15));transform:rotate(-7deg)}
.dbadge{position:absolute;left:13px;top:13px;z-index:2;width:46px;height:50px;background:var(--card);display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--ink)}
.dbadge b{font:700 20px/1 var(--display)}
.dbadge span{font-size:9px;letter-spacing:.13em;font-weight:700;text-transform:uppercase;color:var(--mut);margin-top:3px}
.etype{position:absolute;right:12px;top:13px;z-index:2;max-width:calc(100% - 84px);background:var(--etype-bg,rgba(20,24,20,.82));color:#fff;padding:7px 9px;font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;line-height:1.2;text-align:right}
.ebody{padding:16px 17px 14px;display:flex;flex-direction:column;flex:1}
.eloc{display:flex;align-items:center;gap:6px;color:var(--mut);font-size:11px;letter-spacing:.08em;text-transform:uppercase;font-weight:700}
.eloc .pin{color:var(--accent-text);font-size:13px}
.ecard h3{font-family:var(--display);font-weight:var(--display-weight);font-size:1.4rem;line-height:1.16;letter-spacing:-.01em;margin:8px 0 8px}
.edesc{font-size:.92rem;line-height:1.55;color:var(--mut);margin:0 0 12px}
.emeta{display:flex;gap:8px;flex-wrap:wrap;margin:auto 0 14px}
.emeta span{font-size:.78rem;color:var(--chip-ink,var(--ink));background:var(--chip-bg,var(--surface));padding:6px 8px}
.emeta span.warn{background:var(--accent-tint);color:var(--warn-text)}
.efoot{border-top:1px solid var(--line);padding-top:11px;display:flex;align-items:center;justify-content:space-between;gap:10px}
.ewhen{font-size:.82rem;color:var(--mut)}
.ewhen .more{color:var(--primary-strong);font-weight:700}
.elink{font-size:.85rem;color:var(--accent-text);font-weight:700;white-space:nowrap}
.elink span{margin-left:4px}
.detail .lead{font-size:1.08rem;line-height:1.55}
[data-theme=littlelocal] .pill{border-radius:20px}
[data-theme=littlelocal] .page-h,[data-theme=littlelocal] .hero p{letter-spacing:-.02em}
button,input,select,textarea{font-family:inherit}

/* ---- events grouped by day ---- */
.days{display:block}
.day{margin:0 0 30px}
.dayh{font-family:var(--display);font-weight:var(--display-weight);font-size:1.9rem;line-height:1.1;letter-spacing:-.02em;margin:22px 0 12px;display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;scroll-margin-top:120px}
.dayh small{font-family:var(--sans);font-size:.9rem;font-weight:600;color:var(--mut);text-transform:capitalize;letter-spacing:0}
.dayh .rel{font-family:var(--sans);font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;background:var(--accent);color:var(--on-accent);padding:5px 8px;align-self:center}
.day .hstrip{margin:0 0 12px;padding:9px 12px;border-style:solid;border-width:0 0 0 4px;border-color:var(--accent);border-radius:0 var(--card-radius,var(--r)) var(--card-radius,var(--r)) 0}
.day .hstrip .hicon{font-size:1.2rem}.day .hstrip .hname{font-size:.95rem}
/* mobile: one swipeable row per day (next card peeks in) */
.dayrow{display:grid;grid-auto-flow:column;grid-auto-columns:84%;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 -16px;padding:2px 16px 10px;scroll-padding:0 16px;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.dayrow>.ecard{scroll-snap-align:start}
.dayrow:has(>.ecard:only-child){grid-auto-columns:100%}
@media(min-width:720px){.dayrow{grid-auto-flow:row;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-columns:auto;overflow:visible;margin:0;padding:0;gap:18px}.dayrow:has(>.ecard:only-child){grid-auto-columns:auto}}
@media(min-width:1024px){.dayrow{grid-template-columns:repeat(3,minmax(0,1fr))}.dayh{font-size:2.2rem}}
.eby{margin:-2px 0 8px;font-size:.85rem;color:var(--mut)}
.emini{list-style:none;margin:0 0 12px;padding:0;display:grid;gap:4px;font-size:.85rem;color:var(--ink)}
.emini li{display:flex;align-items:flex-start;gap:7px;line-height:1.35}
.emini .more{color:var(--primary-strong);font-weight:700}
.ic{width:15px;height:15px;flex:0 0 15px;margin-top:1px;fill:none;stroke:var(--accent-text);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.dayrow .edesc{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

/* ---- playground map ---- */
.map{height:calc(100svh - 300px);min-height:380px;border:1px solid var(--card-border,var(--line));border-radius:var(--card-radius,var(--r));margin:4px 0 10px;z-index:0}
@media(min-width:1024px){.map{height:620px}}
.selects .btn,.selects .btn.primary{white-space:nowrap;width:auto;margin:0;padding:10px 14px;font-size:.9rem}
.pgpin span{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:var(--card);border:2px solid var(--accent-text);box-shadow:0 2px 5px rgba(0,0,0,.25);font-size:15px}
.marker-cluster-small,.marker-cluster-medium,.marker-cluster-large{background:color-mix(in srgb,var(--accent) 35%,transparent)!important}
.marker-cluster-small div,.marker-cluster-medium div,.marker-cluster-large div{background:var(--accent)!important;color:var(--on-accent)!important;font:700 12px var(--sans)!important}
.pgpop{font-family:var(--sans);color:var(--ink)}
.pgpop b{font-family:var(--display);font-weight:var(--display-weight);font-size:1.1rem}
.pgtown{color:var(--mut);font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;font-weight:700;margin:2px 0 6px}
.pgpop dl{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;margin:0 0 8px;font-size:.82rem}.pgpop dt{color:var(--mut)}.pgpop dd{margin:0}
.pgeq{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 8px}.pgeq span{font-size:.72rem;background:var(--chip-bg,var(--surface));padding:3px 6px}
.leaflet-popup-content a.pgdir{display:inline-block;width:auto;margin-top:0;font-size:.85rem;color:var(--on-accent)!important;text-decoration:none;padding:8px 12px;margin-right:8px}
.pgosm{font-size:.78rem}
.pgpop dl{background:none!important;padding:0!important;border:0!important;border-radius:0!important}
.pgpop dt{text-transform:none!important;letter-spacing:0!important;font-size:.8rem!important;font-weight:600;color:var(--mut);border:0!important;padding:0!important}
.pgpop dd{border:0!important;padding:0!important;font-size:.82rem}
#pgCount{white-space:nowrap;margin-left:auto}
body[data-view=playgrounds] .fab{display:none}
.pgpop dt,.pgpop dd{margin:0!important;align-self:baseline}
.ongoing .dayh small{text-transform:none}
.dbadge{width:auto;min-width:46px;padding:0 7px}
