:root{--bg: #F8FAFC;--surface: #FFFFFF;--border: #E2E8F0;--text: #0F172A;--text-muted: #64748B;--accent: #3B82F6;--accent-soft: #EFF6FF;--positive: #16A34A;--positive-soft: #F0FDF4;--negative: #DC2626;--negative-soft: #FEF2F2;--warning: #D97706;--warning-soft: #FFFBEB;--radius: 12px;--radius-sm: 8px;--shadow: 0 1px 2px rgba(15, 23, 42, .05);--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 24px}*{box-sizing:border-box}html{color-scheme:light}body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5}h1,h2,h3,p{margin:0}a{color:var(--accent);text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app{display:flex;min-height:100vh}.sidebar{display:none;width:236px;flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);padding:var(--s4) var(--s3);position:sticky;top:0;height:100vh;overflow:auto}.brand{font-weight:700;font-size:16px;padding:var(--s2) var(--s3) var(--s4)}.nav-title{font-size:12px;color:var(--text-muted);font-weight:600;padding:var(--s3) var(--s3) var(--s1)}.nav-link{display:flex;align-items:center;gap:10px;padding:8px var(--s3);border-radius:var(--radius-sm);color:var(--text-muted);font-weight:500}.nav-link:hover{background:var(--bg);color:var(--text)}.nav-link.active{background:var(--accent-soft);color:var(--accent)}.main{flex:1;min-width:0;width:100%;max-width:1180px;margin:0 auto;padding:var(--s4) var(--s4) 110px}.bottomnav{position:fixed;left:0;right:0;bottom:0;background:var(--surface);border-top:1px solid var(--border);display:flex;padding-bottom:env(safe-area-inset-bottom);z-index:20}.bottomnav a,.bottomnav button{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 0;font-size:11px;color:var(--text-muted);background:none;border:0;cursor:pointer}.bottomnav a.active{color:var(--accent)}.fab{position:fixed;right:16px;bottom:calc(76px + env(safe-area-inset-bottom));width:52px;height:52px;border-radius:50%;background:var(--accent);color:#fff;border:0;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #3b82f666;z-index:20;cursor:pointer}@media (min-width: 900px){.sidebar{display:block}.bottomnav,.fab{display:none!important}.main{padding:var(--s5) 32px 48px}}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s3);margin-bottom:var(--s4);flex-wrap:wrap}.page-head h1{font-size:22px;font-weight:700}.page-head p{color:var(--text-muted)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--s4);min-width:0}.card-head{display:flex;justify-content:space-between;align-items:center;gap:var(--s2);margin-bottom:var(--s3);flex-wrap:wrap}.card-head h2{font-size:15px;font-weight:600}.grid{display:grid;gap:var(--s3);margin-bottom:var(--s3)}.stats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.cols{grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr))}.stat .label{color:var(--text-muted);font-size:12px}.stat .value{font-size:20px;font-weight:700;margin-top:2px;word-break:break-word}.stat .sub{color:var(--text-muted);font-size:12px;margin-top:2px}.pos{color:var(--positive)}.neg{color:var(--negative)}.warn{color:var(--warning)}.muted{color:var(--text-muted)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);cursor:pointer;font-weight:500;white-space:nowrap}.btn:hover{background:var(--bg)}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:#2563eb}.btn-danger{color:var(--negative);border-color:#fecaca}.btn-ghost{border-color:transparent;background:transparent;color:var(--text-muted);padding:6px 8px}.btn-sm{padding:4px 10px;font-size:13px}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:var(--s3)}.field label{font-weight:500;font-size:13px}.field .hint{color:var(--text-muted);font-size:12px}input[type=text],input[type=number],input[type=date],input[type=email],input[type=password],select,textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}textarea{min-height:72px;resize:vertical}.check{display:flex;align-items:center;gap:8px}.check input{width:18px;height:18px}.toolbar{display:flex;gap:var(--s2);flex-wrap:wrap;margin-bottom:var(--s3)}.toolbar>*{flex:1 1 140px;min-width:0}.toolbar .btn{flex:0 0 auto}.seg{display:inline-flex;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;background:var(--surface)}.seg button{border:0;background:none;padding:6px 12px;cursor:pointer;color:var(--text-muted);font-weight:500}.seg button.on{background:var(--accent-soft);color:var(--accent)}.range{display:flex;gap:var(--s2);align-items:center;flex-wrap:wrap}.range input{width:auto}.modal-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a66;display:flex;align-items:flex-end;justify-content:center;z-index:50}.modal{background:var(--surface);width:100%;max-width:520px;max-height:92vh;overflow:auto;border-radius:16px 16px 0 0;padding:var(--s4)}@media (min-width: 640px){.modal-back{align-items:center}.modal{border-radius:var(--radius)}}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--s3)}.modal-head h2{font-size:17px}.modal-actions{display:flex;gap:var(--s2);justify-content:flex-end;margin-top:var(--s2)}.modal-actions .spacer{flex:1}.err{background:var(--negative-soft);color:var(--negative);padding:8px 12px;border-radius:var(--radius-sm);margin-bottom:var(--s3)}.days{display:flex;gap:6px;flex-wrap:wrap}.days button{border:1px solid var(--border);background:var(--surface);border-radius:999px;padding:4px 10px;cursor:pointer}.days button.on{background:var(--accent);color:#fff;border-color:var(--accent)}.list{display:flex;flex-direction:column}.row{display:flex;align-items:center;gap:var(--s3);padding:10px 0;border-bottom:1px solid var(--border)}.row:last-child{border-bottom:0}.row .grow{flex:1;min-width:0}.row .title{font-weight:500;overflow-wrap:anywhere}.row .meta{color:var(--text-muted);font-size:12px}.row.click{cursor:pointer}.row.click:hover{background:var(--bg)}.badge{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;background:var(--bg);color:var(--text-muted);border:1px solid var(--border);margin-right:4px}.badge.high,.badge.neg{background:var(--negative-soft);color:var(--negative);border-color:#fecaca}.badge.medium,.badge.warn{background:var(--warning-soft);color:var(--warning);border-color:#fde68a}.badge.pos{background:var(--positive-soft);color:var(--positive);border-color:#bbf7d0}.tick{width:22px;height:22px;border-radius:6px;border:2px solid var(--border);background:var(--surface);cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0;padding:0}.tick.on{background:var(--positive);border-color:var(--positive)}.progress{height:8px;background:var(--border);border-radius:999px;overflow:hidden}.progress>div{height:100%;background:var(--accent);border-radius:999px}.empty{text-align:center;color:var(--text-muted);padding:var(--s5) var(--s3)}.spinner{width:28px;height:28px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;margin:40px auto}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.spinner{animation-duration:3s}}.toasts{position:fixed;top:12px;left:50%;transform:translate(-50%);z-index:100;display:flex;flex-direction:column;gap:8px;width:min(92vw,380px)}.toast{padding:10px 14px;border-radius:var(--radius-sm);background:var(--text);color:#fff;box-shadow:0 4px 12px #0003}.toast.err{background:var(--negative)}.chart{width:100%;height:240px}.center-page{max-width:400px;margin:10vh auto;padding:0 var(--s4)}.notice{background:var(--accent-soft);color:#1e40af;padding:10px 12px;border-radius:var(--radius-sm);font-size:13px}.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal .dh{text-align:center;font-size:12px;color:var(--text-muted);padding:4px 0}.cal button{aspect-ratio:1 / 1;min-height:44px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:4px;gap:2px}.cal button.out{opacity:.4}.cal button.today{border-color:var(--accent)}.cal button.sel{background:var(--accent-soft)}.cal .dots{display:flex;gap:2px;flex-wrap:wrap;justify-content:center}.cal .dot{width:6px;height:6px;border-radius:50%;background:var(--accent)}.cal .dot.p{background:var(--warning)}.cal .dot.g{background:var(--positive)}.cal .dot.l{background:var(--negative)}.hdots{display:flex;gap:4px}.hdots button{width:22px;height:22px;border-radius:50%;border:1px solid var(--border);background:var(--surface);cursor:pointer;padding:0}.hdots button.on{background:var(--positive);border-color:var(--positive)}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:8px;border-bottom:1px solid var(--border);white-space:nowrap}th{color:var(--text-muted);font-weight:500;font-size:12px}td.num,th.num{text-align:right}
