@font-face{font-family:Montserrat;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/montserrat-400-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Montserrat;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/montserrat-400-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Montserrat;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/montserrat-500-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Montserrat;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/montserrat-500-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Montserrat;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/montserrat-600-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Montserrat;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/montserrat-600-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Montserrat;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/montserrat-700-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Montserrat;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/montserrat-700-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Montserrat;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/montserrat-800-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Montserrat;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/montserrat-800-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg-primary:#fff;--bg-secondary:#fff;--bg-hover:#00000008;--text-primary:#000;--text-secondary:#707070;--text-tertiary:#8a8a93;--border:#00000017;--border-strong:#00000024;--shadow-sm:0 1px 2px #0000000a;--shadow-float:0 1px 3px #0000000a, 0 4px 16px #0000000f;--shadow-heavy:0 4px 24px #0000001f;--brand-strong:#a80742;--brand-deep:#6e0429;--brand-soft:#ee5c8c;--ink:#4a4a55;--ink-soft:#8a8a93;--mist:#c9c9cf;--brand:#db0955;--on-brand:#fff;--brand-bg:#fde8f0;--radius-card:16px;--radius-btn:12px;--radius-pill:10rem;--dock-margin:24px;--header-h:44px;--dock-top:calc(12px + var(--header-h) + var(--sp-5));--dock-mini-w:min(33vw, 520px);--dock-mini-h:50vh;--dock-x:var(--dock-margin);--dock-y:var(--dock-top);--dock-w:var(--dock-mini-w);--dock-h:var(--dock-mini-h);--dock-radius:18px;--dock-transition:.42s;--dock-ease:cubic-bezier(.2, .8, .3, 1);--pv-arrow:48px;--pv-arrow-clear:calc(var(--pv-arrow) + 2 * var(--sp-4));--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--sp-8:64px;--fs-display:40px;--fs-h1:28px;--fs-h2:20px;--fs-body:15px;--fs-sm:13px;--fs-xs:11px;--lh-tight:1.2;--lh-body:1.55;--crest-city:72px;--crest-region:112px;--t-fast:.16s;--t-base:.24s;--t-slow:.42s;--ease-out:cubic-bezier(.2, .8, .3, 1)}*{box-sizing:border-box;margin:0;padding:0}input,button,select,textarea{font-family:inherit}html,body,#root{height:100%;overflow:hidden}body{color:var(--text-primary);background:var(--bg-primary);font-family:Montserrat,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial,sans-serif}.app{height:100%;position:relative}.map-dock .map-container{position:absolute;inset:0}.map-container{width:100%;height:100%}.crest-slot{flex:none;place-items:center;display:grid}.crest-region{width:var(--crest-region);height:var(--crest-region)}.crest-city{width:var(--crest-city);height:var(--crest-city)}.crest-slot img{object-fit:contain;width:100%;min-width:0;height:100%;min-height:0;display:block}.crest-fallback{background:var(--brand-bg);width:100%;height:100%;color:var(--brand);font-size:var(--fs-h2);border-radius:var(--radius-btn);place-items:center;font-weight:600;display:grid}.loading-screen{z-index:200;background:var(--bg-primary);flex-direction:column;justify-content:center;align-items:center;transition:opacity .7s cubic-bezier(.4,0,.2,1);display:flex;position:fixed;inset:0;overflow:hidden}.loading-screen.hidden{opacity:0;pointer-events:none}.ls-scene{aspect-ratio:360/280;width:min(420px,78vw);margin-bottom:32px;position:relative}.ls-iso{filter:drop-shadow(0 8px 20px #4a4a551a);width:100%;height:100%;display:block;position:relative}.ls-bldg{opacity:0;transform-box:fill-box;animation:.7s cubic-bezier(.34,1.26,.64,1) forwards ls-bldg-rise;transform:translateY(16px)scale(.96)}@keyframes ls-bldg-rise{0%{opacity:0;transform:translateY(18px)scale(.94)}to{opacity:1;transform:translateY(0)scale(1)}}.ls-text-wrap{flex-direction:column;align-items:center;gap:8px;display:flex;position:relative}.ls-title{letter-spacing:6px;text-transform:uppercase;color:var(--ink);font-size:20px;font-weight:600}.ls-sub{color:var(--ink-soft);font-variant-numeric:tabular-nums;letter-spacing:1px;font-size:11px}.ls-bar{background:var(--mist);border-radius:2px;width:220px;height:2px;margin-top:10px;position:relative;overflow:hidden}.ls-bar-fill{background:linear-gradient(90deg, transparent, var(--brand-soft), var(--brand), transparent);width:40%;animation:2.2s cubic-bezier(.65,0,.35,1) infinite ls-bar-slide;position:absolute;top:0;bottom:0;left:0}@keyframes ls-bar-slide{0%{transform:translate(-100%)}to{transform:translate(250%)}}.loading-screen.is-transition .ls-bldg{opacity:1;animation:none;transform:none}@media (prefers-reduced-motion:reduce){.ls-bldg,.ls-bar-fill,.quest-wrap,.quest-wrap.status-concept{animation:none}.ls-bldg{opacity:1;transform:none}.ls-bar-fill{transform:translate(-100%)}}.header{z-index:100;pointer-events:none;position:fixed;top:12px;left:12px;right:12px}.header-inner{pointer-events:auto;justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.back-to-picker{align-items:center;gap:var(--sp-2);min-height:44px;padding:var(--sp-2) var(--sp-4);background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary);font-size:var(--fs-sm);cursor:pointer;box-shadow:var(--shadow-float);transition:border-color var(--t-fast) var(--ease-out);display:inline-flex}.back-to-picker:hover{border-color:var(--brand)}.back-to-picker:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.header-filters{flex-wrap:wrap;flex:1;align-items:center;gap:8px;min-width:0;display:flex}.header-right{flex-shrink:0;align-items:center;gap:8px;display:flex}.top-filter-btn{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-btn);box-shadow:var(--shadow-float);color:var(--text-primary);cursor:pointer;appearance:none;white-space:nowrap;background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%236b6b6b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 14px center;background-repeat:no-repeat;outline:none;padding:10px 36px 10px 22px;font-size:14px;font-weight:500;transition:border-color .15s,box-shadow .15s,background-color .15s}.top-filter-btn:hover{border-color:var(--border-strong);background-color:#fff}.top-filter-btn:focus{border-color:var(--brand);box-shadow:var(--shadow-float), 0 0 0 2px #db09551f}.top-filter-btn.active{border-color:var(--brand);background:var(--brand-bg)}.top-filter-btn option{color:var(--text-primary);background:#fff;font-size:13px}.login-btn{background:var(--brand-strong);border-radius:var(--radius-btn);cursor:pointer;color:#fff;border:none;align-items:center;gap:8px;padding:10px 20px;font-size:14px;font-weight:600;transition:all .15s;display:flex;box-shadow:0 2px 8px #db09554d}.login-btn:hover{background:var(--brand-strong);box-shadow:0 4px 14px #db095566}.user-btn{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-btn);cursor:pointer;color:var(--text-primary);box-shadow:var(--shadow-float);align-items:center;gap:6px;padding:10px 16px;font-size:13px;font-weight:500;transition:all .15s;display:flex}.user-btn:hover{background:var(--bg-hover);border-color:var(--border-strong)}.user-btn.logout{padding:10px}.user-menu{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-btn);box-shadow:var(--shadow-float);align-items:center;gap:8px;padding:6px 8px 6px 14px;display:flex}.user-info{align-items:center;gap:6px;display:flex}.user-name{font-size:13px;font-weight:500}.admin-badge{color:var(--brand)}.auth-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1000;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.auth-modal{background:var(--bg-secondary);width:360px;max-width:90vw;box-shadow:var(--shadow-heavy);border-radius:12px;padding:56px 28px 28px;position:relative}.auth-close{cursor:pointer;color:var(--text-tertiary);background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;min-width:44px;min-height:44px;padding:10px;display:flex;position:absolute;top:8px;right:8px}.auth-close:hover{background:var(--bg-hover);color:var(--text-primary)}.auth-tabs{background:var(--bg-hover);border-radius:var(--radius-btn);gap:4px;margin-bottom:20px;padding:3px;display:flex}.auth-tab{white-space:nowrap;cursor:pointer;min-height:40px;color:var(--text-secondary);background:0 0;border:none;border-radius:4px;flex:1;justify-content:center;align-items:center;gap:6px;padding:8px;font-size:13px;font-weight:500;transition:all .15s;display:flex}.auth-tab.active{background:var(--bg-secondary);color:var(--text-primary);box-shadow:var(--shadow-sm)}.auth-form{flex-direction:column;gap:10px;display:flex}.auth-input{border:1px solid var(--border);border-radius:var(--radius-btn);outline:none;min-height:44px;padding:12px 14px;font-family:inherit;font-size:14px;transition:border-color .15s}.auth-input:focus{border-color:var(--brand-strong)}.auth-submit{background:var(--brand-strong);color:#fff;border-radius:var(--radius-btn);cursor:pointer;border:none;min-height:44px;padding:13px;font-size:14px;font-weight:600;transition:opacity .15s}.auth-submit:hover{opacity:.9}.auth-submit:disabled{opacity:.5;cursor:not-allowed}.auth-error{color:var(--brand-deep);font-size:13px}.auth-success{color:var(--brand-strong);font-size:13px}.auth-tab--plz.active{background:var(--brand-bg);color:var(--brand)}.plz-idle{flex-direction:column;gap:12px;display:flex}.plz-logo-row{align-items:center;gap:12px;display:flex}.plz-shield{color:var(--brand);flex-shrink:0}.plz-title{color:var(--text-primary);margin:0;font-size:15px;font-weight:600}.plz-subtitle{color:var(--text-tertiary);margin:0;font-size:12px}.plz-description{color:var(--text-secondary);margin:0;font-size:13px;line-height:1.5}.plz-center{flex-direction:column;align-items:center;gap:12px;padding:16px 0;display:flex}.plz-loading-text{color:var(--text-secondary);font-size:13px}.plz-waiting{flex-direction:column;gap:14px;display:flex}.plz-qr-wrap{flex-direction:column;align-items:center;gap:8px;display:flex;position:relative}.plz-qr-img{border:2px solid var(--border);border-radius:var(--radius-btn);width:180px;height:180px;display:block}.plz-qr-label{color:var(--text-secondary);text-align:center;font-size:12px}.plz-qr-pulse{border:2px solid var(--brand);pointer-events:none;border-radius:12px;width:188px;height:188px;animation:2s ease-in-out infinite plz-pulse;position:absolute;top:-4px;left:50%;transform:translate(-50%)}@keyframes plz-pulse{0%,to{opacity:.25;transform:translate(-50%)scale(1)}50%{opacity:.7;transform:translate(-50%)scale(1.025)}}.plz-divider{color:var(--text-tertiary);align-items:center;gap:8px;font-size:12px;display:flex}.plz-divider:before,.plz-divider:after{content:"";background:var(--border);flex:1;height:1px}.plz-ott-form{flex-direction:column;gap:8px;display:flex}.plz-ott-input{text-align:center;letter-spacing:4px;font-size:20px;font-weight:600}.plz-retry-btn{border:1px solid var(--border);border-radius:var(--radius-btn);cursor:pointer;color:var(--text-secondary);background:0 0;align-items:center;gap:6px;padding:8px 16px;font-size:13px;transition:all .15s;display:flex}.plz-retry-btn:hover{border-color:var(--brand);color:var(--brand)}.plz-inline-btn{color:var(--brand);font-size:inherit;cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.plz-expired-banner{border-radius:var(--radius-btn);color:var(--brand);text-align:center;background:#d19a661a;border:1px solid #d19a664d;padding:10px 12px;font-size:13px}.plz-shield-success{color:var(--brand-strong)}.plz-success-text{color:var(--brand-strong);font-size:15px;font-weight:600}@keyframes plz-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.plz-spinner{color:var(--text-tertiary);animation:1s linear infinite plz-spin}.plz-spinner-inline{animation:1s linear infinite plz-spin;display:inline-block}@keyframes district-item-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.comment-reported{color:var(--brand-strong);align-items:center;gap:3px;font-size:11px;display:inline-flex}.comment-report-count{color:var(--brand-deep);align-items:center;gap:3px;font-size:11px;font-weight:600;display:inline-flex}.account-panel{padding:28px 24px 20px}.account-header{align-items:center;gap:14px;margin-bottom:18px;display:flex}.account-avatar{background:var(--brand-bg);width:56px;height:56px;color:var(--brand);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:20px;font-weight:700;display:flex;overflow:hidden}.account-avatar img{object-fit:cover;width:100%;height:100%}.account-name{color:var(--text-primary);font-size:17px;font-weight:700}.account-email{color:var(--text-tertiary);margin-top:2px;font-size:12px}.account-badges{flex-wrap:wrap;gap:6px;margin-top:6px;display:flex}.account-badge{border-radius:var(--radius-pill);background:var(--bg-primary);border:1px solid var(--border);color:var(--text-secondary);align-items:center;gap:4px;padding:3px 8px;font-size:11px;font-weight:600;display:inline-flex}.account-badge-plz{background:var(--brand-bg);border-color:var(--brand-soft);color:var(--brand-strong)}.account-badge-admin{color:var(--brand)}.account-stats{gap:10px;margin-bottom:14px;display:flex}.account-stat{border-radius:var(--radius-btn);background:var(--bg-primary);border:1px solid var(--border);color:var(--text-secondary);flex:1;align-items:center;gap:7px;padding:10px 12px;font-size:13px;display:flex}.account-stat strong{color:var(--text-primary);font-size:15px}.account-projects{max-height:200px;margin-bottom:14px;overflow-y:auto}.account-project-row{text-align:left;border:1px solid var(--border);cursor:pointer;width:100%;color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;background:0 0;border-radius:8px;margin-bottom:4px;padding:8px 10px;font-size:13px;display:block;overflow:hidden}.account-project-row:hover{background:var(--bg-hover)}.account-logout-btn{border-radius:var(--radius-btn);background:var(--bg-primary);border:1px solid var(--border);cursor:pointer;width:100%;color:var(--text-secondary);justify-content:center;align-items:center;gap:7px;padding:10px;font-size:13px;font-weight:600;display:flex}.account-logout-btn:hover{border-color:var(--border-strong);color:var(--text-primary)}.user-info{cursor:pointer;background:0 0;border:none}.user-avatar{object-fit:cover;vertical-align:middle;border-radius:50%;width:24px;height:24px;margin-right:6px}.user-plz-badge{vertical-align:middle;width:16px;height:16px;margin-left:6px}.account-plz-logo{width:13px;height:13px}.plz-tab-logo{vertical-align:-3px;width:16px;height:16px}.plz-logo-img{width:32px;height:32px}.plz-logo-img-lg{width:40px;height:40px}.photo-upload{flex-direction:column;gap:8px;display:flex}.photo-upload-btn{background:var(--bg-primary);border:1px solid var(--border);cursor:pointer;color:var(--text-primary);border-radius:8px;align-self:flex-start;align-items:center;gap:6px;padding:8px 14px;font-size:13px;display:inline-flex}.photo-upload-btn:hover{border-color:var(--border-strong);background:var(--bg-hover)}.photo-upload-preview{object-fit:cover;border:1px solid var(--border);border-radius:8px;width:100%;height:120px}.pc-thumb{float:right;object-fit:cover;background:var(--bg-primary);border-radius:8px;width:56px;height:56px;margin:0 0 6px 8px}@keyframes card-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.project-card{animation:.25s ease-out backwards card-in}.project-card:nth-child(2){animation-delay:30ms}.project-card:nth-child(3){animation-delay:60ms}.project-card:nth-child(4){animation-delay:90ms}.project-card:nth-child(5){animation-delay:.12s}@media (prefers-reduced-motion:reduce){.project-card{animation:none}}.stat{text-align:center;flex:1}@keyframes pulse{0%,to{opacity:.6}50%{opacity:.3}}.project-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-card);cursor:pointer;margin-bottom:6px;padding:14px 16px;transition:background .15s,border-color .15s,box-shadow .15s;position:relative;overflow:hidden}.project-card:hover{background:var(--bg-hover);border-color:var(--border-strong)}.project-card.active{border-color:#db095580;box-shadow:0 0 0 2px #db095573}.pc-rank{color:#0000000a;font-variant-numeric:tabular-nums;font-size:22px;font-weight:700;position:absolute;top:12px;right:14px}.pc-top{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:5px;display:flex}.pc-status-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.pc-status-label{font-size:var(--fs-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.pc-name{overflow-wrap:anywhere;word-break:normal;-webkit-hyphens:auto;hyphens:auto;color:var(--text-primary);letter-spacing:-.1px;font-size:14px;font-weight:600;line-height:1.35}.pc-category{letter-spacing:.2px;text-transform:uppercase;border-radius:4px;padding:2px 7px;font-size:10px;font-weight:600}.pc-desc{color:var(--text-secondary);margin-bottom:10px;font-size:13px;line-height:1.5}.pc-footer{justify-content:space-between;align-items:center;display:flex}.pc-footer-left{align-items:center;gap:6px;display:flex}.vote-btn{border-radius:var(--radius-btn);cursor:pointer;background:var(--brand-bg);color:var(--brand-strong);border:1px solid #db095540;align-items:center;gap:4px;padding:5px 12px;font-size:12px;font-weight:600;transition:background .15s,border-color .15s;display:flex}.vote-btn:hover{background:#db095524;border-color:#db095566}.vote-btn.voted{background:#db095526;border-color:#db095580}.pc-cost{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.pc-model-badge{color:var(--brand);letter-spacing:.2px;background:#db09551a;border-radius:4px;padding:2px 6px;font-size:9px;font-weight:600}.placing-mode .map-container,.placing-mode .maplibregl-canvas{cursor:crosshair!important}.map-actions{z-index:100;left:50%;bottom:calc(var(--sp-5) + env(safe-area-inset-bottom,0px));gap:var(--sp-3);display:flex;position:fixed;transform:translate(-50%)}.map-action-btn{min-height:48px;padding:0 var(--sp-5);border-radius:var(--radius-pill);background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary);box-shadow:var(--shadow-float);font-size:var(--fs-body);cursor:pointer;white-space:nowrap;transition:border-color var(--t-fast) var(--ease-out), background var(--t-fast) var(--ease-out);font-weight:600}.map-action-btn:hover{border-color:var(--brand)}.map-action-btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.map-action-btn.is-primary{background:var(--brand-strong);border-color:var(--brand-strong);color:var(--bg-secondary)}.map-action-btn.is-primary:hover{background:var(--brand);border-color:var(--brand)}.placing-hint{z-index:100;left:50%;bottom:calc(var(--sp-5) + env(safe-area-inset-bottom,0px));align-items:center;gap:var(--sp-3);min-height:48px;padding:0 var(--sp-4) 0 var(--sp-5);border-radius:var(--radius-pill);background:var(--bg-secondary);border:1px solid var(--brand);box-shadow:var(--shadow-float);font-size:var(--fs-sm);color:var(--text-primary);display:flex;position:fixed;transform:translate(-50%)}.placing-hint button{min-height:44px;padding:0 var(--sp-4);border-radius:var(--radius-pill);border:1px solid var(--border);background:var(--bg-primary);color:var(--text-primary);font-size:var(--fs-sm);cursor:pointer}.placing-hint button:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (max-width:720px){.map-actions{left:var(--sp-4);right:var(--sp-4);flex-direction:column;transform:none}.map-action-btn{width:100%}.placing-hint{left:var(--sp-4);right:var(--sp-4);justify-content:space-between;transform:none}}.add-form{background:var(--bg-secondary);z-index:10;scrollbar-width:thin;scrollbar-color:#0000001a transparent;flex-direction:column;display:flex;position:absolute;inset:0;overflow-y:auto}.form-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:18px 20px 14px;display:flex}.form-header h3{color:var(--text-primary);letter-spacing:-.2px;margin:0;font-size:20px;font-weight:700}.form-header-close{border:1px solid var(--border);width:44px;height:44px;color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:8px;justify-content:center;align-items:center;font-size:18px;transition:background .12s,color .12s;display:flex}.form-header-close:hover{background:var(--bg-hover);color:var(--text-primary)}.form-body{flex:1;padding:20px}.form-hint{border-radius:var(--radius-card);color:var(--brand);background:#d9730d0f;border:1px solid #d9730d26;align-items:center;gap:8px;margin-bottom:16px;padding:10px 14px;font-size:12px;font-weight:500;display:flex}.form-hint.location-set{color:var(--brand-strong);background:#db09550f;border-color:#db095540}.form-hint-icon{flex-shrink:0;font-size:16px}.form-group{margin-bottom:14px}.form-group label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.6px;margin-bottom:5px;font-size:11px;font-weight:600;display:block}.form-group input,.form-group textarea,.form-group select{background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-btn);width:100%;color:var(--text-primary);outline:none;padding:10px 12px;font-size:13px;transition:border-color .15s,box-shadow .15s}.form-group input:focus,.form-group textarea:focus,.form-group select:focus{border-color:var(--brand);box-shadow:0 0 0 2px #db09551f}.form-group input::placeholder,.form-group textarea::placeholder{color:var(--text-tertiary)}.form-group textarea{resize:vertical;min-height:72px}.form-group select{cursor:pointer}.form-footer{border-top:1px solid var(--border);background:var(--bg-primary);padding:16px 20px}.form-actions{gap:8px;display:flex}.btn-submit{border-radius:var(--radius-btn);cursor:pointer;background:var(--brand-bg);color:var(--brand-strong);border:1px solid #db09554d;flex:1;padding:11px;font-size:14px;font-weight:600;transition:background .15s,border-color .15s}.btn-submit:hover{background:#db095524;border-color:#db095580}.btn-submit:disabled{opacity:.4;cursor:not-allowed}.btn-cancel{border-radius:var(--radius-btn);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;background:0 0;flex:none;padding:11px 20px;font-size:14px;transition:background .15s}.btn-cancel:hover{background:var(--bg-hover)}.form-error{color:var(--brand-deep);margin-bottom:10px;font-size:13px}.model-upload-area.has-file{border-style:solid;border-color:var(--ink);background:#6940a50a}.filename{color:var(--ink);font-weight:600}.temp-marker{background:var(--brand);border:3px solid #fff;border-radius:50%;width:24px;height:24px;position:relative;box-shadow:0 0 20px #ff6ec799,0 0 40px #ff6ec74d}.temp-marker:after{content:"";border:2px solid var(--brand);border-radius:50%;animation:1.5s ease-out infinite marker-ring;position:absolute;inset:-8px}@keyframes marker-ring{0%{opacity:1;inset:-4px}to{opacity:0;inset:-20px}}.quest-wrap{cursor:pointer;will-change:transform;flex-direction:column;align-items:center;transition:transform .15s;animation:2s ease-in-out infinite quest-bob;display:flex;position:relative}.maplibregl-marker:hover{z-index:20}.maplibregl-marker:has(.quest-selected){z-index:19}.quest-label{transform:translate(calc(-50% + var(--quest-shift,0px)), 4px);max-width:260px;padding:var(--sp-2) var(--sp-3);background:var(--bg-secondary);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--radius-btn);box-shadow:var(--shadow-float);font-size:var(--fs-sm);text-align:center;white-space:normal;opacity:0;pointer-events:auto;transition:opacity var(--t-fast) var(--ease-out) .12s, transform var(--t-fast) var(--ease-out) .12s;line-height:1.35;position:absolute;bottom:calc(100% + 6px);left:50%}.quest-wrap:hover .quest-label,.quest-wrap.quest-selected .quest-label{opacity:1;transform:translate(calc(-50% + var(--quest-shift,0px)), 0)}.quest-label.is-below{top:calc(100% + 6px);bottom:auto}@media (prefers-reduced-motion:reduce){.quest-label{transform:translate(calc(-50% + var(--quest-shift,0px)), 0);transition:none}}.quest-wrap:hover{transform:scale(1.15)}.quest-wrap.quest-selected{z-index:10;transform:scale(1.25)}.quest-wrap .quest-icon{color:#fff;border-radius:6px;justify-content:center;align-items:center;width:32px;height:32px;font-size:22px;font-weight:900;line-height:1;display:flex;box-shadow:0 1px 3px #0000002e}.quest-wrap .quest-icon>svg{flex-shrink:0;width:18px;height:18px;display:block}.quest-wrap .quest-dot{border-top:8px solid #000;border-left:6px solid #0000;border-right:6px solid #0000;width:0;height:0}.quest-wrap .quest-pole{background:#00000026;width:2px;height:12px}@keyframes quest-bob{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.quest-wrap.status-voting .quest-icon{background:var(--status-voting)}.quest-wrap.status-voting .quest-dot{border-top-color:var(--brand)}.quest-wrap.status-voting .quest-pole{background:linear-gradient(180deg, var(--brand) 0%, transparent 100%)}.quest-wrap.status-proposed .quest-icon,.quest-wrap.status-approved .quest-icon{background:var(--brand)}.quest-wrap.status-proposed .quest-dot,.quest-wrap.status-approved .quest-dot{border-top-color:var(--brand)}.quest-wrap.status-proposed .quest-pole,.quest-wrap.status-approved .quest-pole{background:linear-gradient(180deg, var(--brand) 0%, transparent 100%)}.quest-wrap.status-in-progress .quest-icon{background:var(--status-in_progress)}.quest-wrap.status-in-progress .quest-dot{border-top-color:var(--brand)}.quest-wrap.status-in-progress .quest-pole{background:linear-gradient(180deg, var(--brand) 0%, transparent 100%)}.quest-wrap.status-completed .quest-icon{background:var(--status-completed)}.quest-wrap.status-completed .quest-dot{border-top-color:var(--brand-strong)}.quest-wrap.status-completed .quest-pole{background:linear-gradient(180deg, var(--brand-strong) 0%, transparent 100%)}.quest-wrap.status-concept .quest-icon{background:linear-gradient(135deg, var(--ink), var(--ink));border:2px dashed #ffffff80;border-radius:50%}.quest-wrap.status-concept .quest-dot{border-top-color:var(--ink)}.quest-wrap.status-concept .quest-pole{background:linear-gradient(180deg, var(--ink) 0%, transparent 100%)}.quest-wrap.status-concept{animation:2.5s ease-in-out infinite concept-pulse}@keyframes concept-pulse{0%,to{opacity:.85;transform:translateY(0)}50%{opacity:1;transform:translateY(-10px)}}.quest-wrap.status-rejected .quest-icon{background:var(--status-rejected)}.quest-wrap.status-rejected .quest-dot{border-top-color:var(--brand-deep)}.quest-wrap.status-rejected .quest-pole{background:linear-gradient(180deg, var(--brand-deep) 0%, transparent 100%)}.district-name-marker{border-radius:var(--radius-btn);color:var(--text-primary);white-space:nowrap;pointer-events:none;z-index:40;background:#fffffff5;padding:7px 14px;font-size:15px;font-weight:700;box-shadow:0 2px 14px #00000038,0 0 0 1px #0000000f}.model-preview-container{background:linear-gradient(135deg, #000 0%, var(--ink) 100%);width:100%;height:240px;position:relative;overflow:hidden}.model-preview-container canvas{display:block;width:100%!important;height:100%!important}.model-interact-hint{color:#fff6;pointer-events:none;-webkit-backdrop-filter:blur(8px);letter-spacing:.3px;background:#00000059;border-radius:8px;padding:4px 12px;font-size:10px;position:absolute;bottom:10px;left:50%;transform:translate(-50%)}.edit-form{padding:0}.edit-form form{flex-direction:column;gap:0;display:flex}.edit-form .form-group{margin-bottom:14px}.edit-form .form-actions{gap:8px;margin-top:8px;display:flex}.model-upload-section{width:100%}.model-upload-area{border:1px dashed var(--border-strong);border-radius:var(--radius-btn);text-align:center;cursor:pointer;background:var(--bg-primary);color:var(--text-tertiary);padding:24px;transition:background .15s,border-color .15s}.model-upload-area:hover{background:var(--bg-hover);border-color:var(--ink)}.model-upload-area.drag-over{border-color:var(--ink);background:#6940a50f;border-style:solid}.model-upload-area p{margin-top:6px;font-size:12px}.model-upload-area strong{color:var(--ink)}.upload-hint{color:var(--text-tertiary);font-size:11px!important}.upload-loading{flex-direction:column;align-items:center;gap:8px;display:flex}.upload-spinner{color:var(--ink);animation:1s linear infinite spin}.upload-error{color:var(--brand-deep);text-align:center;margin-top:8px;font-size:12px}.upload-hint-login{color:var(--text-tertiary);text-align:center;margin-top:6px;font-size:11px}.maplibregl-ctrl-group{border-radius:var(--radius-btn)!important}.inline-error{border-radius:var(--radius-btn);color:var(--brand-deep);background:#e03e3e14;border:1px solid #e03e3e33;align-items:center;gap:8px;margin:0 14px 8px;padding:10px 14px;font-size:13px;display:flex}.inline-error-retry{border-radius:var(--radius-btn);color:var(--brand-deep);cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #e03e3e4d;align-items:center;gap:4px;margin-left:auto;padding:4px 10px;font-size:12px;font-weight:600;display:flex}.inline-error-retry:hover{background:#e03e3e1a}.districts-error{z-index:150;background:var(--bg-primary);box-shadow:var(--shadow-float);margin:0;position:fixed;top:72px;left:50%;transform:translate(-50%)}@media (max-width:768px){.header{left:8px;right:8px;top:calc(8px + env(safe-area-inset-top,0px))}.header-inner{flex-wrap:nowrap;gap:6px}.header-filters{flex:1;gap:4px;min-width:0}.header-right{flex:none;gap:4px}.user-name{display:none}.user-info,.user-btn,.login-btn,.lang-toggle-btn{min-width:44px;min-height:44px}.back-to-picker{min-height:44px}.app-legal-footer{padding:6px 0}.app-legal-footer a{min-height:44px;padding:12px 6px;display:inline-block}.maplibregl-ctrl.maplibregl-ctrl-group button{width:44px;height:44px}.maplibregl-ctrl button .maplibregl-ctrl-icon{background-size:20px 20px}.project-card{padding:10px}.map-actions,.placing-hint{bottom:calc(64px + env(safe-area-inset-bottom,0px))}.poi-panel-fab{bottom:calc(64px + env(safe-area-inset-bottom,0px));min-height:44px}.map-actions.is-shifted,.placing-hint.is-shifted{bottom:calc(62vh + 12px + env(safe-area-inset-bottom,0px))}.auth-modal{width:95vw;max-width:400px}.comment-input{font-size:14px}}.cadastral-status{z-index:100;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-float);pointer-events:none;padding:10px 20px;font-size:13px;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.cadastral-loading{color:var(--brand)}.cadastral-error{color:var(--brand-deep)}.cadastral-popup{color:var(--text-primary);font-size:13px;line-height:1.5}.cadastral-popup-title{border-bottom:1px solid var(--border);color:var(--brand);margin-bottom:8px;padding-bottom:6px;font-size:15px;font-weight:700}.cadastral-popup-row{margin-bottom:3px}.cadastral-popup-row strong{color:var(--text-secondary);font-weight:500}.cadastral-popup-hint{color:var(--text-tertiary);margin-top:8px;font-size:11px}.comments-section{border-top:1px solid var(--border);margin-top:24px;padding-top:20px}.comments-header{color:var(--text-primary);align-items:center;gap:6px;margin-bottom:14px;font-size:14px;font-weight:600;display:flex}.comment-form{flex-direction:column;gap:8px;margin-bottom:16px;display:flex}.comment-input{border:1px solid var(--border);border-radius:var(--radius-btn);width:100%;color:var(--text-primary);background:var(--bg-secondary);resize:vertical;min-height:48px;padding:10px 12px;font-family:inherit;font-size:13px;line-height:1.5}.comment-input:focus{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-bg);outline:none}.comment-submit-btn{color:#fff;background:var(--brand-strong);border-radius:var(--radius-btn);cursor:pointer;border:none;align-self:flex-end;align-items:center;gap:5px;padding:6px 14px;font-family:inherit;font-size:12px;font-weight:600;transition:opacity .15s;display:flex}.comment-submit-btn:disabled{opacity:.4;cursor:not-allowed}.comment-auth-banner{color:var(--text-secondary);background:var(--bg-hover);border-radius:var(--radius-btn);text-align:center;margin-bottom:14px;padding:10px 14px;font-size:13px}.comments-loading{color:var(--text-tertiary);padding:8px 0;font-size:12px}.comments-list{flex-direction:column;gap:12px;display:flex}.comment-item{gap:10px;display:flex}.comment-avatar{background:var(--brand-bg);width:28px;height:28px;color:var(--brand);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:flex;overflow:hidden}.comment-avatar img{object-fit:cover;width:100%;height:100%}.comment-body{flex:1;min-width:0}.comment-meta{align-items:center;gap:8px;margin-bottom:2px;display:flex}.comment-author{color:var(--text-primary);font-size:12px;font-weight:600}.comment-time{color:var(--text-tertiary);font-size:11px}.comment-delete-btn{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:3px;align-items:center;margin-left:auto;padding:2px;display:flex}.comment-delete-btn:hover{color:var(--brand-deep);background:#e03e3e14}.comment-content{color:var(--text-primary);word-break:break-word;font-size:13px;line-height:1.5}.embed-mode .loading-screen{display:none}.embed-badge{z-index:100;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--text-secondary);background:#ffffffeb;border:1px solid #00000014;border-radius:8px;align-items:center;gap:4px;padding:6px 12px;font-size:12px;text-decoration:none;transition:background .15s;display:flex;position:fixed;top:10px;right:10px}.embed-badge:hover{background:#fff;border-color:#00000026}.embed-badge-count{color:var(--brand-strong);font-weight:700}.embed-city-select{z-index:100;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--text-primary);cursor:pointer;appearance:none;background:#fffffff2 url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%236b6b6b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") right 10px center no-repeat;border:1px solid #0000001a;border-radius:8px;outline:none;max-width:160px;padding:6px 28px 6px 12px;font-size:12px;font-weight:500;transition:border-color .15s,box-shadow .15s;position:fixed;top:10px;left:10px;box-shadow:0 1px 3px #0000000f}.embed-city-select:hover{background-color:#fff;border-color:#0000002e}.embed-city-select:focus{border-color:var(--brand);box-shadow:0 0 0 2px #db095526}button:not(:disabled):active{scale:.96}button:disabled{cursor:not-allowed}.project-card{will-change:translate;transition:translate .22s cubic-bezier(.16,1,.3,1),scale .1s ease-out,background .18s,border-color .18s,box-shadow .22s;animation:.5s cubic-bezier(.16,1,.3,1) backwards pc-enter}@keyframes pc-enter{0%{opacity:0;translate:24px}to{opacity:1;translate:0}}.project-card:hover{translate:0 -1px;box-shadow:0 6px 20px #0000000d,0 1px 3px #00000008}.project-card:active{transition:scale 80ms ease-out;scale:.99}.map-action-btn{transition:scale .1s ease-out,background .18s,border-color .18s}.map-action-btn:active{scale:.97}.vote-btn{transition:scale .1s ease-out,background .18s,border-color .18s,color .18s}.vote-btn:active{scale:.92}.auth-overlay{animation:.22s ease-out overlay-in}.auth-modal,.add-form{animation:.28s cubic-bezier(.16,1,.3,1) modal-in}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}@keyframes modal-in{0%{opacity:0;translate:0 12px;scale:.985}to{opacity:1;translate:0;scale:1}}@media (prefers-reduced-motion:reduce){.project-card,.map-action-btn,.auth-modal,.add-form,.auth-overlay{animation:none!important}.project-card:hover,.project-card:active,.map-action-btn:active,.vote-btn:active,button:not(:disabled):active{translate:0!important;scale:1!important}}.poi-marker{--poi-color:var(--ink-soft);cursor:pointer;width:24px;height:24px;transition:transform .16s,box-shadow .16s}.poi-marker:hover{transform:scale(1.2)}.poi-marker .poi-icon{background:var(--poi-color);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;display:flex;box-shadow:0 1px 3px #00000040,0 0 0 2px #ffffffeb}.poi-marker .poi-icon>svg{width:14px;height:14px;display:block}.poi-popup{min-width:160px;max-width:260px;padding:4px;font-size:12px;line-height:1.4}.poi-popup strong{color:var(--text-primary);margin-bottom:2px;font-size:13px;display:block}.poi-popup-cat{color:var(--text-secondary);margin-bottom:4px;font-size:11px}.poi-popup-addr{color:var(--ink)}.poi-popup-phone,.poi-popup-web{color:var(--ink);margin-top:2px}.poi-popup a{color:var(--brand);text-decoration:none}.poi-popup a:hover{text-decoration:underline}.poi-panel{z-index:5;pointer-events:none;font-size:12px;position:fixed;bottom:14px;left:14px}.poi-panel.is-open .poi-panel-body,.poi-panel-fab{pointer-events:auto}.poi-panel .inline-error{pointer-events:auto;background:var(--bg-primary);box-shadow:var(--shadow-float);margin:0}.poi-panel-fab{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:var(--radius-pill);color:var(--text-primary);font:inherit;cursor:pointer;background:#fffdf8f5;border:1px solid #0000000f;align-items:center;gap:8px;padding:10px 14px;transition:transform .16s,box-shadow .16s;display:inline-flex;box-shadow:0 4px 18px #3c32281f,0 1px 2px #0000000a}.poi-panel-fab:hover{transform:translateY(-1px);box-shadow:0 6px 22px #3c322829,0 1px 2px #0000000f}.poi-panel-fab-label{font-weight:500}.poi-panel-fab-badge{border-radius:var(--radius-pill);background:var(--brand);color:#fff;text-align:center;min-width:20px;padding:2px 6px;font-size:11px;font-weight:600}.poi-panel-body{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffdf8f7;border-radius:12px;flex-direction:column;min-width:240px;max-width:300px;max-height:min(60vh,500px);padding:10px 12px;animation:.18s cubic-bezier(.2,.8,.3,1) poi-panel-in;display:flex;box-shadow:0 8px 28px #3c32282e,0 0 0 1px #0000000a}@keyframes poi-panel-in{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.poi-panel-header-actions{align-items:center;gap:10px;display:inline-flex}.poi-panel-close{appearance:none;color:var(--ink-soft);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:20px;line-height:1}.poi-panel-close:hover{color:var(--text-primary)}.poi-panel-header{color:var(--ink);border-bottom:1px solid #00000014;justify-content:space-between;align-items:center;margin-bottom:6px;padding-bottom:6px;font-weight:600;display:flex}.poi-panel-toggle-all{color:var(--brand);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:10.5px}.poi-panel-toggle-all:hover{text-decoration:underline}.poi-panel-list{flex-direction:column;gap:2px;max-height:360px;display:flex;overflow-y:auto}.poi-panel-row{cursor:pointer;border-radius:4px;align-items:center;gap:6px;padding:4px 2px;display:flex}.poi-panel-row:hover{background:#0000000a}.poi-panel-row.on{color:var(--text-primary);font-weight:500}.poi-panel-row input[type=checkbox]{cursor:pointer;margin:0}.poi-panel-swatch{border-radius:3px;flex-shrink:0;width:12px;height:12px;box-shadow:0 0 0 1px #00000014}.poi-panel-name{color:var(--ink);flex:1}.poi-panel-count{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:10.5px}@media (max-width:720px){.poi-panel{font-size:11px;bottom:74px;left:8px}.poi-panel-body{min-width:220px;max-width:88vw;max-height:52vh}}.map-dock{z-index:0;contain:paint;opacity:0;visibility:hidden;transition:none;position:fixed;overflow:hidden}.dock-morph .map-dock{transition:inset var(--dock-transition) var(--dock-ease), border-radius var(--dock-transition) var(--dock-ease), box-shadow var(--dock-transition) var(--dock-ease)}.map-dock.is-full{box-shadow:none;border-radius:0;inset:0}.map-dock.is-mini{top:var(--dock-y);left:var(--dock-x);right:calc(100vw - var(--dock-x) - var(--dock-w));bottom:calc(100vh - var(--dock-y) - var(--dock-h));border-radius:var(--dock-radius);box-shadow:var(--shadow-heavy);z-index:95;transform:translate3d(0, var(--dock-shift-y,0px), 0);will-change:transform}@media (prefers-reduced-motion:reduce){.map-dock,.dock-morph .map-dock{transition-duration:1ms}.pv-content{animation:none}}.map-dock.is-visible{opacity:1;visibility:visible}.map-dock.is-mini{visibility:hidden;opacity:0}.dock-slot-on .map-dock.is-mini.is-visible{visibility:visible;opacity:1}.map-dock.is-mini{pointer-events:none}.map-dock.is-mini .maplibregl-control-container,.map-dock.is-mini .quest-label{display:none}.entry-picker{z-index:300;background:var(--bg-primary);padding:var(--sp-5);justify-content:center;align-items:center;display:flex;position:fixed;inset:0;overflow-y:auto}.entry-picker.is-leaving{animation:entry-out var(--t-base) ease-in forwards}@keyframes entry-out{to{opacity:0}}.entry-inner{gap:var(--sp-6);flex-direction:column;width:100%;max-width:880px;display:flex}.entry-header{text-align:center;position:relative}.entry-header h1{font-size:var(--fs-display);line-height:var(--lh-tight);color:var(--text-primary);margin:0;font-weight:600}.entry-header p{font-size:var(--fs-body);color:var(--text-secondary);margin:var(--sp-2) 0 0}.entry-back{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-btn);width:44px;height:44px;color:var(--text-primary);cursor:pointer;transition:border-color var(--t-fast) var(--ease-out);place-items:center;display:grid;position:absolute;top:0;left:0}.entry-back:hover{border-color:var(--brand)}.entry-loading,.entry-error{text-align:center;font-size:var(--fs-body);color:var(--text-secondary)}.entry-error{color:var(--brand-deep);gap:var(--sp-3);justify-content:center;align-items:center;display:flex}.entry-error button{border:1px solid var(--brand);border-radius:var(--radius-btn);color:var(--brand);padding:var(--sp-2) var(--sp-3);cursor:pointer;font-size:var(--fs-sm);background:0 0}.entry-region-grid{gap:var(--sp-5);grid-template-columns:repeat(2,1fr);display:grid}.entry-region-tile,.city-tile{justify-content:center;align-items:center;gap:var(--sp-3);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-float);cursor:pointer;transition:border-color var(--t-fast) var(--ease-out), transform var(--t-fast) var(--ease-out);flex-direction:column;display:flex}.entry-region-tile{height:320px}.city-tile{height:168px}.entry-region-tile:hover:not(:disabled),.city-tile:hover:not(:disabled){border-color:var(--brand);transform:translateY(-3px)}.entry-region-tile:focus-visible,.city-tile:focus-visible,.entry-back:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.entry-region-tile:disabled,.city-tile:disabled{cursor:default;opacity:.55}.entry-region-name{font-size:var(--fs-h1);color:var(--text-primary);font-weight:600}.entry-region-sub{font-size:var(--fs-sm);color:var(--text-secondary)}.city-tile-name{font-size:var(--fs-body);color:var(--text-primary);font-weight:600}.entry-city-grid{gap:var(--sp-4);grid-template-columns:repeat(auto-fill,minmax(200px,1fr));display:grid}.entry-city-grid .city-tile{opacity:0;animation:entry-tile-in var(--t-base) var(--ease-out) forwards}@keyframes entry-tile-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.city-tile.is-confirmed{animation:entry-tile-confirm .4s var(--ease-out) forwards;border-color:var(--brand)}@keyframes entry-tile-confirm{0%{transform:scale(1)}40%{transform:scale(1.04)}to{transform:scale(1)}}@media (max-width:720px){.entry-region-grid{grid-template-columns:1fr}.entry-region-tile{height:220px}.entry-region-tile .crest-region{width:88px;height:88px}.entry-city-grid{grid-template-columns:repeat(2,1fr)}.city-tile{height:140px}.crest-city{width:48px;height:48px}.entry-header h1{font-size:var(--fs-h1)}}@media (prefers-reduced-motion:reduce){.entry-picker.is-leaving{animation:none}.entry-region-tile,.city-tile{transition:none}.entry-region-tile:hover:not(:disabled),.city-tile:hover:not(:disabled){transform:none}.entry-city-grid .city-tile{opacity:1;animation:none}.city-tile.is-confirmed{animation:none}}.legal-overlay{z-index:3000;background:#0a0c148c;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.legal-panel{background:var(--panel-bg,#fff);color:var(--text-primary);border-radius:16px;width:100%;max-width:720px;max-height:86vh;padding:28px 32px 36px;position:relative;overflow-y:auto;box-shadow:0 24px 64px #00000059}.legal-close{float:right;cursor:pointer;color:inherit;background:0 0;border:none;min-width:44px;min-height:44px;padding:4px;position:sticky;top:0}.legal-nav{flex-wrap:wrap;gap:16px;margin-bottom:8px;display:flex}.legal-nav a{color:inherit;opacity:.65;padding:6px 0;font-size:14px;text-decoration:none}.legal-nav a.active{opacity:1;font-weight:600;text-decoration:underline}.legal-nav a:hover,.legal-nav a:focus-visible{opacity:1;text-decoration:underline}.legal-doc h1{margin:8px 0 4px;font-size:22px}.legal-doc h2{margin:20px 0 6px;font-size:15px}.legal-doc p,.legal-doc li{font-size:13.5px;line-height:1.55}.legal-doc ul{padding-left:20px}.legal-doc a{color:inherit;text-decoration:underline}.legal-updated{opacity:.6;font-size:12px!important}.app-legal-footer{gap:var(--sp-3);z-index:5;opacity:.7;background:#ffffffbf;border-radius:6px;padding:2px 8px;font-size:10.5px;display:flex;position:fixed;bottom:4px;left:10px}.app-legal-footer a{color:inherit}.app-legal-footer:hover,.app-legal-footer:focus-within{opacity:1}.auth-consent{opacity:.75;text-align:center;margin-top:10px;font-size:11.5px}.auth-consent a{color:inherit;text-decoration:underline}.results-status-list{flex-direction:column;gap:6px;display:flex}.results-status-row{grid-template-columns:110px 1fr 70px;align-items:center;gap:10px;font-size:13px;display:grid}.results-bar-track{background:#00000012;border-radius:4px;height:10px;overflow:hidden}.results-bar{border-radius:4px;height:100%}.results-status-count{text-align:right;font-variant-numeric:tabular-nums}.results-top-list{padding-left:22px}.results-top-list li{justify-content:space-between;gap:12px;padding:3px 0;font-size:13px;display:flex}.results-top-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.results-top-votes{white-space:nowrap;font-variant-numeric:tabular-nums;opacity:.7}.results-export-btn{cursor:pointer;background:var(--ink);color:#fff;border:none;border-radius:8px;align-items:center;gap:8px;min-height:44px;margin-top:16px;padding:10px 18px;font-size:13px;display:inline-flex}.results-export-btn:hover{opacity:.88}.comment-item.is-hidden{opacity:.45}.comment-hidden-badge{text-transform:uppercase;letter-spacing:.04em;color:var(--brand-deep);background:#6e04291a;border-radius:4px;padding:1px 6px;font-size:10px}.login-toast{top:calc(env(safe-area-inset-top,0px) + 16px);z-index:1200;background:var(--brand-strong);color:#fff;border-radius:var(--radius-btn);max-width:calc(100vw - 32px);box-shadow:var(--shadow-heavy);align-items:center;gap:8px;padding:10px 16px;font-size:15px;font-weight:500;line-height:1.4;animation:.2s ease-out login-toast-in;display:flex;position:fixed;left:50%;transform:translate(-50%)}.login-toast svg{flex-shrink:0}.login-toast strong{font-weight:700}@keyframes login-toast-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.login-toast{animation:none}}.pc-origin{letter-spacing:.02em;border-radius:var(--radius-pill);white-space:nowrap;flex:none;padding:2px 7px;font-size:10px;font-weight:600}.pc-origin.official{background:var(--brand);color:#fff;border:1px solid var(--brand);text-transform:none;letter-spacing:0}.pc-origin.community{background:var(--brand-bg);color:var(--brand-strong);border:1px solid var(--brand-soft);text-transform:none;letter-spacing:0}.origin-choice{gap:8px;display:flex}.origin-option{text-align:left;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-btn);cursor:pointer;flex-direction:column;flex:1;gap:2px;min-height:44px;padding:10px 12px;display:flex}.origin-option:hover{border-color:var(--border-strong)}.origin-option.active{border-color:var(--brand);background:var(--brand-bg)}.origin-option-title{color:var(--text-primary);font-size:13px;font-weight:600}.origin-option-hint{color:var(--text-secondary);font-size:11px;line-height:1.35}@media (max-width:768px){.origin-choice{flex-direction:column}}.map-action-btn,.login-btn,.auth-submit,.results-export-btn,.lang-toggle-btn,.back-to-picker,.top-filter-btn,.pd-search,.auth-input,.comment-input{border-radius:var(--radius-btn)}.auth-modal,.legal-panel,.poi-panel-body,.project-card,.origin-option{border-radius:var(--radius-card)}h1,h2,h3,.ls-title{letter-spacing:-.01em;font-weight:800}.pc-name{font-weight:700}.pc-origin,.pc-category,.pc-model-badge{letter-spacing:.04em;text-transform:uppercase}.project-view{z-index:90;pointer-events:auto;position:fixed;inset:0;overflow:hidden auto}.pv-content{padding:var(--dock-top) var(--pv-arrow-clear) var(--sp-8);background:var(--bg-primary);min-height:100%;position:relative}.pv-close{top:var(--dock-top);right:var(--sp-4);border-radius:var(--radius-pill);background:var(--bg-secondary);width:44px;height:44px;box-shadow:var(--shadow-float);color:var(--text-primary);cursor:pointer;border:none;justify-content:center;align-items:center;display:flex;position:absolute}.pv-grid{gap:var(--sp-6);grid-template-columns:minmax(360px,480px) 1fr;align-items:start;display:grid}.pv-media{grid-area:1/1}.pv-col-main{grid-area:1/2}.pv-map-slot{grid-area:2/1}.pv-grid>.pv-comments{grid-area:2/2;margin-top:0}.pv-comments .comments-section{border-top:none;margin-top:0;padding-top:0}.pv-comments .comments-list{max-height:min(var(--dock-h), 60vh);overflow-y:auto}.pv-col-main .pv-section:first-of-type{margin-top:var(--sp-5)}.pv-description{max-width:68ch}.pv-map-slot{aspect-ratio:4/3;border-radius:var(--dock-radius);background:var(--bg-hover);cursor:zoom-in;border:none;width:100%;padding:0}.pv-map-slot:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (max-width:1279px){.pv-grid{grid-template-columns:1fr}.pv-media,.pv-col-main,.pv-map-slot{grid-area:auto/1}.pv-grid>.pv-comments{margin-top:var(--sp-7);grid-area:auto/1}.pv-comments .comments-list{max-height:none;overflow-y:visible}}.pv-media-stage{aspect-ratio:4/3;border-radius:var(--radius-card);background:var(--bg-hover);justify-content:center;align-items:center;width:100%;display:flex;overflow:hidden}.pv-media-stage>*{width:100%;height:100%}.pv-media-img{object-fit:cover}.pv-media-loading{background:var(--bg-hover)}.pv-media-upload{padding:var(--sp-4);justify-content:center;align-items:center;display:flex}.pv-media-empty{color:var(--mist);justify-content:center;align-items:center;display:flex}.pv-media-empty svg{width:48px;height:48px}.pv-media-stage:has(.pv-media-upload){background:var(--bg-hover);border:1px dashed var(--border-strong)}.pv-media-switch{gap:var(--sp-2);margin-top:var(--sp-3);display:flex}.pv-media-tab{border:2px solid var(--border);border-radius:var(--radius-btn);background:var(--bg-secondary);width:64px;height:64px;color:var(--text-secondary);font-size:var(--fs-sm);cursor:pointer;justify-content:center;align-items:center;padding:0;font-weight:700;display:flex;overflow:hidden}.pv-media-tab.is-active{border-color:var(--brand);color:var(--text-primary)}.pv-media-tab-thumb{object-fit:cover;width:100%;height:100%}.pv-meta{gap:var(--sp-3);margin-bottom:var(--sp-2);flex-wrap:wrap;display:flex}.pv-meta-item{font-size:var(--fs-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em}.pv-title-row{align-items:flex-start;gap:var(--sp-3);display:flex}.pv-title{font-size:var(--fs-h1);line-height:var(--lh-tight);font-weight:700}.pv-edit-btn{border:1px solid var(--border);border-radius:var(--radius-btn);background:var(--bg-secondary);width:44px;height:44px;color:var(--text-primary);cursor:pointer;flex:none;justify-content:center;align-items:center;display:flex}.pv-cost{margin-top:var(--sp-5);font-size:var(--fs-h2);font-weight:700}.pv-cost.is-unknown{font-size:var(--fs-body);color:var(--text-secondary);font-weight:400}.pv-cost-label{font-size:var(--fs-xs);color:var(--text-secondary)}.pv-vote{margin-top:var(--sp-5);align-items:center;gap:var(--sp-3);min-width:180px;height:48px;padding:0 var(--sp-5);border:1px solid var(--border-strong);border-radius:var(--radius-pill);background:var(--bg-secondary);color:var(--text-primary);font-size:var(--fs-body);cursor:pointer;display:inline-flex}.pv-vote.is-voted{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}.pv-vote:disabled{opacity:.6;cursor:default}.pv-vote-count{margin-left:auto;font-weight:700}.pv-vote-error{margin-top:var(--sp-2);color:var(--brand-deep);font-size:var(--fs-sm)}.pv-vote-readonly{margin-top:var(--sp-5);gap:var(--sp-3);font-size:var(--fs-body);display:flex}.pv-rows{margin-top:var(--sp-5);gap:var(--sp-2);display:grid}.pv-row{justify-content:space-between;gap:var(--sp-4);font-size:var(--fs-sm);display:flex}.pv-row dt{color:var(--text-secondary)}.pv-section{margin-top:var(--sp-7)}.pv-section-title{font-size:var(--fs-h2);margin-bottom:var(--sp-3);font-weight:700}.pv-description{font-size:var(--fs-body);line-height:var(--lh-body);white-space:pre-wrap}.project-drawer{z-index:90;position:fixed;inset:0;overflow-y:auto}.pd-content{background:var(--bg-primary);min-height:100%;padding:0 var(--sp-5) var(--sp-8)}.project-drawer.is-sheet{z-index:97;border-radius:var(--dock-radius) var(--dock-radius) 0 0;height:70vh;box-shadow:var(--shadow-heavy);animation:pd-sheet-in var(--t-base) var(--ease-out);inset:auto 0 0}.project-drawer.is-sheet .pd-content{border-radius:inherit}.project-drawer.is-sheet .pd-header{padding-top:var(--sp-4)}@keyframes pd-sheet-in{0%{transform:translateY(100%)}to{transform:translateY(0)}}@media (max-width:1023px){.project-drawer.is-sheet{height:85vh}}@media (prefers-reduced-motion:reduce){.project-drawer.is-sheet{animation:none}}.pd-header{z-index:1;background:var(--bg-primary);padding:var(--dock-top) 0 var(--sp-3);position:sticky;top:0}.pd-header-top{align-items:center;gap:var(--sp-3);display:flex}.pd-title{font-size:var(--fs-h2);font-weight:700}.pd-count{font-size:var(--fs-h2);color:var(--text-secondary)}.pd-close{border-radius:var(--radius-pill);background:var(--bg-secondary);width:44px;height:44px;box-shadow:var(--shadow-float);color:var(--text-primary);cursor:pointer;border:none;justify-content:center;align-items:center;margin-left:auto;display:flex}.pd-search{width:100%;height:44px;margin-top:var(--sp-3);padding:0 var(--sp-4);border:1px solid var(--border);border-radius:var(--radius-btn);background:var(--bg-secondary);color:var(--text-primary);font-size:var(--fs-body)}.pd-districts{gap:var(--sp-2);margin-top:var(--sp-3);padding-bottom:var(--sp-2);display:flex;overflow-x:auto}.pd-pill{align-items:center;gap:var(--sp-2);height:36px;padding:0 var(--sp-4);border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--bg-secondary);color:var(--text-primary);font-size:var(--fs-sm);white-space:nowrap;cursor:pointer;flex:none;display:inline-flex}.pd-pill.is-active{border-color:var(--brand);color:var(--brand-deep)}.pd-pill-count{color:var(--text-secondary)}.pd-stats{gap:var(--sp-4);margin-top:var(--sp-3);font-size:var(--fs-xs);color:var(--text-secondary);flex-wrap:wrap;display:flex}.pd-stats strong{color:var(--text-primary)}.pd-list{gap:var(--sp-3);margin-top:var(--sp-4);display:grid}.pd-list.is-loading{opacity:.5}.pd-empty{margin-top:var(--sp-6);gap:var(--sp-3);justify-items:start;display:grid}.pd-clear{height:44px;padding:0 var(--sp-5);border:1px solid var(--border);border-radius:var(--radius-btn);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer}@media (max-width:1023px){.pd-content{padding-left:var(--sp-4);padding-right:var(--sp-4)}}.add-project-layer{z-index:1000;width:min(520px, calc(100vw - 2 * var(--sp-4)));max-height:calc(100vh - 2 * var(--sp-5));background:var(--bg-secondary);border-radius:var(--radius-card);box-shadow:var(--shadow-heavy);padding:var(--sp-5);position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}.pv-arrow{z-index:96;width:var(--pv-arrow);height:var(--pv-arrow);border-radius:var(--radius-pill);background:var(--bg-secondary);box-shadow:var(--shadow-float);color:var(--text-primary);cursor:pointer;border:none;justify-content:center;align-items:center;display:flex;position:fixed;top:50%;transform:translateY(-50%)}.pv-arrow:disabled{opacity:.4;cursor:default}.pv-arrow-prev{left:var(--sp-4)}.pv-arrow-next{right:var(--sp-4)}.pv-content{animation:pv-enter var(--t-base) var(--ease-out) 80ms backwards}@keyframes pv-enter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}.project-view.is-embed{width:min(420px,100%);box-shadow:var(--shadow-heavy);inset:0 0 0 auto}.project-view.is-embed .pv-content{padding:var(--sp-6) var(--sp-4) var(--sp-6)}.project-view.is-embed .pv-grid{grid-template-columns:1fr}@media (max-width:1023px){.pv-content{padding-left:var(--sp-4);padding-right:var(--sp-4);padding-top:var(--dock-top);padding-bottom:calc(var(--sp-8) + 56px)}.pv-map-slot{aspect-ratio:auto;height:220px}.pv-arrow{border-top:1px solid var(--border);border-radius:0;width:50%;height:56px;position:fixed;top:auto;bottom:0;transform:none}.pv-arrow-prev{left:0}.pv-arrow-next{right:0}}.legal-links{gap:var(--sp-3);flex-wrap:wrap;display:inline-flex}.results-summary{gap:var(--sp-3);flex-wrap:wrap;display:flex}.app-crash{max-width:600px;padding:var(--sp-7);margin:80px auto}.app-crash-title{font-size:var(--fs-h1);margin-bottom:var(--sp-4)}.app-crash-text{color:var(--text-secondary);margin-bottom:var(--sp-4)}.app-crash-details{background:var(--bg-hover);padding:var(--sp-3);border-radius:var(--radius-btn);font-size:var(--fs-sm);overflow:auto}.app-crash-btn{margin-top:var(--sp-4);height:44px;padding:0 var(--sp-5);border-radius:var(--radius-btn);background:var(--brand);color:var(--on-brand);font-size:var(--fs-body);cursor:pointer;border:none;font-weight:600}.comment-error{align-items:center;gap:var(--sp-3);margin-top:var(--sp-2);color:var(--brand-deep);font-size:var(--fs-sm);display:flex}.comment-retry{height:32px;padding:0 var(--sp-3);border:1px solid var(--border);border-radius:var(--radius-btn);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer}.comment-retry:disabled{opacity:.5;cursor:default}
