@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@500;700;800&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Bungee&family=Nunito+Sans:wght@400;700;800&display=swap');
:root{--ink:#152330;--mut:#5a6874;--bg:#fff;--soft:#f4f7f8;--line:#dde5ea;--brand:#0e5f76;--brand2:#0a4658;--acc:#ff8a5b;--accd:#e5683a;--sand:#fff6ec}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}
body{margin:0;font:17px/1.6 system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;color:var(--ink);background:var(--bg)}
a{color:var(--brand)}a:hover{color:var(--brand2)}
.wrap{max-width:1100px;margin:0 auto;padding:0 16px}
header.top{border-bottom:1px solid var(--line);background:#fff;position:sticky;top:0;z-index:5}
header.top .wrap{display:flex;align-items:center;justify-content:space-between;height:60px;gap:12px}
.logo{font-weight:800;font-size:20px;color:var(--ink);text-decoration:none;letter-spacing:-.3px;white-space:nowrap}.logo span{color:var(--acc)}
nav.main a{margin-left:16px;text-decoration:none;color:var(--ink);font-size:15px}nav.main a:hover{color:var(--brand)}
.btn{display:inline-block;background:var(--acc);color:#1d0d05;font-weight:700;padding:12px 20px;border-radius:10px;text-decoration:none;border:0;cursor:pointer;font-size:16px}
.btn:hover{background:var(--accd);color:#1d0d05}.btn:disabled{opacity:.6}
.hero{background:linear-gradient(135deg,#0b4f63 0%,#13708a 70%,#1b8aa0 100%);color:#fff;padding:44px 0 40px}
.hero h1{font-size:clamp(28px,4.6vw,42px);line-height:1.15;margin:0 0 10px;letter-spacing:-.5px}
.hero p{font-size:19px;opacity:.96;max-width:740px;margin:0 0 18px}
.crumbs{font-size:14px;color:var(--mut);margin:14px 0 0}.crumbs a{color:var(--mut)}
.hero .crumbs,.hero .crumbs a{color:#d9eef3}
main{padding:10px 0 40px}
h2{font-size:26px;margin:34px 0 10px;letter-spacing:-.3px;scroll-margin-top:72px}h3{font-size:19px;margin:0 0 4px}
.updated{color:var(--mut);font-size:14px;margin-top:18px}.mut{color:var(--mut)}.small{font-size:14px}
.jump{font-size:15px;background:var(--soft);padding:10px 14px;border-radius:10px}
.callout{background:var(--sand);border-left:4px solid var(--acc);padding:12px 16px;border-radius:8px;margin:16px 0}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin:14px 0}
.card{border:1px solid var(--line);border-radius:12px;padding:16px;background:#fff;text-decoration:none;color:var(--ink);display:block;position:relative}
a.card:hover{border-color:var(--brand)}.card b{display:block;font-size:17px;margin-bottom:2px}.card small{color:var(--mut);font-size:14px;display:block}
.featc{background:var(--sand);border-color:#f6d2bd}
.rgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.rcard{display:block;text-decoration:none;color:#fff;background:linear-gradient(160deg,#13708a,#0a4658);border-radius:14px;padding:22px 18px;min-height:150px}
.rcard b{display:block;font-size:21px;margin-bottom:6px}.rcard span{font-size:15px;opacity:.92}.rcard:hover{filter:brightness(1.08);color:#fff}
.places{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.place{border:1px solid var(--line);border-radius:12px;padding:16px;scroll-margin-top:72px}
.place.feat{background:var(--sand);border-color:#f6d2bd}
.place p{margin:6px 0;font-size:16px}.meta{font-size:14px;color:var(--mut)}.addr{font-size:14px;color:var(--mut)}
.links{font-size:15px;margin-top:6px}
.tag{display:inline-block;background:var(--acc);color:#1d0d05;font-size:12px;font-weight:700;border-radius:6px;padding:1px 8px;margin-bottom:6px;text-transform:uppercase;letter-spacing:.4px}
.clist{padding-left:20px}.clist li{margin:4px 0}.out{font-size:14px}
.steps li{margin:8px 0}
details{border:1px solid var(--line);border-radius:10px;padding:10px 14px;margin:8px 0}summary{cursor:pointer;font-weight:600}
.two{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:28px;align-items:start}
.lead{border:2px solid var(--brand);border-radius:14px;padding:18px;background:#fff;position:sticky;top:76px;margin-top:20px}
.lead h3{margin:0 0 6px}.lead .who{font-size:14px;color:var(--mut);margin:0 0 8px}
.lead label{display:block;font-size:14px;font-weight:600;margin:10px 0 4px}
.lead input,.lead select,.lead textarea{width:100%;padding:10px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:16px;background:#fff}
.lead label.consent{display:flex;gap:8px;align-items:flex-start;font-weight:400;font-size:12.5px;line-height:1.45;color:var(--mut);margin:12px 0}
.lead label.consent input{width:auto;margin-top:3px;flex:none}
.lead .legal{font-size:12px;margin:8px 0 0}.err{color:#b42318;font-size:14px}
footer{background:#0b2a36;color:#cfe0e6;padding:30px 0 20px;margin-top:30px;font-size:15px}
footer a{color:#fff;display:inline-block;padding:4px 0;min-height:24px;text-decoration:none}footer a:hover{text-decoration:underline}
.fgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:18px}
.fine{font-size:13px;color:#9fb8c2;margin-top:18px}.fine a{color:#cfe0e6;display:inline;text-decoration:underline}
@media(max-width:860px){.two{grid-template-columns:minmax(0,1fr)}.lead{position:static}
nav.main{display:flex;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch;max-width:62vw}nav.main a{margin-left:14px;font-size:14px;padding:10px 0}.hide-m{display:none}
.places{grid-template-columns:minmax(0,1fr)}}
.info{background:var(--soft);border-radius:8px;padding:8px 10px;margin:8px 0;font-size:14.5px}.kv{margin:2px 0}
.chip{display:inline-block;border:1px solid var(--brand);color:var(--brand);border-radius:999px;padding:3px 10px;font-size:14px;text-decoration:none;margin:2px 4px 2px 0}.chip:hover{background:var(--brand);color:#fff}
.vlist,.evlist{list-style:none;padding:0}.vlist li,.evlist li{border-bottom:1px solid var(--line);padding:10px 4px}
.is-today{background:#fff3e6;border-left:4px solid var(--acc)}
.evd{font-weight:700;color:var(--brand2);display:inline-block;min-width:150px}
.tag.t-sports{background:#1b8aa0;color:#fff}.tag.t-concert{background:var(--acc)}.tag.t-theater,.tag.t-comedy,.tag.t-festival{background:#e9d6ff}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.filters select{padding:9px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:15px}
.livec{background:#eef8fa;border-color:#cfe8ee}
.chip-pri{background:var(--acc);border-color:var(--acc);color:#1d0d05;font-weight:700}.chip-pri:hover{background:var(--accd);color:#1d0d05}
/* ---- v2 polish ---- */
h1,h2,h3,.logo{font-family:Outfit,system-ui,sans-serif;letter-spacing:-.2px}
h2{font-size:clamp(22px,3vw,30px);margin:38px 0 14px}
.hero{position:relative;overflow:hidden}
.hero.hero-img{background:linear-gradient(180deg,rgba(6,40,52,.25) 0%,rgba(6,40,52,.72) 75%),var(--hero) center/cover no-repeat,#0b4f63;padding:120px 0 56px;min-height:340px}
.hero.hero-img h1{text-shadow:0 2px 18px rgba(0,0,0,.35);font-size:clamp(32px,5.4vw,54px)}
.hero.hero-img p{text-shadow:0 1px 10px rgba(0,0,0,.4)}
.hero::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:22px;background:radial-gradient(28px 14px at 28px 0,transparent 98%,#fff 100%) 0 0/56px 22px repeat-x}
.hcred{position:relative;z-index:1}.hcred .credit{color:rgba(255,255,255,.75);background:none;position:static;padding:0;margin-top:8px;display:inline-block}
.credit{font-size:11px;color:var(--mut);text-decoration:none;display:block;margin-top:4px}
.btn{box-shadow:0 6px 20px rgba(255,138,91,.35);transition:transform .15s}.btn:hover{transform:translateY(-1px)}
.card,.rcard,.place{transition:transform .18s ease,box-shadow .18s ease}
.card:hover,.rcard:hover{transform:translateY(-3px);box-shadow:0 12px 30px rgba(10,63,79,.14)}
.rcard.rimg{position:relative;color:#fff!important;background:linear-gradient(180deg,rgba(0,0,0,.05),rgba(6,40,52,.82)),var(--bg) center/cover;min-height:210px;display:flex;flex-direction:column;justify-content:flex-end;border:0}
.rcard.rimg b{font-size:21px;color:#fff}.rcard.rimg span{color:rgba(255,255,255,.92)}
.place.has-img{padding-top:0;overflow:hidden}
.pimg{margin:0 -16px 12px;position:relative}
.pimg img{display:block;width:100%;height:190px;object-fit:cover}
.pimg .credit{position:absolute;right:6px;bottom:6px;background:rgba(0,0,0,.45);color:#fff;padding:1px 6px;border-radius:6px;margin:0}
.place:hover{box-shadow:0 10px 26px rgba(10,63,79,.12)}
.ev{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.evimg{width:56px;height:56px;border-radius:12px;object-fit:cover;flex:none;background:var(--soft)}
.evph{display:inline-block;background:linear-gradient(135deg,#0e5f76,#1b8aa0)}
.evph.t-concert{background:linear-gradient(135deg,#ff8a5b,#f9c74f)}.evph.t-comedy{background:linear-gradient(135deg,#9b5de5,#f15bb5)}
.evph.t-sports{background:linear-gradient(135deg,#0a3f4f,#43aa8b)}.evph.t-theater{background:linear-gradient(135deg,#7b2cbf,#c77dff)}
.chip-pri{box-shadow:0 3px 10px rgba(255,138,91,.25)}
@media (prefers-reduced-motion:reduce){.card,.rcard,.place,.btn{transition:none}.card:hover,.rcard:hover{transform:none}}
.dlv{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px;margin:4px 6px 4px 0;padding:4px 8px;border-radius:12px;background:var(--sand)}.dlv-l{font-size:13px;font-weight:600;color:var(--mut)}.chip-dlv{background:#fff}
:root{--ink:#2a1630;--mut:#6d5568;--bg:#fff4e6;--soft:#ffe9d2;--line:#f0d4bb;--brand:#0f8a8a;--brand2:#0b6b6b;--acc:#ff6b35;--accd:#e9541f;--sand:#ffe9d2;
--disp:"Bungee",Impact,sans-serif;--sans:"Nunito Sans",system-ui,sans-serif}
.logo.ptt-logo{font-weight:400;display:inline-flex;align-items:center;gap:2px;white-space:nowrap}
.ptt-logo .palm{width:26px;height:26px;margin-left:4px;transform:translateY(-3px)}
.hero h1.brush-h .w2{font-size:.78em}.hero .swoosh{display:block;width:min(560px,90%);height:30px;margin:-4px 0 12px}
h2{position:relative;display:inline-block;padding-bottom:6px;text-wrap:balance}
.hero::after{display:none}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}

body{font-family:var(--sans);background:var(--bg);color:var(--ink)}
header.top{background:#2a1630;border:0}nav.main a{color:#ffe9d2;font-weight:700}nav.main a:hover{color:#ffb347}
.logo.ptt-logo{font-family:var(--disp);font-size:20px;color:#fff}.ptt-logo .lg-b{color:#ffb347;margin-left:6px}.ptt-logo .lg-ai{color:#4fd1c5}.ptt-logo .palm{color:#ff5e7e}
h2{font-family:var(--disp);font-weight:400;font-size:clamp(22px,3vw,30px);color:#2a1630}
h2::after{content:"";position:absolute;left:0;right:0;bottom:0;height:8px;background:repeating-linear-gradient(90deg,#ff5e7e 0 22%,#ff8c42 22% 44%,#ffc93c 44% 66%,#4fd1c5 66% 88%,#7b4fd1 88% 100%);border-radius:3px}
.hero{background:linear-gradient(180deg,#7b4fd1 0%,#e0457b 38%,#ff8c42 66%,#ffc93c 100%);padding:64px 0 70px;position:relative;overflow:hidden}
.hero::before{content:"";position:absolute;left:50%;bottom:-160px;width:360px;height:360px;margin-left:120px;border-radius:50%;background:repeating-linear-gradient(180deg,#ffe066 0 26px,transparent 26px 36px);opacity:.75}
.hero.hero-img{background:linear-gradient(180deg,rgba(123,79,209,.55) 0%,rgba(224,69,123,.55) 45%,rgba(42,22,48,.85) 100%),var(--hero) center/cover;min-height:420px;padding:150px 0 60px}
.hero h1{font-family:var(--disp);font-weight:400;font-size:clamp(30px,5.4vw,56px);line-height:1.08;text-shadow:4px 4px 0 #2a1630}
.hero h1.brush-h .w1{color:#fff}.hero h1.brush-h .w2{color:#ffe066}.hero h1.brush-h .w3{color:#7ff0e4}.hero .swoosh{color:#ffe066}
.btn{background:#2a1630;color:#ffe066;border-radius:999px;font-family:var(--disp);font-weight:400;letter-spacing:.5px;box-shadow:0 6px 0 #ff5e7e}.btn:hover{background:#3d2045;color:#fff}
.card,.place,.lead{background:#fffaf3;border:0;border-radius:22px;box-shadow:0 10px 28px rgba(123,79,209,.12)}
a.card:hover,.place:hover{box-shadow:0 16px 36px rgba(224,69,123,.25)}
.rcard{border-radius:22px;background:linear-gradient(160deg,#e0457b,#7b4fd1)}.rcard.rimg b{font-family:var(--disp);font-weight:400}
.featc,.place.feat{background:linear-gradient(160deg,#fff0f4,#ffe9d2)}.livec{background:linear-gradient(160deg,#e6fbf8,#fff4e6)}
.tag{background:#7b4fd1;color:#fff}.chip{border-color:#0f8a8a;color:#0f8a8a}.chip-pri{background:#ff6b35;border-color:#ff6b35;color:#fff}
.info{background:#fff0dc}.kv b{color:#e0457b}.evd{color:#7b4fd1}.is-today{background:#ffe3ec;border-left-color:#e0457b}
footer{background:linear-gradient(180deg,#2a1630,#1a0d1f);border-top:8px solid;border-image:linear-gradient(90deg,#ff5e7e,#ff8c42,#ffc93c,#4fd1c5,#7b4fd1) 1}footer b{font-family:var(--disp);font-weight:400;color:#ffb347}

/* ---- painted town hero ---- */
.hero.town-hero{position:relative;overflow:hidden;padding:34px 0 0;min-height:0;background:var(--th-bg,#0c0811)}
nav.main a{margin-left:12px;font-size:14px}.hero.town-hero::before,.hero.town-hero::after{display:none}
.town-hero .wrap{position:relative;z-index:2}
.town-hero h1{margin:0 0 6px}
.town-hero p.lede{font-size:19px;max-width:720px;margin:0 0 14px;color:var(--th-ink,#fff)}
.town-hero .cta{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:6px}
.town-hero .repaint{background:transparent;border:1.5px solid currentColor;color:var(--th-ink,#fff);border-radius:999px;padding:9px 16px;font:600 14px var(--sans,system-ui);cursor:pointer}
.town{display:block;width:100%;height:auto;max-height:440px;margin-top:6px}
.town .sky{fill:var(--t-sky,#1a0b24)}
.town .sun circle{fill:var(--t-sun,#ff7a45)}.town .sunstripe{fill:var(--t-sky,#1a0b24)}
.town .far rect{fill:var(--t-far,#2a1838)}
.town .c1{fill:var(--t1,#ff2e88)}.town .c2{fill:var(--t2,#22d3ee)}.town .c3{fill:var(--t3,#7c5cff)}.town .c4{fill:var(--t4,#ffc93c)}.town .c5{fill:var(--t5,#ff7a45)}.town .c6{fill:var(--t6,#ff8fc0)}
.town .win{fill:rgba(0,0,0,.28)}.town .win.lit{fill:var(--t-lit,#fff3b0)}
.town .post{fill:var(--t-post,#2a2030)}
.town .bbf{fill:var(--t-bb,#fff);stroke:var(--t-bbs,#111);stroke-width:3}
.town .bbt{font:400 19px var(--bbfont,"Permanent Marker",cursive);fill:var(--t-bbt,#111)}.town .bbs{font:600 13px var(--sans,system-ui);fill:var(--t-bbsub,#444)}
.town a.bb{cursor:pointer}.town a.bb:hover .bbf{stroke:var(--t1,#ff2e88);stroke-width:4}
.town .wheel line,.town .ring,.town .leg{stroke:var(--t-steel,#fff);stroke-width:3;fill:none}.town .car{fill:var(--t4,#ffc93c)}
.town .water rect{fill:var(--t-water,#0f5d73)}.town .wave{stroke:var(--t-wave,rgba(255,255,255,.45));stroke-width:3;fill:none;stroke-linecap:round}
.town .pier{fill:var(--t-pier,#5a3b2a)}.town .sail{fill:#fff}.town .sail2{fill:var(--t1,#ff2e88)}.town .hull{fill:var(--t-post,#2a2030)}
.town .trunk{stroke:var(--t-trunk,#3b2a1e);stroke-width:7;fill:none;stroke-linecap:round}.town .frond{stroke:var(--t-palm,#1f9d6b);stroke-width:7;fill:none;stroke-linecap:round}
.town .brush .handle{fill:var(--t-handle,#c98a4b)}.town .brush .ferrule{fill:#c9c9d1}.town .brush .bristle{fill:var(--t1,#ff2e88)}
/* the painting: each piece is revealed left-to-right like a brush stroke */
.town .pt{clip-path:inset(0 100% 0 0);animation:paintin .9s cubic-bezier(.6,.05,.3,1) forwards;animation-delay:var(--d)}
@keyframes paintin{to{clip-path:inset(0 0 0 0)}}
.town .brush{animation:sweep 2.8s ease-in-out .1s forwards;transform:translate(-140px,120px)}
@keyframes sweep{0%{transform:translate(-140px,140px) rotate(8deg)}35%{transform:translate(420px,220px) rotate(-6deg)}70%{transform:translate(860px,170px) rotate(8deg)}100%{transform:translate(1320px,260px) rotate(0)}}
.town .wheel{transform-origin:900px 210px;animation:spin 40s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.town .win.lit{animation:flick 6s ease-in-out infinite alternate}
@keyframes flick{50%{opacity:.55}}
.town a.bb text,.town a.bb .bbf{transition:opacity .35s}
.town a.bb.swap text{opacity:0}
@media (prefers-reduced-motion:reduce){.town .pt{animation:none;clip-path:none}.town .brush{display:none}.town .wheel,.town .win.lit{animation:none}}
/* ---- walking painter (loops, repaints the town in a new palette each pass) ---- */
.painter-mode .town .pt{animation:none;clip-path:none}.painter-mode .town .brush{display:none}
.tstage{position:relative;margin-top:6px}.tstage .town{margin-top:0}
.tl.ttop{position:absolute;inset:0;clip-path:polygon(0 0,0 0,0 100%,0 100%)}
.tl.sk .town{filter:grayscale(1) contrast(.5) brightness(1.45)}
.tfaces{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:2}
.tfaces .face{transform-box:fill-box;transform-origin:center;transform:scale(0);transition:transform .45s cubic-bezier(.3,1.8,.5,1)}.tfaces .face.on{transform:scale(1)}
.ptr{position:absolute;bottom:3%;left:-12%;height:40%;aspect-ratio:140/220;z-index:3;pointer-events:none;filter:drop-shadow(0 4px 3px rgba(0,0,0,.2))}
.ptr svg{width:100%;height:100%;overflow:visible}.ptr.flip svg{transform:scaleX(-1)}
.ptr .leg{transform-box:fill-box;transform-origin:50% 0}
.ptr.walk .l1{animation:pstep .5s ease-in-out infinite alternate}.ptr.walk .l2{animation:pstep .5s ease-in-out infinite alternate-reverse}
@keyframes pstep{from{transform:rotate(16deg)}to{transform:rotate(-16deg)}}
.ptr.walk .bob{animation:pbob .25s ease-in-out infinite alternate}@keyframes pbob{to{transform:translateY(-2px)}}
.ptr .arm-r{transform-box:view-box;transform-origin:92px 98px}
.ptr.walk .arm-r{animation:pdab .36s ease-in-out infinite alternate}@keyframes pdab{from{transform:rotate(-12deg)}to{transform:rotate(10deg)}}
.ptr.wave .arm-r{animation:pwave .4s ease-in-out 4 alternate}@keyframes pwave{from{transform:rotate(-34deg)}to{transform:rotate(8deg)}}
@media (max-width:640px){.ptr{height:46%}}
/* phones: billboards are too small to read, so the current billboard also shows in a readable strip */
.bbstrip{display:none}
@media (max-width:700px){.bbstrip{display:flex;align-items:center;gap:8px;margin:0;padding:10px 16px;background:var(--t-bb,#2a1630);color:var(--t-bbt,#ffe066);text-decoration:none;font:600 15px var(--sans,system-ui);transition:opacity .35s}
.bbstrip b{font:400 15px var(--bbfont,"Bungee",sans-serif);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bbstrip small{color:var(--t-bbsub,#fff);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}
.bbstrip .bbtag{font-size:11px;text-transform:uppercase;letter-spacing:.6px;background:var(--t-bbs,#ffe066);color:var(--t-bb,#2a1630);padding:2px 7px;border-radius:99px;flex:none}.bbstrip .bbgo{font-size:22px;line-height:1;flex:none}.bbstrip.swap{opacity:0}}

@media (prefers-reduced-motion:reduce){.tl.ttop{clip-path:none}.ptr{display:none}.tfaces .face{transform:scale(1);transition:none}}
.town-hero{--th-bg:linear-gradient(180deg,#7b4fd1,#e0457b);--th-ink:#fff;--t-sky:#ffb26b;--t-far:#ff8c69;--t-sun:#ffe066;--t1:#e0457b;--t2:#4fd1c5;--t3:#7b4fd1;--t4:#ffc93c;--t5:#ff6b35;--t6:#ff9ec4;--t-water:#2a9d8f;--t-bb:#2a1630;--t-bbs:#ffe066;--t-bbt:#ffe066;--t-bbsub:#fff;--t-steel:#2a1630;--bbfont:"Bungee",sans-serif}.town .bbt{font-size:15px}