:root{--gf-bg: #16110c;--gf-bg-2: #1f1812;--gf-surface: #261d15;--gf-surface-2: #2f241a;--gf-line: #3c2e20;--gf-text: #f5ecdf;--gf-text-dim: #ccba9e;--gf-text-faint: #a89a82;--gf-brass: #e8b157;--gf-brass-dim: #c9952f;--gf-iron: #8a98a1;--gf-good: #6fbf7e;--gf-warn: #e8b157;--gf-bad: #e57a70;--gf-info: #82b4d6;--gf-radius: 14px;--gf-radius-sm: 9px;--gf-shadow: 0 8px 28px rgba(0, 0, 0, .45);--gf-font: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;--gf-sidebar-w: 252px}:root[data-theme=light]{--gf-bg: #f1eadf;--gf-bg-2: #faf6ef;--gf-surface: #ffffff;--gf-surface-2: #efe5d6;--gf-line: #d9cbb6;--gf-text: #221a11;--gf-text-dim: #574a39;--gf-text-faint: #6f6049;--gf-brass: #8a5e12;--gf-brass-dim: #74500f;--gf-iron: #566069;--gf-good: #2f8f4e;--gf-warn: #8a5e12;--gf-bad: #c0392b;--gf-info: #2f6f9a;--gf-shadow: 0 8px 22px rgba(120, 90, 40, .14)}:root[data-theme=light] body{background:radial-gradient(1100px 540px at 78% -8%,#fff6e6 0%,transparent 60%),var(--gf-bg)}:root[data-theme=light] .gf-btn.primary{color:#fff}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:radial-gradient(1100px 540px at 78% -8%,#2a1f14 0%,transparent 60%),var(--gf-bg);color:var(--gf-text);font-family:var(--gf-font);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font-family:inherit}.gf-app{display:flex;min-height:100%}.gf-sidebar{width:var(--gf-sidebar-w);flex:0 0 var(--gf-sidebar-w);background:linear-gradient(180deg,var(--gf-bg-2),var(--gf-bg));border-right:1px solid var(--gf-line);padding:18px 12px;position:sticky;top:0;height:100vh;overflow-y:auto}.gf-brand{display:flex;align-items:center;gap:11px;padding:6px 8px 16px}.gf-brand img{width:38px;height:38px;border-radius:9px}.gf-brand-name{font-weight:700;font-size:17px;letter-spacing:.3px}.gf-brand-sub{font-size:11px;color:var(--gf-text-faint);letter-spacing:1.4px;text-transform:uppercase}.gf-navgroup-label{font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gf-text-faint);padding:14px 12px 6px}.gf-navlink{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:var(--gf-radius-sm);color:var(--gf-text-dim);font-size:14px;font-weight:500;cursor:pointer;margin-bottom:2px}.gf-navlink:hover{background:var(--gf-surface);color:var(--gf-text)}.gf-navlink.active{background:linear-gradient(90deg,#e0a64b2e,#e0a64b0a);color:var(--gf-text);box-shadow:inset 2px 0 0 var(--gf-brass)}.gf-navlink .soon{margin-left:auto;font-size:9px;letter-spacing:.5px;background:var(--gf-surface-2);color:var(--gf-text-faint);padding:2px 6px;border-radius:6px;text-transform:uppercase}.gf-main{flex:1;min-width:0;display:flex;flex-direction:column}.gf-content{padding:22px clamp(16px,3vw,34px) 90px;max-width:1240px;width:100%}.gf-topbar,.gf-bottomnav{display:none}.gf-pageheader{margin-bottom:20px}.gf-pageheader h1{margin:0;font-size:clamp(22px,3.2vw,30px);letter-spacing:.2px}.gf-pageheader p{margin:4px 0 0;color:var(--gf-text-dim);font-size:14px}.gf-card{background:linear-gradient(180deg,var(--gf-surface),var(--gf-bg-2));border:1px solid var(--gf-line);border-radius:var(--gf-radius);padding:16px 18px;box-shadow:var(--gf-shadow)}.gf-card-title{font-size:13px;text-transform:uppercase;letter-spacing:1px;color:var(--gf-text-faint);margin:0 0 12px}.gf-grid{display:grid;gap:14px}.gf-grid.cols-2{grid-template-columns:repeat(2,1fr)}.gf-grid.cols-3{grid-template-columns:repeat(3,1fr)}.gf-grid.cols-4{grid-template-columns:repeat(4,1fr)}.gf-grid.auto{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.gf-stat{background:linear-gradient(180deg,var(--gf-surface),var(--gf-bg-2));border:1px solid var(--gf-line);border-radius:var(--gf-radius);padding:16px}.gf-stat .label{font-size:12px;color:var(--gf-text-dim);display:flex;align-items:center;gap:7px}.gf-stat .value{font-size:26px;font-weight:700;margin-top:8px;letter-spacing:.3px}.gf-stat .delta{font-size:12px;margin-top:4px}.gf-stat .delta.up{color:var(--gf-good)}.gf-stat .delta.down{color:var(--gf-bad)}.gf-stat .icon{color:var(--gf-brass)}.gf-badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:999px;border:1px solid transparent}.gf-badge.good{color:var(--gf-good);background:#5fae6e1f;border-color:#5fae6e4d}.gf-badge.warn{color:var(--gf-warn);background:#e0a64b1f;border-color:#e0a64b4d}.gf-badge.bad{color:var(--gf-bad);background:#d8635a1f;border-color:#d8635a4d}.gf-badge.info{color:var(--gf-info);background:#6ea4c91f;border-color:#6ea4c94d}.gf-badge.neutral{color:var(--gf-text-dim);background:var(--gf-surface-2);border-color:var(--gf-line)}.gf-table{width:100%;border-collapse:collapse;font-size:14px}.gf-table th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--gf-text-faint);padding:8px 12px;border-bottom:1px solid var(--gf-line)}.gf-table td{padding:11px 12px;border-bottom:1px solid rgba(60,46,32,.5)}.gf-table tr:last-child td{border-bottom:none}.gf-table tr.low td{background:#d8635a12}.gf-table-wrap{overflow-x:auto}.gf-btn{display:inline-flex;align-items:center;gap:7px;justify-content:center;background:var(--gf-surface-2);color:var(--gf-text);border:1px solid var(--gf-line);border-radius:var(--gf-radius-sm);padding:9px 14px;font-size:14px;font-weight:600;cursor:pointer}.gf-btn:hover{border-color:var(--gf-brass-dim)}.gf-btn.primary{background:linear-gradient(180deg,var(--gf-brass),var(--gf-brass-dim));color:#271a09;border-color:var(--gf-brass-dim)}.gf-btn.ghost{background:transparent}.gf-btn:disabled{opacity:.5;cursor:not-allowed}.gf-btn.icon{padding:7px 10px}.gf-input,.gf-textarea{width:100%;background:var(--gf-bg);color:var(--gf-text);border:1px solid var(--gf-line);border-radius:var(--gf-radius-sm);padding:9px 11px;font-size:14px;font-family:inherit}.gf-input:focus,.gf-textarea:focus{outline:none;border-color:var(--gf-brass-dim)}.gf-field{margin-bottom:12px}.gf-field label{display:block;font-size:12px;color:var(--gf-text-dim);margin-bottom:5px}.gf-empty{text-align:center;color:var(--gf-text-faint);padding:48px 20px;border:1px dashed var(--gf-line);border-radius:var(--gf-radius)}.gf-empty .icon{color:var(--gf-brass-dim);margin-bottom:10px}.gf-empty h3{margin:0 0 6px;color:var(--gf-text-dim)}.gf-soon-banner{display:flex;align-items:center;gap:10px;background:#e0a64b14;border:1px solid rgba(224,166,75,.25);color:var(--gf-brass);border-radius:var(--gf-radius-sm);padding:10px 14px;font-size:13px;margin-bottom:18px}.gf-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px}.gf-tab{padding:8px 14px;border-radius:999px;font-size:13px;font-weight:600;background:var(--gf-surface);border:1px solid var(--gf-line);color:var(--gf-text-dim);cursor:pointer}.gf-tab.active{background:var(--gf-surface-2);color:var(--gf-text);border-color:var(--gf-brass-dim)}.gf-mb{margin-bottom:16px}.gf-week{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}.gf-day{background:var(--gf-bg);border:1px solid var(--gf-line);border-radius:10px;padding:10px 6px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:3px}.gf-day.today{border-color:var(--gf-brass-dim);box-shadow:inset 0 0 0 1px var(--gf-brass-dim)}.gf-day-label{font-size:12px;font-weight:700}.gf-day-date{font-size:11px}.gf-day-bar{width:22px;height:46px;background:var(--gf-surface-2);border-radius:5px;display:flex;align-items:flex-end;overflow:hidden;margin:4px 0}.gf-day-bar>span{display:block;width:100%;background:linear-gradient(180deg,var(--gf-brass),var(--gf-brass-dim));border-radius:5px;min-height:2px}.gf-day-count{font-size:17px;font-weight:700;font-variant-numeric:tabular-nums}.gf-day-val{font-size:11px}.gf-progress{height:7px;background:var(--gf-bg);border-radius:999px;overflow:hidden}.gf-progress>span{display:block;height:100%;background:linear-gradient(90deg,var(--gf-brass-dim),var(--gf-brass))}.gf-row{display:flex;align-items:center;gap:10px}.gf-spread{display:flex;align-items:center;justify-content:space-between;gap:10px}.gf-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#080604a8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto}.gf-modal{width:560px;max-width:100%;background:linear-gradient(180deg,var(--gf-surface),var(--gf-bg-2));border:1px solid var(--gf-line);border-radius:var(--gf-radius);box-shadow:var(--gf-shadow)}.gf-modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--gf-line)}.gf-modal-head h2{margin:0;font-size:17px}.gf-modal-body{padding:18px}.gf-modal-foot{display:flex;gap:8px;align-items:center;padding:14px 18px;border-top:1px solid var(--gf-line)}.gf-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.gf-form-grid .full{grid-column:1 / -1}.gf-iconbtn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;cursor:pointer;background:var(--gf-surface-2);border:1px solid var(--gf-line);color:var(--gf-text-dim)}.gf-iconbtn:hover{color:var(--gf-text);border-color:var(--gf-brass-dim)}.gf-iconbtn.danger:hover{color:var(--gf-bad);border-color:var(--gf-bad)}.gf-check{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer;padding-top:6px}.gf-check input{width:16px;height:16px;accent-color:var(--gf-brass)}select.gf-input{-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (max-width: 560px){.gf-form-grid{grid-template-columns:1fr}.gf-overlay{padding:16px 10px}}.spin{animation:gf-spin 1s linear infinite}@keyframes gf-spin{to{transform:rotate(360deg)}}.gf-invoice{color:var(--gf-text)}.gf-invoice .inv-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.gf-invoice .inv-brand{font-size:22px;font-weight:800;letter-spacing:.4px}.gf-invoice table{width:100%;border-collapse:collapse;margin:14px 0;font-size:14px}.gf-invoice th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--gf-text-faint);border-bottom:1px solid var(--gf-line);padding:8px 6px}.gf-invoice td{padding:9px 6px;border-bottom:1px solid rgba(60,46,32,.5)}@media print{body *{visibility:hidden!important}.gf-print,.gf-print *{visibility:visible!important}.gf-print{position:absolute;top:0;right:0;bottom:0;left:0;margin:0;padding:24px;background:#fff!important;color:#1a1a1a!important;width:100%;box-shadow:none!important;border:none!important}.gf-print *{color:#1a1a1a!important}.gf-print .inv-brand{color:#111!important}.no-print{display:none!important}}.muted{color:var(--gf-text-dim)}.faint{color:var(--gf-text-faint)}.mono{font-variant-numeric:tabular-nums}.nowrap{white-space:nowrap}@media (max-width: 900px){.gf-sidebar{display:none}.gf-topbar{display:flex;align-items:center;gap:11px;position:sticky;top:0;z-index:20;padding:12px 16px;padding-top:max(12px,env(safe-area-inset-top));background:#16110ceb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--gf-line)}.gf-topbar img{width:30px;height:30px;border-radius:7px}.gf-topbar .t{font-weight:700;font-size:16px}.gf-content{padding:16px 14px 96px}.gf-bottomnav{display:flex;position:fixed;bottom:0;left:0;right:0;z-index:30;background:#16110cf2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid var(--gf-line);padding:6px 4px;padding-bottom:max(6px,env(safe-area-inset-bottom));justify-content:space-around}.gf-bottomnav a{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10px;color:var(--gf-text-faint);padding:4px 8px;border-radius:8px;flex:1;max-width:84px}.gf-bottomnav a.active{color:var(--gf-brass)}.gf-bottommore{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10px;color:var(--gf-text-faint);padding:4px 8px;border-radius:8px;flex:1;max-width:84px;background:none;border:none;cursor:pointer;font-family:inherit}.gf-sheet-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:#08060499;display:flex;align-items:flex-end}.gf-sheet{width:100%;background:var(--gf-bg-2);border-top:1px solid var(--gf-line);border-radius:16px 16px 0 0;padding:16px 14px;padding-bottom:max(16px,calc(env(safe-area-inset-bottom) + 70px));max-height:70vh;overflow-y:auto}.gf-grid.cols-4,.gf-grid.cols-3{grid-template-columns:repeat(2,1fr)}}@media (max-width: 560px){.gf-grid.cols-2,.gf-grid.cols-3,.gf-grid.cols-4{grid-template-columns:1fr}}
