*{box-sizing:border-box}
html,body{margin:0}
body{font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;background:#e7ebe5;color:#182a1a}

/* ---------- auth + landing ---------- */
.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.auth-card{background:#fff;border:1px solid #e3e8e0;border-radius:16px;max-width:400px;width:100%;padding:28px;box-shadow:0 1px 3px rgba(20,40,20,.06)}
.brand{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.brand svg{width:30px;height:30px}
.brand b{font-size:19px;font-weight:600}
.auth-sub{font-size:13px;color:#6b7a6d;margin-bottom:20px}
.fld{margin-bottom:14px}
.fld label{display:block;font-size:12.5px;font-weight:600;margin-bottom:5px}
.fld input{width:100%;border:1px solid #e3e8e0;border-radius:10px;padding:11px 12px;font-size:14px;font-family:inherit;outline:none}
.fld input:focus{border-color:#bcd8bf}
.auth-btn{width:100%;background:#1d4a24;color:#fff;border:0;border-radius:10px;padding:12px;font-size:14px;font-weight:600;cursor:pointer;font-family:inherit}
.auth-btn:hover{background:#153a1b}
.auth-err{background:#fbe6e3;color:#a12d1f;font-size:12.5px;padding:9px 11px;border-radius:9px;margin-bottom:14px;display:none}
.auth-hint{font-size:11.5px;color:#6b7a6d;margin-top:16px;line-height:1.6;border-top:1px solid #e3e8e0;padding-top:14px}
.landing{max-width:780px;margin:0 auto;padding:56px 24px 40px;text-align:center}
.landing h1{font-size:34px;font-weight:600;margin:18px 0 8px;letter-spacing:-.01em}
.landing p.lead{font-size:16px;color:#3a4a3c;line-height:1.6;max-width:560px;margin:0 auto 22px}
.landing .cta{display:inline-block;background:#1d4a24;color:#fff;text-decoration:none;border-radius:10px;padding:12px 22px;font-size:15px;font-weight:600}
.landing .feat{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin-top:44px;text-align:left}
.landing .fc{background:#fff;border:1px solid #e3e8e0;border-radius:12px;padding:16px}
.landing .fc b{font-size:14px}.landing .fc span{font-size:12.5px;color:#6b7a6d;display:block;margin-top:4px;line-height:1.5}
.landing .foot{font-size:11.5px;color:#8a978c;margin-top:40px}

/* ---------- app shell (ported from prototype) ---------- */
.gv{--bg:#eaeee8;--panel:#fff;--ink:#182a1a;--muted:#6b7a6d;--line:#e3e8e0;--brand:#1d4a24;--accent:#2e7d32;--good:#2e7d32;--warn:#b9770c;--bad:#c0392b;
 color:var(--ink);max-width:1140px;margin:18px auto;background:var(--panel);border:1px solid var(--line);border-radius:16px;overflow:hidden;display:flex;min-height:600px;box-shadow:0 1px 3px rgba(20,40,20,.06)}
.gv .side{width:172px;flex-shrink:0;background:var(--brand);color:#cfe0d0;padding:14px 10px;display:flex;flex-direction:column;gap:2px}
.gv .logo{display:flex;align-items:center;gap:9px;color:#fff;font-weight:600;font-size:15px;padding:6px 8px 12px}
.gv .logo svg{width:22px;height:22px}
.gv .nav{display:flex;flex-direction:column;gap:2px;margin-top:4px}
.gv .navitem{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:none;border:0;color:#cfe0d0;padding:9px 10px;border-radius:9px;font-size:13px;cursor:pointer;font-family:inherit}
.gv .navitem svg{width:17px;height:17px;flex-shrink:0}
.gv .navitem:hover{background:rgba(255,255,255,.09);color:#fff}
.gv .navitem.active{background:#fff;color:var(--brand);font-weight:600}
.gv .navtag{margin-left:auto;font-size:9.5px;background:#2e7d32;color:#fff;padding:1px 6px;border-radius:999px;font-weight:600;letter-spacing:.03em}
.gv .navitem.active .navtag{background:var(--brand)}
.gv .sidefoot{margin-top:auto;font-size:10.5px;color:#9fb6a2;padding:8px}
.gv .main{flex:1;min-width:0;background:var(--bg);display:flex;flex-direction:column}
.gv .top{display:flex;align-items:center;gap:12px;padding:11px 16px;background:var(--panel);border-bottom:1px solid var(--line)}
.gv .tsel{display:flex;align-items:center;gap:7px;background:var(--bg);border:1px solid var(--line);border-radius:9px;padding:4px 8px}
.gv .tsel svg{width:16px;height:16px;color:var(--accent)}
.gv select{border:0;background:none;font-family:inherit;font-size:13px;color:var(--ink);font-weight:600;cursor:pointer;outline:none}
.gv .top .sp{flex:1}
.gv .pill{font-size:11px;font-weight:600;padding:3px 10px;border-radius:999px;background:#eaf3ea;color:#1d4a24}
.gv .bell{position:relative;color:var(--muted);display:flex}
.gv .bell svg{width:19px;height:19px}
.gv .bell b{position:absolute;top:-5px;right:-6px;background:var(--bad);color:#fff;font-size:9px;min-width:14px;height:14px;border-radius:999px;display:flex;align-items:center;justify-content:center;padding:0 3px}
.gv .ava{width:28px;height:28px;border-radius:50%;background:var(--brand);color:#fff;font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center}
.gv .lo{border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:6px 11px;font-size:12px;font-weight:600;color:var(--ink);cursor:pointer;font-family:inherit}
.gv .lo:hover{border-color:#bcd8bf;background:#eef6ee}
.gv .pwmask{position:fixed;inset:0;background:rgba(18,28,18,.45);display:flex;align-items:center;justify-content:center;z-index:60}
.gv .pwcard{background:#fff;border-radius:14px;padding:22px;width:340px;max-width:92vw;box-shadow:0 18px 50px rgba(0,0,0,.28)}
.gv .pwcard h3{margin:0 0 14px;font-size:15px}
.gv .pwrow{display:flex;gap:10px;justify-content:flex-end;margin-top:4px}
.gv .pwrow .auth-btn{width:auto;padding:9px 18px}
.gv .content{padding:16px 18px 22px}
.gv .pageh{font-size:18px;font-weight:600;margin:2px 0 2px}
.gv .pagesub{font-size:12.5px;color:var(--muted);margin-bottom:14px}
.gv .kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:11px}
.gv .kpi{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 13px}
.gv .kpi .l{font-size:11.5px;color:var(--muted)}
.gv .kpi .v{font-size:21px;font-weight:600;margin-top:3px;letter-spacing:-.01em}
.gv .kpi .d{font-size:11.5px;margin-top:4px;font-weight:600}
.gv .d.good,.gv .t-good{color:var(--good)} .gv .d.bad,.gv .t-bad{color:var(--bad)} .gv .d.warn{color:var(--warn)} .gv .d.mut{color:var(--muted);font-weight:500}
.gv .h{font-size:14px;font-weight:600;margin:20px 0 9px;display:flex;align-items:center;gap:7px}
.gv .grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px}
.gv .card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:13px 15px}
.gv .card .ct{font-size:12.5px;font-weight:600;margin-bottom:9px;display:flex;align-items:center;gap:7px}
.gv .tw{overflow-x:auto}
.gv table{width:100%;border-collapse:collapse;font-size:12.5px}
.gv th{text-align:left;color:var(--muted);font-weight:500;padding:7px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
.gv td{padding:8px;border-bottom:1px solid var(--line);white-space:nowrap}
.gv tr:last-child td{border-bottom:0}
.gv .chip{font-size:11px;padding:2px 8px;border-radius:999px;font-weight:600;display:inline-block}
.gv .c-good{background:#e7f3e7;color:#1d4a24} .gv .c-warn{background:#fbf0d8;color:#8a5a05} .gv .c-bad{background:#fbe6e3;color:#a12d1f} .gv .c-neu{background:#eef1ec;color:#57634f}
.gv .bar{height:8px;background:var(--line);border-radius:6px;overflow:hidden;min-width:60px}
.gv .bar i{display:block;height:100%;border-radius:6px;background:var(--accent)}
.gv .att{display:flex;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}
.gv .att:last-child{border-bottom:0}
.gv .sd{width:9px;height:9px;border-radius:50%;margin-top:4px;flex-shrink:0}
.gv .att .t{font-size:12.5px;font-weight:600} .gv .att .s{font-size:11.5px;color:var(--muted);margin-top:1px}
.gv .rooms{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:11px}
.gv .room .rm{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted);padding:3px 0}
.gv .room .rm b{color:var(--ink);font-weight:600}
.gv .rhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.gv .rhead .rn{font-weight:600;font-size:13px}
.gv .stat2{display:flex;gap:12px;flex-wrap:wrap}
.gv .bigstat{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:13px 16px;flex:1;min-width:150px}
.gv .bigstat .l{font-size:11.5px;color:var(--muted)} .gv .bigstat .v{font-size:26px;font-weight:600;margin-top:2px;letter-spacing:-.01em} .gv .bigstat .s{font-size:11.5px;margin-top:3px}
.gv .callout{background:#eaf3ea;border-left:3px solid var(--accent);border-radius:0 8px 8px 0;padding:10px 13px;font-size:12.5px;color:#1d4a24;margin-top:12px}
.gv .bench{margin:14px 0}
.gv .bench .bt{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:5px} .gv .bench .bt b{font-weight:600}
.gv .track{position:relative;height:12px;background:var(--line);border-radius:7px;overflow:hidden}
.gv .track .zone{position:absolute;right:0;top:0;bottom:0;width:25%;background:#dcecdc}
.gv .track .mk{position:absolute;top:-3px;width:4px;height:18px;background:var(--brand);border-radius:3px;transform:translateX(-2px)}
.gv .bench .bs{font-size:11px;color:var(--muted);margin-top:4px}
.gv .btn{background:var(--accent);color:#fff;border:0;font-family:inherit;font-size:12.5px;font-weight:600;padding:9px 15px;border-radius:9px;cursor:pointer;margin-top:12px}
.gv .astbar{display:flex;align-items:center;margin-bottom:10px}
.gv .vtog{margin-left:auto;display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:5px 11px;cursor:pointer;font-family:inherit}
.gv .vtog svg{width:15px;height:15px}
.gv .vtog.on{color:#1d4a24;border-color:#bcd8bf;background:#eef6ee}
.gv .clog{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px;max-height:320px;overflow-y:auto}
.gv .msg{display:flex;gap:8px;margin:9px 0;align-items:flex-start}
.gv .msg.u{flex-direction:row-reverse}
.gv .cav{width:26px;height:26px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600}
.gv .cav.ai{background:#e7f3e7} .gv .cav.u{background:#1d4a24;color:#fff}
.gv .cav svg{width:15px;height:15px}
.gv .bub{max-width:80%;padding:9px 12px;border-radius:13px;font-size:12.5px;line-height:1.55}
.gv .msg.ai .bub{background:var(--bg);border:1px solid var(--line)}
.gv .msg.u .bub{background:#1d4a24;color:#fff}
.gv .chips{display:flex;gap:7px;flex-wrap:wrap;margin:11px 0 2px}
.gv .chipbtn{border:1px solid var(--line);background:var(--panel);border-radius:999px;padding:6px 11px;font-size:11.5px;cursor:pointer;color:var(--ink);font-family:inherit}
.gv .chipbtn:hover{border-color:#bcd8bf;background:#eef6ee}
.gv .cbar{display:flex;gap:8px;align-items:center;margin-top:8px}
.gv #gv-cin{flex:1;border:1px solid var(--line);border-radius:10px;padding:11px 12px;font-size:12.5px;font-family:inherit;outline:none;background:var(--panel);color:var(--ink)}
.gv #gv-cin:focus{border-color:#bcd8bf}
.gv .iconbtn{width:42px;height:42px;border-radius:10px;border:1px solid var(--line);background:var(--panel);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ink);flex-shrink:0}
.gv .iconbtn.send{background:#1d4a24;color:#fff;border-color:#1d4a24}
.gv .iconbtn svg{width:18px;height:18px}
.gv .iconbtn.mic.live{background:#c0392b;color:#fff;border-color:#c0392b;animation:gvpulse 1s infinite}
@keyframes gvpulse{0%,100%{opacity:1}50%{opacity:.55}}
.gv .hint{font-size:10.5px;color:var(--muted);margin-top:8px}
.gv .synced{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);margin-bottom:6px;flex-wrap:wrap}
.gv .livedot{width:8px;height:8px;border-radius:50%;background:#2e7d32;box-shadow:0 0 0 3px #e7f3e7}
.gv .btn2{margin-left:auto;border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:7px 12px;font-size:12px;font-weight:600;color:var(--ink);cursor:pointer;font-family:inherit}
.gv .btn2:hover{border-color:#bcd8bf;background:#eef6ee}
.gv .cal{background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.gv .evt{display:flex;align-items:center;gap:12px;padding:11px 14px;border-bottom:1px solid var(--line)}
.gv .evt:last-child{border-bottom:0}
.gv .evt.moved{background:#f6faf6}
.gv .evd{width:38px;text-align:center;flex-shrink:0}
.gv .evm{display:block;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.gv .evn{display:block;font-size:18px;font-weight:600;line-height:1}
.gv .evdot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
.gv .evt2{font-size:12.5px;font-weight:600}
.gv .evp{font-size:10px;color:var(--muted);font-weight:500;border:1px solid var(--line);border-radius:999px;padding:0 6px;margin-left:4px}
.gv .evty{font-size:11px;margin-top:1px;font-weight:600}
.gv .ncols{display:grid;grid-template-columns:repeat(auto-fit,minmax(252px,1fr));gap:12px}
.gv .ntf{display:flex;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}
.gv .ntf:last-of-type{border-bottom:0}
.gv .nbubble{width:8px;height:8px;border-radius:50%;margin-top:5px;flex-shrink:0}
.gv .nmsg{font-size:12px;line-height:1.5}
.gv .nmeta{font-size:10.5px;color:var(--muted);margin-top:2px}
.gv .nchan{font-size:12px;color:var(--muted);margin-bottom:8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.gv .pillbtn{border:1px solid var(--line);background:var(--panel);border-radius:999px;padding:4px 12px;font-size:11.5px;font-weight:600;cursor:pointer;color:var(--muted);font-family:inherit}
.gv .pillbtn.sel{border-color:#2e7d32;color:#1d4a24;background:#eef6ee}
.gv .nto{font-size:11.5px;color:var(--ink);font-weight:600;margin-bottom:10px}
.gv .tgl{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);font-size:12.5px}
.gv .sw{width:38px;height:22px;border-radius:999px;background:#d3d9d1;border:0;position:relative;cursor:pointer;flex-shrink:0;padding:0}
.gv .sw i{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;transition:left .15s}
.gv .sw.on{background:#2e7d32}.gv .sw.on i{left:18px}
.gv .sw.locked{opacity:.6;cursor:default}
.gv .nlock{font-size:10.5px;color:var(--muted);margin-top:8px}
@media(max-width:560px){.gv{flex-direction:column;margin:0;border-radius:0}.gv .side{width:auto;flex-direction:row;flex-wrap:wrap;gap:4px}.gv .nav{flex-direction:row;flex-wrap:wrap}.gv .navtag{display:none}.gv .sidefoot{display:none}}
