@font-face{font-family:'Onest';src:url('../fonts/Onest-VariableFont_wght.ttf') format('truetype');font-weight:100 900;font-display:swap}
@font-face{font-family:'Unbounded';src:url('../fonts/Unbounded-VariableFont_wght.ttf') format('truetype');font-weight:200 900;font-display:swap}
:root{--coral:#FF6A3D;--coral-d:#E85A2F;--sun:#FFC93C;--mint:#21A66B;--mint-l:#E3F4EA;--ink:#1D1B20;--muted:#6E6A72;--peach:#FFF3EA;--line:#F0E4DA;--card:#fff;--soft:#FFF8F2;--danger:#D93A2B;--danger-l:#FDECEA;
--r-card:22px;--r-in:14px;--sh:0 1px 2px rgba(29,27,32,.06),0 4px 14px rgba(29,27,32,.05)}
*{box-sizing:border-box;margin:0;padding:0}
html,body{font-family:'Onest',system-ui,sans-serif;color:var(--ink);-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none;cursor:pointer}
button{font:inherit;border:0;background:none;color:inherit;cursor:pointer}
.ic{flex:none;display:block}
.h-un{font-family:'Unbounded',sans-serif;letter-spacing:-.02em}
/* ---------- prototype shell */
body.shell{background:#F4EFEA;min-height:100vh;display:grid;grid-template-columns:300px 1fr;}
.side{background:#fff;border-right:1px solid var(--line);padding:28px 22px;height:100vh;overflow:auto;position:sticky;top:0}
.side .brand{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.side .brand b{font-family:'Unbounded';font-size:22px;letter-spacing:-.02em}
.side .hint{font-size:13px;color:var(--muted);line-height:1.45;margin:10px 0 18px}
.side h4{font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:20px 0 8px;font-weight:600}
.side a.sl{display:flex;gap:10px;align-items:center;padding:8px 10px;border-radius:10px;font-size:14.5px;font-weight:500}
.side a.sl:hover{background:var(--peach)}.side a.sl.on{background:var(--ink);color:#fff}
.side a.sl i{font-style:normal;font-size:12px;color:var(--muted);width:22px}.side a.sl.on i{color:#ffffffaa}
.side .note{margin-top:22px;padding:12px;border-radius:12px;background:#FFF6D6;font-size:12.5px;line-height:1.45}
.stage{display:flex;align-items:center;justify-content:center;padding:32px}
.device{width:414px;height:868px;border-radius:58px;background:#111;padding:12px;box-shadow:0 40px 80px -40px rgba(0,0,0,.45)}
.device .viewport{width:390px;height:844px;border-radius:46px;overflow:hidden;position:relative;background:var(--peach)}
body.bare{background:var(--peach);width:390px;height:844px;overflow:hidden}
body.bare .viewport{width:390px;height:844px;position:relative;overflow:hidden}
body.overview{background:#F4EFEA;padding:56px 64px}
.ov-head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:40px}
.ov-grid{display:grid;grid-template-columns:repeat(6,390px);gap:56px 40px}
.ov-item .ov-lab{font-size:15px;font-weight:600;margin-bottom:12px;display:flex;gap:10px;align-items:baseline}
.ov-item .ov-lab i{font-style:normal;color:var(--coral);font-family:'Unbounded';font-size:13px}
.ov-item .viewport{width:390px;height:844px;border-radius:36px;overflow:hidden;position:relative;background:var(--peach);box-shadow:0 0 0 1px rgba(0,0,0,.06),0 20px 40px -24px rgba(0,0,0,.25)}
/* ---------- screen */
.screen{position:absolute;inset:0;display:none;flex-direction:column;background:var(--peach)}
.screen.on,.overview .screen,.ov-item .screen{display:flex}
.screen.white{background:#fff}
.status{height:47px;flex:none;display:flex;justify-content:space-between;align-items:center;padding:4px 26px 0 34px;font-weight:600;font-size:15.5px}
.status .st-r{display:flex;gap:6px;align-items:center}.status svg{fill:currentColor}
.scroll{flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:none}.scroll::-webkit-scrollbar{display:none}
.pad{padding:0 20px}
.appbar{height:52px;flex:none;display:flex;align-items:center;padding:0 12px}
.ab-l,.ab-r{width:44px;display:flex}.ab-r{justify-content:flex-end}
.ab-t{flex:1;text-align:center;min-width:0}.ab-title{font-weight:700;font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ab-sub{font-size:12.5px;color:var(--muted);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.iconbtn{width:44px;height:44px;border-radius:14px;display:flex;align-items:center;justify-content:center}
.iconbtn.bg{background:#fff;box-shadow:var(--sh)}.iconbtn.ghost{visibility:hidden}
.h1{font-family:'Unbounded';font-weight:700;font-size:26px;letter-spacing:-.02em;line-height:1.15}
.h2{font-family:'Unbounded';font-weight:700;font-size:20px;letter-spacing:-.02em;line-height:1.2}
.lead{font-size:15.5px;line-height:1.5;color:var(--muted)}
.lbl{font-size:13px;font-weight:600;color:var(--muted);margin:0 0 8px}
.sect{font-size:17px;font-weight:700;margin:24px 0 12px;display:flex;justify-content:space-between;align-items:baseline}
.sect a{font-size:14px;font-weight:600;color:var(--coral)}
.btn{display:flex;align-items:center;justify-content:center;gap:8px;height:54px;border-radius:999px;font-weight:700;font-size:16px;background:var(--coral);color:#fff;width:100%}
.btn.sm{height:40px;width:auto;padding:0 16px;font-size:14px;display:inline-flex;flex:none}
.btn.ink{background:var(--ink)}.btn.sec{background:#fff;color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--line)}.btn.soft{background:var(--peach);color:var(--ink)}
.btn.mint{background:var(--mint)}.btn.danger{background:var(--danger)}.btn.ghost{background:transparent;color:var(--ink)}
.btn.off{background:#F1E9E2;color:#A9A1A8}
.field{background:#fff;border-radius:var(--r-in);box-shadow:inset 0 0 0 1.5px var(--line);min-height:54px;padding:0 16px;display:flex;align-items:center;gap:10px;font-size:16px}
.field.focus{box-shadow:inset 0 0 0 2px var(--ink)}
.field.ta{align-items:flex-start;padding:14px 16px;line-height:1.45;min-height:96px}
.field .ph{color:#A9A1A8}
.helper{font-size:12.5px;color:var(--muted);margin-top:7px;line-height:1.4;display:flex;gap:6px}
.chips{display:flex;flex-wrap:wrap;gap:8px}.chips.row{flex-wrap:nowrap;overflow:hidden}
.chip{height:38px;padding:0 14px;border-radius:999px;font-size:14px;font-weight:500;background:#fff;box-shadow:inset 0 0 0 1.5px var(--line);display:inline-flex;align-items:center;gap:6px;white-space:nowrap;cursor:pointer;flex:none}
.chip.on{background:var(--ink);color:#fff;box-shadow:none}.chip.c-on{background:#FFE9DF;box-shadow:inset 0 0 0 1.5px var(--coral);color:var(--ink)}
.card{background:#fff;border-radius:var(--r-card);box-shadow:var(--sh);padding:16px}
.av{border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:700;color:#1D1B20;flex:none}
.avstack{display:inline-flex}.avstack .av{box-shadow:0 0 0 2.5px #fff;margin-left:-8px}.avstack .av:first-child{margin-left:0}
.badge{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:600;padding:4px 8px;border-radius:999px;background:var(--mint-l);color:#17804F;white-space:nowrap}
.badge.sun{background:#FFF1C7;color:#7A5600}.badge.coral{background:#FFE9DF;color:#B8431E}.badge.grey{background:#F1EDEA;color:var(--muted)}
.rq{display:block;margin:0 20px 12px}
.rq .top{display:flex;align-items:center;gap:10px}.rq .who{flex:1;min-width:0}.rq .nm{font-size:14.5px;font-weight:600}.rq .meta{font-size:12.5px;color:var(--muted);margin-top:2px}
.rq .t{font-size:17.5px;font-weight:700;margin:12px 0 5px;line-height:1.25;letter-spacing:-.005em}.rq .x{font-size:14px;line-height:1.45;color:var(--muted)}
.rq .f{display:flex;align-items:center;gap:10px;margin-top:14px}.rq .fl{flex:1;min-width:0}.rq .when{font-size:13.5px;font-weight:600}.rq .resp{font-size:12.5px;color:var(--muted);margin-top:3px}
.banner{margin:0 20px 12px;border-radius:var(--r-card);padding:14px 16px;background:var(--sun);display:flex;align-items:center;gap:12px}
.banner .bt{font-size:12.5px;font-weight:600;opacity:.8}.banner .bh{font-size:16px;font-weight:700;margin:3px 0 2px}.banner .bm{font-size:13px;opacity:.8}
.tabbar{position:absolute;left:0;right:0;bottom:0;height:88px;background:#fff;box-shadow:0 -1px 0 var(--line);display:flex;justify-content:space-around;align-items:flex-start;padding:9px 6px 0;z-index:5}
.tab{display:flex;flex-direction:column;align-items:center;gap:4px;width:68px;color:var(--muted);position:relative}
.tab.on{color:var(--ink)}.tab .tl{font-size:11.5px;font-weight:500}.tab.on .tl{font-weight:700}
.tab .tb{position:absolute;top:-3px;left:40px;background:var(--coral);color:#fff;font-style:normal;font-size:10.5px;font-weight:700;min-width:17px;height:17px;border-radius:9px;display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 2px #fff}
.fabw{margin-top:-28px}.fabw .tl{color:var(--ink);font-weight:700}
.fab{width:58px;height:58px;border-radius:50%;background:var(--coral);display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 5px #fff}
.sticky{flex:none;padding:12px 20px 30px;background:linear-gradient(to top,var(--peach) 70%,rgba(255,243,234,0))}
.white .sticky{background:#fff}
.check{display:flex;gap:12px;align-items:flex-start;font-size:14.5px;line-height:1.4;cursor:pointer}
.check .bx{width:24px;height:24px;border-radius:8px;box-shadow:inset 0 0 0 2px #D9CDC3;flex:none;display:flex;align-items:center;justify-content:center;background:#fff;margin-top:-1px}
.check.on .bx{background:var(--ink);box-shadow:none}.check .bx svg{opacity:0}.check.on .bx svg{opacity:1}
.check small{display:block;color:var(--muted);font-size:12.5px;margin-top:2px}
.check a{text-decoration:underline;text-underline-offset:2px}
.radio{display:flex;gap:12px;align-items:center;padding:14px 16px;font-size:15px;cursor:pointer}
.radio .rd{width:22px;height:22px;border-radius:50%;box-shadow:inset 0 0 0 2px #D9CDC3;flex:none}
.radio.on .rd{box-shadow:inset 0 0 0 7px var(--ink)}
.radio .rt{flex:1}.radio small{display:block;font-size:12.5px;color:var(--muted);margin-top:2px}
.group{background:#fff;border-radius:18px;box-shadow:var(--sh);overflow:hidden}
.group>*+*{border-top:1px solid #F4ECE5}
.row{display:flex;align-items:center;gap:12px;padding:14px 16px;font-size:15px}
.row .rt{flex:1}.row .rv{color:var(--muted);font-size:14px}.row small{display:block;font-size:12.5px;color:var(--muted);margin-top:2px}
.ibox{width:36px;height:36px;border-radius:11px;background:var(--peach);display:flex;align-items:center;justify-content:center;flex:none}
.tip{display:flex;gap:12px;align-items:flex-start;background:#FFF6D6;border-radius:18px;padding:14px}
.tip .tt{font-size:14px;line-height:1.45}.tip b{font-weight:700}
.seg{display:flex;background:#F4E9E0;border-radius:14px;padding:4px}.seg span{flex:1;text-align:center;height:36px;display:flex;align-items:center;justify-content:center;border-radius:10px;font-size:14px;font-weight:600;color:var(--muted);cursor:pointer}
.seg span.on{background:#fff;color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.toast{position:absolute;left:16px;right:16px;bottom:104px;background:var(--ink);color:#fff;border-radius:16px;padding:14px 16px;font-size:14.5px;display:none;align-items:center;gap:10px;z-index:20;box-shadow:0 10px 30px rgba(0,0,0,.2)}
.toast.on{display:flex}
.dim{position:absolute;inset:0;background:rgba(29,27,32,.45);z-index:8}
.sheet{position:absolute;left:0;right:0;bottom:0;background:#fff;border-radius:28px 28px 0 0;z-index:9;padding:10px 20px 30px}
.grab{width:40px;height:5px;border-radius:3px;background:#E5DCD4;margin:0 auto 16px}
/* chat */
.msgs{padding:8px 16px 12px;display:flex;flex-direction:column;gap:6px}
.msg{max-width:78%;padding:10px 14px;border-radius:20px;font-size:15px;line-height:1.4;position:relative}
.msg .tm{font-size:11px;opacity:.6;margin-left:8px;display:inline-block;vertical-align:-1px;white-space:nowrap}
.msg.in{background:#fff;align-self:flex-start;border-bottom-left-radius:6px;box-shadow:0 1px 1px rgba(0,0,0,.04)}
.msg.out{background:var(--coral);color:#fff;align-self:flex-end;border-bottom-right-radius:6px}
.sys{align-self:center;font-size:12.5px;color:var(--muted);background:#F7ECE3;padding:6px 12px;border-radius:999px;margin:8px 0;display:flex;gap:6px;align-items:center}
.daysep{align-self:center;font-size:12px;color:var(--muted);margin:6px 0}
.composer{flex:none;display:flex;gap:8px;align-items:center;padding:8px 12px 30px;background:#fff;box-shadow:0 -1px 0 var(--line)}
.composer .field{flex:1;min-height:44px;border-radius:22px;background:var(--peach);box-shadow:none}
.sendb{width:44px;height:44px;border-radius:50%;background:var(--coral);display:flex;align-items:center;justify-content:center;color:#fff;flex:none}
.qa{flex:none;display:flex;gap:8px;padding:8px 12px;overflow:hidden;background:#fff}
.appicon{display:inline-flex;align-items:center;justify-content:center;background:var(--sun);flex:none}
.stat{flex:1;background:#fff;border-radius:18px;box-shadow:var(--sh);padding:14px 12px;text-align:center}
.stat b{display:block;font-family:'Unbounded';font-size:24px;letter-spacing:-.02em}.stat span{font-size:12.5px;color:var(--muted)}
.otp{display:flex;gap:10px}.otp span{width:62px;height:66px;border-radius:16px;background:#fff;box-shadow:inset 0 0 0 1.5px var(--line);display:flex;align-items:center;justify-content:center;font-family:'Unbounded';font-size:26px;font-weight:600}
.otp span.cur{box-shadow:inset 0 0 0 2px var(--ink)}
.otp span.cur::after{content:'';width:2px;height:28px;background:var(--coral);animation:bl 1s steps(1) infinite}
@keyframes bl{50%{opacity:0}}
.kbd{flex:none;background:#D9D4DC;padding:8px 4px 30px;display:grid;grid-template-columns:repeat(3,1fr);gap:7px 6px}
.kbd span{background:#fff;border-radius:7px;height:46px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:24px;box-shadow:0 1px 0 rgba(0,0,0,.25)}
.kbd span small{font-size:9.5px;letter-spacing:.15em;font-weight:600;margin-top:-2px}
.kbd span.k0{background:transparent;box-shadow:none}
.mapbox{height:240px;border-radius:22px;overflow:hidden;position:relative;box-shadow:var(--sh)}
.sticker{border-radius:18px;background:#fff;box-shadow:inset 0 0 0 1.5px var(--line);height:92px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;font-size:13px;font-weight:600;cursor:pointer}
.sticker.on{box-shadow:inset 0 0 0 2.5px var(--coral);background:#FFF1EA}
.meet{display:block;margin:0 20px 12px;overflow:hidden;padding:0}
.meet .mi{height:96px;display:flex;align-items:center;justify-content:center;gap:16px}
.meet .mb{padding:14px 16px 16px}
.dt{display:flex;flex-direction:column;align-items:center;justify-content:center;width:52px;height:56px;border-radius:14px;background:var(--peach);flex:none}
.dt b{font-family:'Unbounded';font-size:19px;line-height:1}.dt span{font-size:11px;font-weight:600;color:var(--muted);margin-top:4px;text-transform:uppercase}
.kv{display:flex;gap:10px;align-items:flex-start;font-size:14.5px;line-height:1.4;padding:8px 0}.kv .ic{color:var(--muted);margin-top:-1px}
.kv small{display:block;color:var(--muted);font-size:12.5px}
body.bare .side{display:none}body.bare .stage{padding:0;display:block}
body.bare .device{width:390px;height:844px;padding:0;border-radius:0;background:none;box-shadow:none}
body.bare .device .viewport{border-radius:0}
/* v3: free text hints + districts */
.chip.hint{background:transparent;box-shadow:inset 0 0 0 1.5px #E9D9CC;color:#4A464E;height:34px;padding:0 12px 0 9px;font-size:13.5px}
.chip.hint.used{opacity:.45;pointer-events:none}
.hintlbl{font-size:12.5px;color:var(--muted);font-weight:600;margin:12px 0 8px}
.ban{display:flex;gap:8px;align-items:flex-start;font-size:12.5px;line-height:1.4;color:#7A5600;background:#FFF6D6;border-radius:12px;padding:9px 11px;margin-top:10px}
.ban svg{flex:none;margin-top:1px}
.dist{display:flex;align-items:center;gap:10px;padding:12px 14px;background:#fff;border-radius:16px;box-shadow:inset 0 0 0 1.5px var(--line)}
.dist .dn{flex:1;min-width:0}.dist .dn b{font-weight:700;font-size:15px;display:block}.dist .dn small{font-size:12.5px;color:var(--muted)}
.chip.zone.c-on{background:#FFE9DF}
.tagd{display:inline-flex;align-items:center;gap:3px;font-weight:600;color:var(--ink)}
.rq[hidden]{display:none}
