:root{--bg: #eef1f6;--panel: #ffffff;--panel2: #f4f6fa;--border: #e4e8f0;--border2: #d3dae6;--text: #1b2230;--muted: #5d6678;--faint: #98a0b0;--accent: #d99320;--accent-ink: #6a4a06;--accent-soft: #fbf0d7;--green: #1f9d57;--green-soft: #e3f6ea;--red: #d23f36;--red-soft: #fce7e5;--blue: #2f7fd1;--blue-soft: #e6f0fb;--radius: 14px;--shadow: 0 1px 2px rgba(20, 30, 50, .04), 0 4px 14px rgba(20, 30, 50, .05)}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{min-height:100%}body{background:var(--bg);color:var(--text);font-family:Segoe UI,system-ui,-apple-system,Roboto,sans-serif;font-size:15px;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit}.container{max-width:1180px;margin:0 auto;padding:0 20px}.page{padding:26px 0 60px}.nav{position:sticky;top:0;z-index:50;background:#ffffffe0;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border)}.nav-inner{display:flex;align-items:center;justify-content:space-between;height:62px;gap:10px}.brand{display:flex;align-items:center;gap:10px;font-weight:700;letter-spacing:.3px;font-size:16px;white-space:nowrap}.brand img{width:30px;height:30px}.brand .tag{color:var(--accent)}.nav-links{display:flex;gap:8px;align-items:center}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--border2);background:var(--panel);color:var(--text);border-radius:10px;padding:9px 16px;font-size:14px;font-weight:600;cursor:pointer;transition:all .12s ease;white-space:nowrap}.btn:hover{border-color:var(--accent);color:var(--accent)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{filter:brightness(1.06);color:#fff}.btn.danger{border-color:#eab9b5;color:var(--red)}.btn.danger:hover{border-color:var(--red)}.btn.green{border-color:#aee0c2;color:var(--green)}.btn.green:hover{border-color:var(--green)}.btn.big{padding:14px 26px;font-size:16px;border-radius:12px}.btn.sm{padding:5px 11px;font-size:12.5px;border-radius:8px}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.block{width:100%}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-bottom:14px;box-shadow:var(--shadow)}.card.dim{background:var(--panel2);box-shadow:none}.card-title{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:15px;font-weight:700;margin-bottom:14px;flex-wrap:wrap}.card-title .right{display:flex;align-items:center;gap:10px;font-weight:500;font-size:13px;color:var(--muted);flex-wrap:wrap}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}@media (max-width: 980px){.grid4,.grid3{grid-template-columns:1fr 1fr}}@media (max-width: 640px){.grid4,.grid3,.grid2{grid-template-columns:1fr}}.dot{width:9px;height:9px;border-radius:50%;background:var(--red);display:inline-block}.dot.on{background:var(--green);box-shadow:0 0 8px #1f9d5773}.dot.grey{background:var(--faint);box-shadow:none}.badge{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:3px 11px;font-size:12px;font-weight:600;border:1px solid var(--border2);color:var(--muted);background:var(--panel2)}.badge.green{background:var(--green-soft);border-color:#9fdcb8;color:#157a42}.badge.red{background:var(--red-soft);border-color:#efb3ae;color:#b5322a}.badge.amber{background:var(--accent-soft);border-color:#ecd09a;color:#9a6a10}.badge.blue{background:var(--blue-soft);border-color:#b3d2f0;color:#2467ad}.field{margin-bottom:14px}.field label{display:block;font-size:12.5px;font-weight:600;color:var(--muted);margin-bottom:6px;letter-spacing:.3px}.input,select.input,textarea.input{width:100%;background:var(--panel);border:1px solid var(--border2);color:var(--text);border-radius:10px;padding:10px 12px;font-size:14px;outline:none;transition:border-color .12s}.input:focus{border-color:var(--accent);box-shadow:0 0 0 3px #d993201f}.form-error{background:var(--red-soft);border:1px solid #efb3ae;color:#b5322a;border-radius:10px;padding:10px 12px;font-size:13px;margin-bottom:14px}.form-ok{background:var(--green-soft);border:1px solid #9fdcb8;color:#157a42;border-radius:10px;padding:10px 12px;font-size:13px;margin-bottom:14px}.form-warn{background:var(--accent-soft);border:1px solid #ecd09a;color:#9a6a10;border-radius:10px;padding:10px 12px;font-size:13px;margin-bottom:14px}.switch{display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.switch input{display:none}.switch .track{width:42px;height:24px;border-radius:999px;background:#cdd4e0;border:1px solid var(--border2);position:relative;transition:background .15s;flex-shrink:0}.switch .thumb{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;transition:all .15s;box-shadow:0 1px 3px #0003}.switch input:checked+.track{background:var(--green);border-color:var(--green)}.switch input:checked+.track .thumb{left:20px;background:#fff}.switch.dis{opacity:.45;cursor:not-allowed}.switch .lbl{font-size:13.5px;font-weight:600}.ebar{background:var(--panel2);border:1px solid var(--border2);border-radius:999px;height:14px;overflow:hidden}.ebar .fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--green),#d4b14b 70%,var(--red));transition:width .4s}.ebar-row{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-top:5px}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.tbl{width:100%;border-collapse:collapse;font-size:13.5px}.tbl th{text-align:left;color:var(--faint);font-size:11.5px;text-transform:uppercase;letter-spacing:.8px;padding:8px 10px;border-bottom:1px solid var(--border);white-space:nowrap}.tbl td{padding:10px;border-bottom:1px solid var(--border);vertical-align:middle}.tbl tr:last-child td{border-bottom:none}.tbl .actions{display:flex;gap:6px;flex-wrap:wrap}.shell{display:flex;min-height:100vh}.sidebar{width:232px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--border);padding:18px 12px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh}.sidebar .brand{padding:4px 10px 18px}.side-link{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;color:var(--muted);font-size:14px;font-weight:600;transition:all .1s}.side-link:hover{color:var(--text);background:var(--panel2)}.side-link.active{color:var(--accent);background:var(--accent-soft)}.side-link .ico{width:20px;text-align:center}.side-bottom{margin-top:auto;padding:10px;font-size:12px;color:var(--faint)}.main{flex:1;padding:26px 28px 70px;min-width:0}.main h2{font-size:20px;margin-bottom:4px}.main .sub{color:var(--muted);font-size:13px;margin-bottom:22px}.side-scroll{display:contents}.menu-toggle{display:none}@media (max-width: 860px){.shell{flex-direction:column}.sidebar{width:100%;height:auto;position:sticky;top:0;z-index:40;flex-direction:row;align-items:center;gap:6px;padding:10px 12px;overflow-x:auto;-webkit-overflow-scrolling:touch}.sidebar .brand{padding:4px 8px;font-size:14px}.side-link{padding:8px 11px;white-space:nowrap;flex-shrink:0}.side-link .ico{display:none}.side-bottom{margin-left:auto;padding:4px 8px;display:flex;align-items:center;gap:8px}.side-bottom b,.side-bottom br{display:none}.main{padding:18px 14px 70px}}.hero2{border-bottom:1px solid var(--border);padding:54px 0 44px;background:radial-gradient(900px 420px at 80% 0%,rgba(217,147,32,.1),transparent 60%)}.hero2-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:40px;align-items:center}.hero2 h1{font-size:42px;line-height:1.1;letter-spacing:.5px}.hero2 h1 .gold{color:var(--accent)}.hero2 .lead{color:var(--muted);max-width:560px;margin:14px 0 22px;font-size:16px;line-height:1.55}.hero2 .cta{display:flex;gap:12px;flex-wrap:wrap}.hero2-img{width:100%;height:auto;display:block;border-radius:16px;border:1px solid var(--border2);box-shadow:0 18px 44px #141e3224}.chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:22px}.chip{background:var(--panel);border:1px solid var(--border2);border-radius:999px;padding:6px 14px;font-size:12.5px;color:var(--muted);box-shadow:var(--shadow)}@media (max-width: 860px){.hero2{padding:24px 0 28px}.hero2-grid{grid-template-columns:1fr;gap:22px;text-align:center}.hero2 h1{font-size:28px}.hero2 .lead{font-size:15px;margin-left:auto;margin-right:auto}.hero2 .cta,.chips{justify-content:center}}.section{padding:46px 0 10px}.section h2{font-size:24px;margin-bottom:6px}.section .sub{color:var(--muted);margin-bottom:24px;font-size:14px}@media (max-width: 640px){.section{padding:30px 0 6px}.section h2{font-size:20px}}@media (max-width: 760px){.nav{position:static}.nav-inner{flex-direction:column;height:auto;padding:12px 0;gap:11px}.nav-inner>.row{justify-content:center;width:100%;gap:12px}.nav-links{justify-content:center;flex-wrap:wrap;width:100%}.nav-links .btn{flex:1;min-width:120px}.hero2 .cta .btn{flex:1}.section,.section .card{text-align:center}.pkg{align-items:center}.pkg .desc{text-align:center}}.pkg{display:flex;flex-direction:column;gap:10px;padding:22px;position:relative}.pkg .name{font-size:17px;font-weight:700}.pkg .price{font-size:30px;font-weight:800;color:var(--accent)}.pkg .price small{font-size:13px;color:var(--muted);font-weight:500}.pkg .desc{color:var(--muted);font-size:13.5px;line-height:1.5;flex:1}.pkg .kwh{font-size:13px;color:var(--green);font-weight:600}.pkg.selected{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}.areamap{position:relative;border-radius:var(--radius);overflow:hidden;border:1px solid var(--border)}.areamap img{width:100%;display:block}.marker{position:absolute;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:3px}.marker .pin{width:16px;height:16px;border-radius:50%;border:2.5px solid #fff;box-shadow:0 1px 6px #0009;cursor:default}.marker .pin.free{background:var(--green)}.marker .pin.occupied{background:var(--accent)}.marker .pin.maintenance{background:var(--red)}.marker .pin.spot{background:var(--blue)}.marker .tag2{background:#0b0d12d1;color:#fff;border-radius:6px;font-size:10.5px;padding:2px 7px;font-weight:700;white-space:nowrap}.thread{display:flex;flex-direction:column}.bubble{max-width:80%;padding:10px 14px;border-radius:14px;margin-bottom:8px;font-size:13.5px;line-height:1.55;white-space:pre-wrap;background:var(--panel2);border:1px solid var(--border);margin-right:auto}.bubble.staff{background:var(--accent-soft);border-color:#ecd09a;margin-left:auto;margin-right:0}.bubble .who{font-size:10.5px;color:var(--faint);margin-bottom:4px;font-weight:700;letter-spacing:.3px}@media (max-width: 640px){.bubble{max-width:92%}}.tiles{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}.tile{position:relative;border:1px solid var(--border2);background:var(--panel2);border-radius:16px;padding:18px 10px 14px;display:flex;flex-direction:column;align-items:center;gap:6px;cursor:pointer;color:var(--muted);font:inherit;transition:all .25s ease;overflow:hidden}.tile:hover{border-color:var(--faint)}.tile:active{transform:scale(.96)}.tile:disabled{opacity:.45;cursor:not-allowed}.tile .tile-ico{font-size:36px;line-height:1;filter:grayscale(.7) opacity(.5);transition:all .25s ease}.tile .tile-name{font-weight:700;font-size:13.5px;color:var(--text)}.tile .tile-state{font-size:11px;letter-spacing:2px;font-weight:800;color:var(--faint);transition:color .25s}.tile.on .tile-state{color:var(--green)}.tile.on .tile-ico{filter:none}.tile.power.on{background:linear-gradient(165deg,#fdf0d3,#fff7e8);border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),inset 0 0 30px #d993201f}.tile.power.on .tile-ico{animation:zap 1.6s ease-in-out infinite}.tile.water.on{background:linear-gradient(165deg,#dcecfb,#eff6fe);border-color:var(--blue);box-shadow:0 0 0 1px var(--blue),inset 0 0 30px #2f7fd11f}.tile.water.on .tile-state{color:var(--blue)}.tile.water.on .tile-ico{animation:drip 1.5s ease-in-out infinite}@keyframes zap{0%,to{transform:scale(1)}50%{transform:scale(1.16);filter:drop-shadow(0 0 10px rgba(217,147,32,.8))}}@keyframes drip{0%,to{transform:translateY(0)}50%{transform:translateY(6px)}}.barrier-opening{background:repeating-linear-gradient(45deg,#e8b04b 0,#e8b04b 16px,#c98f2d 16px,#c98f2d 32px)!important;color:#3a2a06!important;border-color:var(--accent)!important;animation:stripes .7s linear infinite}@keyframes stripes{to{background-position:45px 0}}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.metric{background:var(--panel2);border:1px solid var(--border);border-radius:10px;padding:10px 8px;text-align:center}.metric .v{font-size:17px;font-weight:700}.metric .u{font-size:10.5px;color:var(--faint);margin-top:2px;text-transform:uppercase;letter-spacing:.6px}.offline{opacity:.5}.admin-main{flex:1;min-width:0;display:flex;flex-direction:column}.adminbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 28px;height:58px;background:#ffffffe6;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border)}.adminbar .ab-title{font-weight:700;font-size:14px;display:flex;align-items:center;gap:8px}.adminbar .ab-title .muted{font-weight:500}.adminbar .ab-right{display:flex;align-items:center;gap:10px}.alertchip{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;font-size:12.5px;font-weight:700;background:var(--accent-soft);border:1px solid #ecd09a;color:#9a6a10}.alertchip.red{background:var(--red-soft);border-color:#efb3ae;color:#b5322a}.ab-date{font-size:12.5px;color:var(--muted);white-space:nowrap}.side-section{font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--faint);padding:16px 12px 6px;font-weight:800}.side-link{position:relative}.side-link.active:before{content:"";position:absolute;left:0;top:7px;bottom:7px;width:3px;border-radius:0 3px 3px 0;background:var(--accent)}.side-badge{margin-left:auto;background:var(--red);color:#fff;font-size:10.5px;font-weight:800;min-width:19px;height:19px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;padding:0 5px}.avatar{width:34px;height:34px;border-radius:50%;background:var(--accent);color:#fff;font-weight:800;display:inline-flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0}.side-user{display:flex;align-items:center;gap:10px}.side-user .nm{font-weight:700;color:var(--text);font-size:13px;line-height:1.2}.side-user .rl{font-size:11px;color:var(--faint)}.pagehead{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}.pagehead h2{font-size:22px;margin-bottom:3px}.pagehead .sub{color:var(--muted);font-size:13px}.pagehead .actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px}@media (max-width: 980px){.kpis{grid-template-columns:1fr 1fr}}@media (max-width: 440px){.kpis{grid-template-columns:1fr}}.kpi{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:15px 16px;box-shadow:var(--shadow)}.kpi .kpi-top{display:flex;align-items:center;justify-content:space-between}.kpi .kpi-ico{font-size:18px;opacity:.9}.kpi .kpi-val{font-size:26px;font-weight:800;line-height:1.1;margin:6px 0 2px}.kpi .kpi-lbl{font-size:12px;color:var(--muted);font-weight:600}.kpi.alert{border-color:#efb3ae}.kpi.alert .kpi-val{color:var(--red)}.kpi.warn{border-color:#ecd09a}.kpi.warn .kpi-val{color:#9a6a10}.kpi.good .kpi-val{color:var(--green)}.block{background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);margin-bottom:16px;overflow:hidden}.block-head{display:flex;align-items:center;gap:10px;padding:13px 18px;border-bottom:1px solid var(--border);font-weight:700;font-size:14px}.block-head .count{color:var(--faint);font-weight:700;font-size:12.5px;background:var(--panel2);border-radius:999px;padding:1px 9px}.block-head .right{margin-left:auto;font-weight:500}.block-body{padding:14px 18px}.block-body.flush{padding:0}.block .tbl th{padding:11px 16px}.block .tbl td{padding:13px 16px}.block .tbl tbody tr{transition:background .1s}.block .tbl tbody tr:hover{background:var(--panel2)}.empty{padding:30px 18px;text-align:center;color:var(--faint);font-size:13px}.empty .ico{font-size:26px;display:block;margin-bottom:8px;opacity:.6}.bk{border:1px solid var(--border);border-radius:12px;padding:14px 16px;margin-bottom:10px;background:var(--panel)}.bk:last-child{margin-bottom:0}.bk.alert{border-color:#efb3ae}.bk-top{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.bk-id{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:700}.bk-total{font-weight:800;font-size:17px;color:var(--accent)}.bk-guest{margin:9px 0 2px;font-size:14px}.bk-meta{color:var(--muted);font-size:12.5px;margin-bottom:12px;line-height:1.5}.bk-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.bk-actions .sep{width:1px;align-self:stretch;background:var(--border);margin:0 2px}@media (max-width: 860px){.admin-main{display:contents}.adminbar{display:none}}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#141c2d73;display:flex;align-items:center;justify-content:center;padding:20px;animation:fadein .12s ease}.modal{background:var(--panel);border:1px solid var(--border2);border-radius:16px;padding:22px;width:100%;max-width:420px;box-shadow:0 20px 60px #0000004d;animation:pop .14s ease}.modal h3{font-size:17px;margin-bottom:8px;display:flex;align-items:center;gap:8px}.modal p{color:var(--muted);font-size:13.5px;line-height:1.55;margin-bottom:18px}.modal .row{justify-content:flex-end}@keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes pop{0%{transform:scale(.96);opacity:0}to{transform:none;opacity:1}}.langsw{display:inline-flex;border:1px solid var(--border2);border-radius:999px;overflow:hidden;background:var(--panel)}.langsw button{border:none;background:none;padding:5px 11px;font-size:12.5px;font-weight:700;color:var(--muted);cursor:pointer}.langsw button.on{background:var(--accent);color:#fff}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.spread{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.muted{color:var(--muted);font-size:13px}.faint{color:var(--faint);font-size:12px}.mt{margin-top:14px}.mb{margin-bottom:14px}.hr{border:none;border-top:1px solid var(--border);margin:14px 0}.kv{display:grid;grid-template-columns:130px 1fr;row-gap:8px;font-size:13.5px}.kv .k{color:var(--faint)}.mono{font-family:Consolas,monospace}.center-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.auth-card{width:100%;max-width:410px;padding:30px}.auth-card h1{font-size:21px;margin-bottom:4px}.auth-card .sub{color:var(--muted);font-size:13px;margin-bottom:22px}.foot{padding:30px 0 50px;color:var(--faint);font-size:12.5px;text-align:center;border-top:1px solid var(--border);margin-top:50px}.toast{position:fixed;bottom:22px;right:22px;z-index:100;background:var(--panel);border:1px solid var(--border2);border-left:3px solid var(--green);border-radius:10px;padding:12px 18px;font-size:13.5px;box-shadow:0 6px 24px #141e322e;animation:slidein .18s ease;max-width:calc(100vw - 44px)}.toast.err{border-left-color:var(--red)}@keyframes slidein{0%{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}.pulse-anim{animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.45}}.devchips{display:flex;gap:8px;flex-wrap:wrap}.devchip{display:inline-flex;align-items:center;gap:7px;background:var(--panel2);border:1px solid var(--border);border-radius:999px;padding:6px 13px;font-size:12.5px;font-weight:600}.ecokw-chip{display:inline-flex;align-items:center;background:#fff;border:1px solid var(--border);border-radius:10px;padding:6px 12px;transition:opacity .12s}.ecokw-chip img{height:26px;display:block}.ecokw-chip:hover{opacity:.85}.ecokw-chip.sm{padding:4px 9px;border-radius:8px}.ecokw-chip.sm img{height:17px}.ecokw-chip.lg{padding:7px 14px;border-radius:12px}.ecokw-chip.lg img{height:34px}@media (max-width: 640px){.ecokw-chip.lg img{height:24px}}.poweredby{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:16px}.tabs{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap}.tab{padding:7px 15px;border-radius:999px;border:1px solid var(--border2);background:var(--panel);color:var(--muted);font-size:13px;font-weight:600;cursor:pointer}.tab.active{background:var(--accent-soft);border-color:#ecd09a;color:var(--accent)}
