:root{--accent:#14532d;--accent-2:#16a34a;--ink:#0f172a;--muted:#64748b;--line:#e2e8f0;--bg:#f1f5f9;--card:#fff;--danger:#b91c1c;--radius:12px;--shadow:0 1px 3px #0f172a14, 0 1px 2px #0f172a0a}[data-theme=dark]{--ink:#e2e8f0;--muted:#94a3b8;--line:#334155;--bg:#0f172a;--card:#1e293b;--shadow:0 1px 3px #0006}[data-theme=dark] input,[data-theme=dark] select,[data-theme=dark] textarea{color:var(--ink);border-color:var(--line);background:#0f172a}[data-theme=dark] button.ghost{color:var(--ink);border-color:var(--line);background:#1e293b}[data-theme=dark] tbody tr:hover,[data-theme=dark] tr.clickable:hover{background:#253449}[data-theme=dark] pre{color:var(--ink);background:#0f172a}[data-theme=dark] .badge.gray{color:#cbd5e1;background:#334155}[data-theme=dark] img.qr{background:#fff}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif;font-size:15px}.layout{min-height:100vh;display:flex}aside.sidebar{color:#e6f4ea;background:linear-gradient(#0c3b20,#14532d);flex-direction:column;flex-shrink:0;width:232px;height:100vh;padding:1rem .75rem;display:flex;position:sticky;top:0}.brand{align-items:center;gap:.6rem;padding:.35rem .6rem 1.1rem;display:flex}.brand .logo{background:var(--accent-2);color:#fff;border-radius:9px;place-items:center;width:34px;height:34px;font-weight:700;display:grid}.brand h1{letter-spacing:.02em;margin:0;font-size:1.02rem}.brand small{opacity:.7;font-size:.68rem;font-weight:400;display:block}nav.menu{flex-direction:column;gap:.15rem;margin-top:.4rem;display:flex}nav.menu :is(button,a){text-align:left;color:#cde8d5;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:.65rem;width:100%;padding:.58rem .7rem;font-size:.9rem;text-decoration:none;display:flex}nav.menu :is(button,a) svg{flex-shrink:0;width:17px;height:17px}nav.menu :is(button,a){transition:background .12s,transform .12s;position:relative}nav.menu :is(button,a):hover{color:#fff;background:#ffffff14;transform:translate(2px)}nav.menu :is(button,a).active{color:#fff;background:#ffffff24;font-weight:600}nav.menu :is(button,a).active:before{content:"";background:var(--accent-2);border-radius:2px;width:3px;height:64%;position:absolute;top:18%;left:-.75rem}.menu-label{text-transform:uppercase;letter-spacing:.09em;opacity:.55;padding:.9rem .7rem .25rem;font-size:.68rem}.sidebar-footer{border-top:1px solid #ffffff1f;margin-top:auto;padding:.7rem .6rem 0;font-size:.8rem}.userchip{align-items:center;gap:.55rem;display:flex}.userchip .avatar{background:var(--accent-2);color:#fff;border-radius:50%;place-items:center;width:30px;height:30px;font-size:.8rem;font-weight:600;display:grid}.userchip button{color:#a7d3b4;cursor:pointer;background:0 0;border:none;padding:0;font-size:.75rem;text-decoration:underline}.content{flex:1;min-width:0;padding:1.4rem 1.8rem 3rem}.topbar{z-index:20;background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);align-items:center;gap:1rem;padding:.7rem 1.8rem;display:flex;position:sticky;top:0}.topbar .crumb{font-size:1rem;font-weight:700}.gsearch{margin-left:auto;position:relative}.gsearch input{width:260px;padding-left:2.1rem}.gsearch svg{width:15px;height:15px;color:var(--muted);position:absolute;top:50%;left:.6rem;transform:translateY(-50%)}.gsearch .results{background:var(--card);border:1px solid var(--line);border-radius:10px;width:340px;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 14px 34px #0f172a2e}.gsearch .results button{text-align:left;cursor:pointer;width:100%;color:var(--ink);background:0 0;border:none;justify-content:space-between;gap:.6rem;padding:.55rem .8rem;font-size:.86rem;display:flex}.gsearch .results button:hover{background:color-mix(in srgb, var(--accent-2) 10%, var(--card))}.pagehead{flex-wrap:wrap;align-items:baseline;gap:.8rem;margin-bottom:1.1rem;display:flex}.pagehead h2{margin:0;font-size:1.35rem}.pagehead .sub{color:var(--muted);font-size:.88rem}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:1rem;padding:1.1rem 1.2rem;transition:box-shadow .15s;animation:.25s fadein}.card:hover{box-shadow:0 4px 12px #0f172a1a}@keyframes fadein{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.card h3{color:var(--accent);margin:0 0 .8rem;font-size:.95rem}.kpis{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.8rem;margin-bottom:1rem;display:grid}.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:.9rem 1rem;position:relative;overflow:hidden}.kpi:after{content:"";background:linear-gradient(90deg, var(--accent-2), transparent 70%);opacity:.8;height:3px;position:absolute;inset:0 0 auto}.kpi .num{letter-spacing:-.02em;font-size:1.55rem;font-weight:800}.kpi .lbl{color:var(--muted);margin-top:.15rem;font-size:.78rem}.kpi .trend{color:var(--accent-2);font-size:.72rem}.donut-wrap{flex-wrap:wrap;align-items:center;gap:1.2rem;display:flex}.donut{border-radius:50%;flex-shrink:0;width:130px;height:130px;position:relative}.donut:after{content:attr(data-center);background:var(--card);border-radius:50%;place-items:center;font-size:.9rem;font-weight:700;display:grid;position:absolute;inset:22%}.legend{flex-direction:column;gap:.35rem;font-size:.85rem;display:flex}.legend .dot{border-radius:3px;width:10px;height:10px;margin-right:.45rem;display:inline-block}thead th{background:var(--card);z-index:1;position:sticky;top:0}::selection{background:#bbf7d0}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line);border:2px solid var(--bg);border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--muted)}button:focus-visible,a:focus-visible{outline:2px solid var(--accent-2);outline-offset:2px;border-radius:6px}.hero{background:linear-gradient(120deg, color-mix(in srgb, var(--accent-2) 9%, var(--card)), var(--card) 55%);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:1rem;padding:1.1rem 1.2rem}table{border-collapse:collapse;width:100%}th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);border-bottom:2px solid var(--line);padding:.5rem .6rem;font-size:.72rem}td{border-bottom:1px solid var(--line);vertical-align:middle;padding:.55rem .6rem;font-size:.88rem}tr.clickable{cursor:pointer}tr.clickable:hover,tbody tr:hover{background:#f8fafc}button.primary{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:8px;padding:.5rem 1rem;font-size:.88rem;font-weight:600}button.primary:hover{background:#166534}button.primary:disabled{opacity:.45;cursor:default}button.ghost{color:var(--ink);border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:8px;padding:.45rem .9rem;font-size:.85rem}button.ghost:hover{border-color:var(--muted)}button.danger{color:var(--danger);cursor:pointer;background:#fff;border:1px solid #fecaca;border-radius:8px;padding:.4rem .8rem;font-size:.82rem}.link{color:var(--accent);cursor:pointer;font-size:inherit;background:0 0;border:none;padding:0;text-decoration:underline}input,select{border:1px solid var(--line);background:#fff;border-radius:8px;padding:.5rem .65rem;font-size:.88rem}input:focus,select:focus{border-color:var(--accent-2);outline:2px solid #bbf7d0}.row{flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:.7rem;display:flex}.spread{justify-content:space-between}.badge{color:#047857;background:#ecfdf5;border-radius:999px;padding:.14rem .55rem;font-size:.72rem;font-weight:600;display:inline-block}.badge.gray{color:var(--muted);background:#f1f5f9}.badge.warn{color:var(--danger);background:#fef2f2}.badge.blue{color:#1d4ed8;background:#eff6ff}.alert{border-radius:8px;margin-bottom:.8rem;padding:.6rem .9rem;font-size:.86rem}.alert.error{color:var(--danger);background:#fef2f2;border:1px solid #fecaca}.alert.ok{color:#047857;background:#ecfdf5;border:1px solid #a7f3d0}.alert.warn{color:#b45309;background:#fffbeb;border:1px solid #fde68a}.field{margin-bottom:.7rem}.field>label{margin-bottom:.25rem;font-size:.84rem;font-weight:600;display:block}.field .req{color:var(--danger)}.field>.meta{margin-top:-.3rem}.modal .field input{margin-bottom:0}.field-error{color:var(--danger);min-height:1rem;margin-top:.2rem;font-size:.8rem}.kpi.clickable{cursor:pointer}.kpi.clickable:hover{border-color:var(--accent)}.kpi.clickable:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.meta{color:var(--muted);font-size:.8rem}.empty{text-align:center;color:var(--muted);padding:2.2rem 1rem}.empty svg{opacity:.35;width:42px;height:42px;margin-bottom:.5rem}.spinner{border:3px solid var(--line);border-top-color:var(--accent-2);border-radius:50%;width:26px;height:26px;margin:2rem auto;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{background:linear-gradient(90deg, var(--line) 25%, var(--bg) 50%, var(--line) 75%);background-size:200% 100%;border-radius:8px;height:16px;margin-bottom:.55rem;animation:1.4s infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:hover{color:var(--accent)}.pager{color:var(--muted);justify-content:flex-end;align-items:center;gap:.4rem;margin-top:.7rem;font-size:.85rem;display:flex}.timeline{border-left:2px solid var(--line);margin:0;padding:0 0 0 1.1rem;list-style:none}.timeline li{padding:0 0 1rem 1rem;position:relative}.timeline li:before{content:"";background:var(--accent-2);border:2px solid var(--card);border-radius:50%;width:10px;height:10px;position:absolute;top:.25rem;left:-1.48rem}.timeline .when{color:var(--muted);font-size:.76rem}.bar-row{grid-template-columns:90px 1fr 44px;align-items:center;gap:.5rem;margin-bottom:.45rem;font-size:.84rem;display:grid}@media print{aside.sidebar,.mobilebar,.pagehead button,.no-print{display:none!important}.content{padding:0}.card{box-shadow:none;break-inside:avoid}}dl.grid{grid-template-columns:1fr 1fr;gap:.3rem .9rem;margin:0;display:grid}dl.grid dt{color:var(--muted);font-size:.78rem}dl.grid dd{margin:0;font-size:.9rem}img.qr{border:1px solid var(--line);background:#fff;border-radius:8px;width:132px;height:132px;padding:6px}.progress{background:var(--line);border-radius:999px;min-width:120px;height:8px;overflow:hidden}.progress>div{background:var(--accent-2);height:100%}.grid2{grid-template-columns:1fr 1fr;gap:1rem;display:grid}@media (width<=860px){aside.sidebar{display:none}.grid2{grid-template-columns:1fr}.content{padding:1rem}.mobilebar{display:flex!important}}.mobilebar{background:var(--accent);color:#fff;gap:.5rem;padding:.6rem 1rem;display:none;overflow-x:auto}.mobilebar a{color:#fff;white-space:nowrap;border-radius:6px;padding:.3rem .5rem;text-decoration:none}.mobilebar a.active{background:#ffffff2e;font-weight:600}.content:focus,.content :focus:not(:focus-visible){outline:none}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.navbadge{background:var(--accent-2);color:#fff;border-radius:999px;margin-left:auto;padding:.05rem .45rem;font-size:.68rem;font-weight:700}img.thumb{object-fit:cover;border-radius:6px;width:34px;height:44px;display:block;box-shadow:0 1px 3px #00000026}img.heroimg{border-radius:10px;width:96px;height:auto;box-shadow:0 2px 10px #00000024}img.qr{transition:transform .18s}img.qr:hover{z-index:5;position:relative;transform:scale(1.55);box-shadow:0 10px 30px #00000040}.greet{color:var(--muted);margin:-.6rem 0 1rem;font-size:.9rem}@keyframes shake{0%,to{transform:none}25%{transform:translate(-5px)}75%{transform:translate(5px)}}.alert.error{animation:.25s shake}@media (width<=700px){.card{overflow-x:auto}.gsearch input{width:150px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.mobilebar button{color:#cde8d5;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:.4rem .6rem}.mobilebar button.active{color:#fff;background:#ffffff2e}.tabs{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:.3rem;margin-bottom:1rem;display:flex}.tabs button{cursor:pointer;color:var(--muted);background:0 0;border:none;border-bottom:2px solid #0000;padding:.5rem .9rem;font-size:.88rem}.tabs button.active{color:var(--accent);border-bottom-color:var(--accent-2);font-weight:600}.toasts{z-index:60;flex-direction:column;gap:.5rem;display:flex;position:fixed;bottom:1.2rem;right:1.2rem}.toast{border-radius:10px;max-width:340px;padding:.65rem 1rem;font-size:.87rem;animation:.25s slidein;box-shadow:0 8px 24px #0000002e}.toast.ok{color:#fff;background:#14532d}.toast.error{color:#fff;background:#b91c1c}@keyframes slidein{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.modal-backdrop{z-index:50;background:#0f172a73;place-items:center;display:grid;position:fixed;inset:0}.modal{background:var(--card);color:var(--ink);border-radius:14px;max-height:88vh;padding:1.2rem 1.4rem;overflow-y:auto;box-shadow:0 24px 60px #0000004d}.modal input,.modal select,.modal textarea{width:100%;margin-bottom:.6rem}textarea{border:1px solid var(--line);border-radius:8px;min-height:220px;padding:.5rem .65rem;font-family:ui-monospace,monospace;font-size:.8rem}textarea:focus{border-color:var(--accent-2);outline:2px solid #bbf7d0}.login-wrap{background:linear-gradient(135deg,#0c3b20,#1e6b3d);place-items:center;min-height:100vh;display:grid}.login-split{border-radius:18px;grid-template-columns:1fr 1fr;width:min(840px,94vw);display:grid;overflow:hidden;box-shadow:0 24px 60px #0000004d}.login-brand{color:#eaf4ec;background:linear-gradient(160deg,#ffffff14,#00000026);flex-direction:column;padding:2.4rem 2.2rem;display:flex}.login-brand h2{color:#fff;margin:0 0 .6rem;font-size:1.35rem}.login-brand ul{flex-direction:column;gap:.7rem;margin:1.2rem 0 0;padding:0;font-size:.88rem;list-style:none;display:flex}.login-brand li:before{content:"✓";color:#4ade80;margin-right:.55rem;font-weight:700}.login-brand .foot{opacity:.65;margin-top:auto;font-size:.74rem}@media (width<=760px){.login-split{grid-template-columns:1fr}.login-brand{display:none}}.login-card{background:var(--card,#fff);width:100%;padding:2.2rem 2.4rem}.login-card h1{margin:0 0 .3rem;font-size:1.25rem}.login-card .meta{margin-bottom:1.2rem}.login-card input{width:100%;margin-bottom:.7rem}.login-card button.primary{width:100%;padding:.65rem}
