.app{display:grid;grid-template-columns:250px 1fr;min-height:100vh}.side{position:-webkit-sticky;position:sticky;top:0;height:100vh;border-right:1px solid var(--line);background:rgba(4,16,9,.7);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);display:flex;flex-direction:column;padding:22px 16px}.side-logo{display:flex;align-items:center;gap:9px;padding:6px 8px 22px}.side-logo img{height:28px}.side-logo .tag{font-family:var(--display);font-size:11px;color:var(--ink-mute);border:1px solid var(--line);padding:2px 7px;border-radius:6px;margin-left:auto}.side-nav{display:flex;flex-direction:column;gap:4px}.side-nav .lbl{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);padding:14px 10px 6px}.nav-item{display:flex;align-items:center;gap:12px;padding:11px 12px;border-radius:11px;font-family:var(--display);font-weight:500;font-size:14.5px;color:var(--ink-soft);cursor:pointer;transition:background .2s,color .2s;border:1px solid transparent;text-decoration:none}.nav-item svg{width:19px;height:19px;flex:0 0 auto}.nav-item:hover{background:rgba(255,255,255,.04);color:var(--ink)}.nav-item.active{background:rgba(79,217,0,.12);color:var(--electric);border-color:var(--line-strong)}.side-user{margin-top:auto;gap:11px;padding:12px;border:1px solid var(--line);border-radius:14px}.side-user,.side-user .av{display:flex;align-items:center}.side-user .av{width:38px;height:38px;border-radius:50%;background:linear-gradient(140deg,var(--electric-deep),var(--electric));justify-content:center;font-family:var(--display);font-weight:700;color:#042800;flex:0 0 auto}.side-user .nm{font-size:13.5px;font-weight:600;font-family:var(--display)}.side-user .ro{font-size:11.5px;color:var(--ink-mute)}.side-user a{margin-left:auto;color:var(--ink-mute)}.main{min-width:0}.topbar{position:-webkit-sticky;position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:18px;padding:18px 34px;border-bottom:1px solid var(--line);background:rgba(4,16,9,.82);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.topbar h1{font-size:1.4rem}.topbar .crumb{font-size:12px;color:var(--ink-mute)}.topbar .back{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-soft)}.topbar .actions{gap:10px}.select,.topbar .actions{margin-left:auto;display:flex}.select{align-items:center;gap:9px;padding:10px 15px;border:1px solid var(--line);border-radius:11px;background:var(--bg-2);font-size:14px;font-family:var(--display);font-weight:500;cursor:pointer}.select svg{width:16px;height:16px;color:var(--ink-mute)}.select .dot{width:8px;height:8px;border-radius:50%;background:var(--electric);box-shadow:0 0 8px var(--electric)}.content{padding:30px 34px 60px}.badge{font-size:11.5px;font-weight:600;padding:5px 11px;border-radius:999px;display:inline-flex;align-items:center;gap:6px}.badge.done{color:var(--ink-soft);background:rgba(255,255,255,.06);border:1px solid var(--line)}.badge.live{color:var(--electric);background:rgba(79,217,0,.12);border:1px solid var(--line-strong)}.badge.live:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--electric);box-shadow:0 0 8px var(--electric);animation:pulse-glow 2s infinite}.mobile-top,.view{display:none}.view.active{display:block;animation:fade .4s var(--ease) both}@keyframes fade{0%{transform:translateY(10px)}to{transform:none}}.kgrid{display:grid;grid-template-columns:repeat(5,1fr);grid-gap:16px;gap:16px}.kcard{border:1px solid var(--line);border-radius:var(--r);padding:20px;background:var(--bg-1)}.kcard .top{justify-content:space-between}.kcard .ic,.kcard .top{display:flex;align-items:center}.kcard .ic{width:34px;height:34px;border-radius:10px;background:rgba(79,217,0,.1);justify-content:center;color:var(--electric)}.kcard .ic svg{width:17px;height:17px}.kcard .delta{font-size:12px;font-weight:600;padding:3px 8px;border-radius:999px}.kcard .delta.up{color:var(--electric);background:rgba(79,217,0,.12)}.kcard .v{font-family:var(--display);font-weight:800;font-size:2rem;margin-top:14px;line-height:1}.kcard .l{color:var(--ink-mute);font-size:13px;margin-top:7px}.panels{display:grid;grid-template-columns:1.6fr 1fr;grid-gap:16px;gap:16px;margin-top:16px}.panel{border:1px solid var(--line);border-radius:var(--r-lg);padding:22px 24px;background:var(--bg-1)}.panel h3{font-size:1.05rem}.panel .ph{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.panel .ph .mut{font-size:12.5px;color:var(--ink-mute)}.legend{display:flex;gap:16px;font-size:12px;color:var(--ink-soft)}.legend i{width:9px;height:9px;border-radius:2px;display:inline-block;margin-right:6px}.chart{width:100%;height:230px}.chart text{font-family:var(--body);font-size:11px;fill:var(--ink-mute)}.place{display:flex;align-items:center;gap:14px;padding:11px 0;border-bottom:1px solid var(--line)}.place:last-child{border-bottom:0}.place .rank{width:22px;font-family:var(--display);font-weight:700;color:var(--ink-mute);font-size:13px}.place .nm{width:150px;font-size:13.5px}.place .bar{flex:1 1;height:8px;border-radius:999px;background:rgba(255,255,255,.06);overflow:hidden}.place .bar span{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--electric-deep),var(--electric))}.place .val{width:38px;text-align:right;font-family:var(--display);font-weight:600;font-size:13.5px}.donut-wrap{display:flex;align-items:center;gap:24px}.donut{flex:0 0 auto}.age-leg{display:grid;grid-gap:10px;gap:10px;font-size:13px}.age-leg .it{display:flex;align-items:center;gap:10px;color:var(--ink-soft)}.age-leg .it i{width:11px;height:11px;border-radius:3px}.age-leg .it b{margin-left:auto;font-family:var(--display);color:var(--ink)}.tbl{width:100%;border-collapse:collapse}.tbl th{text-align:left;font-family:var(--display);font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-mute);padding:0 16px 14px;font-weight:600}.tbl td{padding:16px;border-top:1px solid var(--line);font-size:14px}.tbl tr.row{cursor:pointer;transition:background .2s}.tbl tr.row:hover{background:rgba(79,217,0,.05)}.tbl .arrow{color:var(--ink-mute)}.rep-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:16px;gap:16px}.rep{border:1px solid var(--line);border-radius:var(--r-lg);padding:24px;background:var(--bg-1)}.rep .ic{width:42px;height:42px;border-radius:12px;background:rgba(79,217,0,.1);display:flex;align-items:center;justify-content:center;color:var(--electric);margin-bottom:16px}.rep h4{font-size:1.1rem}.rep p{color:var(--ink-mute);font-size:13.5px;margin:8px 0 18px}@media (max-width:1100px){.kgrid{grid-template-columns:repeat(3,1fr)}.panels{grid-template-columns:1fr}.rep-grid{grid-template-columns:1fr 1fr}}@media (max-width:820px){.app{grid-template-columns:1fr}.side{display:none}.mobile-top{display:flex}.kgrid{grid-template-columns:1fr 1fr}.content{padding:22px 18px 50px}.topbar{padding:16px 18px}.rep-grid{grid-template-columns:1fr}.place .nm{width:110px}}.layout{display:grid;grid-template-columns:1.5fr 1fr;grid-gap:18px;gap:18px}.mapcard{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:var(--bg-1)}.maphead{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--line)}.maphead h3{font-size:1.05rem}.maplegend{display:flex;gap:14px;font-size:12px;color:var(--ink-soft)}.maplegend i{width:10px;height:10px;border-radius:50%;display:inline-block;margin-right:6px;vertical-align:middle}.mapview{position:relative;aspect-ratio:16/12;background:radial-gradient(circle at 30% 40%,rgba(79,217,0,.05),transparent 40%),linear-gradient(135deg,#06180d,#04120a)}.mapview svg{position:absolute;inset:0;width:100%;height:100%}.poi{position:absolute;transform:translate(-50%,-50%)}.poi .pin{width:var(--sz,26px);height:var(--sz,26px);border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--display);font-weight:700;font-size:11px;color:#042800;cursor:pointer;transition:transform .2s}.poi:hover .pin{transform:scale(1.2)}.poi.hot .pin{background:var(--electric);box-shadow:0 0 0 6px rgba(79,217,0,.18),0 0 20px rgba(79,217,0,.6)}.poi.warm .pin{background:#b6e84f;box-shadow:0 0 0 5px rgba(182,232,79,.14)}.poi.cold .pin{background:#2c5a3a;color:#9fc7a8;box-shadow:0 0 0 4px rgba(44,90,58,.2)}.poi .lab{position:absolute;left:50%;top:calc(100% + 6px);transform:translateX(-50%);white-space:nowrap;font-size:10.5px;color:var(--ink-soft);background:rgba(2,12,6,.8);padding:3px 7px;border-radius:6px;opacity:0;transition:opacity .2s;pointer-events:none}.poi:hover .lab{opacity:1}.scard{border:1px solid var(--line);border-radius:var(--r-lg);padding:20px 22px;background:var(--bg-1);margin-bottom:18px}.scard h3{font-size:1.02rem;margin-bottom:16px}.statline{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);font-size:13.5px}.statline:last-child{border-bottom:0}.statline .nm{flex:1 1;color:var(--ink-soft)}.statline .tag{font-size:10.5px;font-weight:600;padding:3px 8px;border-radius:999px}.tag.hot{color:var(--electric);background:rgba(79,217,0,.12)}.tag.cold{color:#9fc7a8;background:rgba(44,90,58,.25)}.statline .v{font-family:var(--display);font-weight:700;width:34px;text-align:right}.reco{display:flex;gap:13px;padding:14px 0;border-bottom:1px solid var(--line)}.reco:last-child{border-bottom:0}.reco .ic{flex:0 0 auto;width:32px;height:32px;border-radius:9px;background:rgba(79,217,0,.1);display:flex;align-items:center;justify-content:center;color:var(--electric)}.reco .ic svg{width:16px;height:16px}.reco b{font-family:var(--display);font-size:14px;display:block;margin-bottom:3px}.reco span{font-size:13px;color:var(--ink-mute)}.mini-kpi{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:14px;gap:14px;margin-bottom:18px}.mk{border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;background:var(--bg-1)}.mk .v{font-family:var(--display);font-weight:800;font-size:1.6rem;color:var(--electric)}.mk .l{font-size:12px;color:var(--ink-mute);margin-top:4px}@media (max-width:1000px){.layout{grid-template-columns:1fr}}@media (max-width:820px){.mini-kpi{grid-template-columns:1fr 1fr}}.login-wrap{min-height:100vh;display:grid;grid-template-columns:1.05fr .95fr}.login-aside{position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;padding:48px}.login-aside img.bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}.login-aside:after{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(3,17,10,.6),rgba(3,17,10,.92))}.login-aside>*{position:relative;z-index:2}.la-logo{display:flex;align-items:center;gap:10px}.la-logo img{height:32px}.la-quote h2{font-size:clamp(1.6rem,2.6vw,2.4rem);max-width:16ch}.la-quote p{color:var(--ink-soft);margin-top:14px;max-width:40ch}.la-mini{display:flex;gap:26px;margin-top:26px}.la-mini .n{font-family:var(--display);font-weight:800;font-size:1.6rem;color:var(--electric)}.la-mini .l{font-size:12.5px;color:var(--ink-mute)}.login-main{display:flex;align-items:center;justify-content:center;padding:40px 28px}.login-card{width:100%;max-width:400px}.login-card .back{font-size:13px;color:var(--ink-mute);display:inline-flex;gap:7px;align-items:center;margin-bottom:30px}.login-card h1{font-size:2rem}.login-card .sub{color:var(--ink-soft);margin:10px 0 30px}.login-card .field{margin-bottom:18px}.login-card .field label{display:block;font-size:13px;font-weight:500;color:var(--ink-soft);margin-bottom:8px;font-family:var(--display)}.login-card .field input{width:100%;padding:14px 16px;border-radius:12px;background:var(--bg-2);border:1px solid var(--line);color:var(--ink);font-family:var(--body);font-size:15px;transition:border-color .2s,box-shadow .2s}.login-card .field input:focus{outline:none;border-color:var(--electric);box-shadow:0 0 0 3px rgba(79,217,0,.15)}.login-card .field input::placeholder{color:var(--ink-mute)}.row-between{display:flex;justify-content:space-between;align-items:center;margin:-4px 0 22px}.row-between label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-soft);cursor:pointer}.row-between a{font-size:13px;color:var(--electric);font-weight:500}.login-card .btn{width:100%}.err{color:#ff8a6b;font-size:13px;margin-top:-8px;margin-bottom:14px;display:none}.err.show{display:block}.req{text-align:center;margin-top:26px;font-size:13.5px;color:var(--ink-mute)}.req a{color:var(--electric);font-weight:500}.demo-hint{margin-top:22px;padding:12px 14px;border:1px dashed var(--line-strong);border-radius:12px;font-size:12.5px;color:var(--ink-mute);text-align:center}@media (max-width:880px){.login-wrap{grid-template-columns:1fr}.login-aside{display:none}}