:root{--bg: #f4f6fb;--bg-deep: #e9edf6;--panel: #ffffff;--panel-soft: #fafbfe;--ink: #131a26;--ink-soft: #3c4757;--muted: #6b7789;--line: #e3e8f0;--line-strong: #cfd7e4;--accent: #2b5ce6;--accent-dark: #1c40b4;--accent-soft: #e8eefe;--accent-ink: #1b3a99;--danger: #c0342b;--danger-soft: #fdeceb;--warn: #8a5a00;--warn-soft: #fff6e3;--ok: #1a7a4a;--ok-soft: #e6f6ed;--info-soft: #eef2fa;--radius-sm: 8px;--radius: 12px;--radius-lg: 18px;--radius-pill: 999px;--shadow-xs: 0 1px 2px rgba(19, 26, 38, .06);--shadow-sm: 0 2px 8px rgba(19, 26, 38, .06);--shadow: 0 8px 24px rgba(19, 26, 38, .08);--shadow-lg: 0 18px 48px rgba(19, 26, 38, .14);--ring: 0 0 0 3px rgba(43, 92, 230, .18);--ease: cubic-bezier(.22, .61, .36, 1);--fast: .12s var(--ease);--slow: .24s var(--ease)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:radial-gradient(1200px 500px at 15% -10%,#e8efff,#e8efff00 60%),radial-gradient(900px 420px at 100% 0%,#eef7f2,#eef7f200 55%),var(--bg);color:var(--ink);font:14.5px/1.55 Inter,Segoe UI,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased}h1,h2,h3{letter-spacing:-.015em}a{color:var(--accent);text-decoration:none;transition:color var(--fast)}a:hover{color:var(--accent-dark);text-decoration:none}.app{min-height:100vh;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:22px;padding:14px 28px;background:linear-gradient(120deg,#101a2e,#16233a 55%,#1b2c49);color:#fff;box-shadow:var(--shadow-sm);-webkit-backdrop-filter:saturate(140%) blur(6px);backdrop-filter:saturate(140%) blur(6px)}.topbar .brand{display:inline-flex;align-items:center;gap:9px;font-weight:700;letter-spacing:.14em;font-size:13px;color:#fff;padding:6px 12px;border-radius:var(--radius-pill);background:#ffffff17}.topbar .brand:before{content:"";width:8px;height:8px;border-radius:50%;background:linear-gradient(140deg,#7fb1ff,#4ade9b);box-shadow:0 0 12px #7fb1ffcc}.topbar nav{display:flex;gap:6px}.topbar nav a{color:#c3d0e6;padding:6px 12px;border-radius:var(--radius-pill);font-size:13.5px;transition:background var(--fast),color var(--fast)}.topbar nav a:hover{background:#ffffff14;color:#fff}.topbar nav a.active{background:#ffffff24;color:#fff;border-bottom:none;box-shadow:inset 0 -2px #7fb1ff}.topbar .tagline{margin-left:auto;color:#93a6c4;font-size:12.5px}.content{padding:28px;max-width:1320px;width:100%;margin:0 auto;flex:1;animation:rise .32s var(--ease) both}@keyframes rise{0%{opacity:0;transform:translateY(6px)}}.page-head{display:flex;align-items:flex-start;gap:16px;margin-bottom:20px}.page-head h1{margin:0 0 6px;font-size:25px;font-weight:680}.page-head .sub{color:var(--muted);font-size:13.5px;max-width:72ch}.page-head .actions{margin-left:auto;display:flex;gap:8px;align-items:center}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);padding:22px;margin-bottom:20px;box-shadow:var(--shadow-xs);transition:box-shadow var(--slow),transform var(--slow),border-color var(--slow)}.panel:hover{box-shadow:var(--shadow-sm)}.panel h2{margin:0 0 14px;font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);display:flex;align-items:center;gap:9px}.panel h2:before{content:"";width:3px;height:14px;border-radius:2px;background:linear-gradient(180deg,var(--accent),#6ea8fe)}.card{border:1px solid var(--line);border-radius:var(--radius);padding:16px;background:var(--panel-soft)}.grid-2{display:grid;grid-template-columns:1.05fr .95fr;gap:20px;align-items:start}.grid-3{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}@media(max-width:1000px){.grid-2{grid-template-columns:1fr}}table{width:100%;border-collapse:separate;border-spacing:0;font-size:13.5px}th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top}th{color:var(--muted);font-weight:640;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;background:linear-gradient(180deg,#fbfcff,#f5f7fc);position:sticky;top:0;z-index:1}tbody tr{transition:background var(--fast)}tbody tr:hover{background:var(--accent-soft)}tbody tr:last-child td{border-bottom:none}.table-wrap{overflow:auto;max-height:62vh;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:var(--shadow-xs)}.table-wrap table{min-width:100%}.grid-wrap{overflow:auto;max-height:max(320px,calc(100vh - 330px));border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:var(--shadow-xs);transition:opacity var(--fast)}.grid-wrap.busy{opacity:.55}table.grid{border-collapse:separate;border-spacing:0;width:100%;font-size:13px;font-variant-numeric:tabular-nums}table.grid th{position:sticky;top:0;z-index:2;text-align:left;padding:9px 12px;font-size:11px;font-weight:650;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);background:linear-gradient(180deg,#f7f9fd,#eef2f9);border-bottom:1px solid var(--line-strong);white-space:nowrap;max-width:240px;overflow:hidden;text-overflow:ellipsis}table.grid th .sort-mark{margin-left:6px;color:var(--accent);font-size:9px}table.grid th.highlight{color:var(--accent-ink);background:linear-gradient(180deg,#eef4ff,#e2ecfe);box-shadow:inset 0 -2px 0 var(--accent)}table.grid td{padding:7px 12px;border-bottom:1px solid var(--line);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px;vertical-align:middle}table.grid td.highlight{background:#f7faff}table.grid tbody tr:nth-child(2n) td{background:#fcfdff}table.grid tbody tr:nth-child(2n) td.highlight{background:#f2f7ff}table.grid tbody tr:hover td{background:var(--accent-soft)}table.grid tbody tr:last-child td{border-bottom:none}table.grid .col-record{width:1%;white-space:nowrap}table.grid .col-system{width:1%;white-space:nowrap;color:var(--muted)}table.grid .col-actions{width:1%;white-space:nowrap}table.grid .col-actions .row-actions{gap:4px;flex-wrap:nowrap}.grid-foot{display:flex;align-items:center;gap:12px;margin-top:10px;font-size:12.5px;color:var(--muted)}.grid-foot .spacer{margin-left:auto}.density-toggle{display:inline-flex;gap:2px;padding:2px;border-radius:var(--radius-pill);background:var(--bg-deep)}.density-toggle button{display:inline-block;border:none;background:transparent;padding:3px 10px;border-radius:var(--radius-pill);font-size:11.5px;color:var(--muted);box-shadow:none}.density-toggle button.on{background:#fff;color:var(--accent-ink);box-shadow:var(--shadow-xs)}.grid-wrap.compact table.grid td{padding:3px 10px;font-size:12.5px}.grid-wrap.compact table.grid th{padding:6px 10px}.grid-wrap.roomy table.grid td{padding:12px}button,input,select,textarea{font:inherit}button{color:var(--ink);border:1px solid var(--line-strong);background:#fff;border-radius:var(--radius-sm);padding:8px 14px;cursor:pointer;font-weight:560;white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;gap:6px;transition:border-color var(--fast),color var(--fast),background var(--fast),box-shadow var(--fast),transform var(--fast)}button:hover:not(:disabled){border-color:var(--accent);color:var(--accent);box-shadow:var(--shadow-xs)}button:active:not(:disabled){transform:translateY(1px)}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:none;box-shadow:var(--ring);border-color:var(--accent)}button.primary{background:linear-gradient(135deg,var(--accent) 0%,#3f74f0 100%);border-color:transparent;color:#fff;box-shadow:0 6px 16px #2b5ce647}button.primary:hover:not(:disabled){background:linear-gradient(135deg,var(--accent-dark) 0%,#2f5fe0 100%);color:#fff;box-shadow:0 10px 22px #2b5ce657}button.ghost{background:transparent;border-color:transparent;color:var(--accent)}button.danger:hover:not(:disabled){border-color:var(--danger);color:var(--danger);background:var(--danger-soft)}button:disabled{opacity:.55;cursor:not-allowed;box-shadow:none}input,select,textarea{border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:9px 11px;background:#fff;width:100%;transition:border-color var(--fast),box-shadow var(--fast)}input:hover:not(:disabled),select:hover:not(:disabled),textarea:hover:not(:disabled){border-color:#b9c4d6}input:disabled,select:disabled{background:#f4f6fa;color:var(--muted)}input[type=checkbox]{width:auto;accent-color:var(--accent);width:15px;height:15px}textarea{min-height:76px;resize:vertical}label{display:block;font-size:12px;font-weight:560;color:var(--ink-soft);margin-bottom:5px}.form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px;margin-bottom:14px}.field-hint{font-size:12px;color:var(--muted);margin-top:5px}.checkbox{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--ink)}.checkbox input{width:auto}.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--radius-pill);font-size:11px;font-weight:650;letter-spacing:.02em;background:var(--info-soft);color:var(--muted);white-space:nowrap;border:1px solid transparent}.badge.ok{background:var(--ok-soft);color:var(--ok);border-color:#bfe4cf}.badge.warn{background:var(--warn-soft);color:var(--warn);border-color:#f0dcae}.badge.danger{background:var(--danger-soft);color:var(--danger);border-color:#f3c1bd}.badge.accent{background:var(--accent-soft);color:var(--accent-ink);border-color:#c9d8fb}.alert{border-radius:var(--radius);padding:12px 15px;margin-bottom:15px;border:1px solid transparent;font-size:13.5px;box-shadow:var(--shadow-xs);animation:rise .2s var(--ease) both}.alert.error{background:var(--danger-soft);border-color:#f2b8b5;color:var(--danger)}.alert.warn{background:var(--warn-soft);border-color:#f0d9a8;color:var(--warn)}.alert.ok{background:var(--ok-soft);border-color:#b6ddc6;color:var(--ok)}.alert ul{margin:7px 0 0;padding-left:18px}.alert strong{font-weight:680}.chips{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}.chip{display:inline-flex;align-items:center;gap:6px;background:var(--accent-soft);color:var(--accent-ink);border-radius:var(--radius-pill);padding:5px 12px;font-size:12.5px;box-shadow:var(--shadow-xs)}.chip button{border:none;background:none;padding:0;color:inherit;cursor:pointer;font-size:14px;line-height:1;box-shadow:none}.muted{color:var(--muted)}.small{font-size:12.5px}.empty{padding:34px;text-align:center;color:var(--muted);border:1px dashed var(--line-strong);border-radius:var(--radius);background:var(--panel-soft)}.row-actions{display:flex;gap:7px;flex-wrap:wrap;align-items:center}.row-actions button{padding:5px 10px;font-size:12.5px}.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-bottom:14px}.toolbar>*{width:auto}.toolbar .grow{flex:1;min-width:160px}.pager{display:flex;align-items:center;gap:12px;margin-top:14px;font-size:13px;color:var(--muted)}.mono{font-family:JetBrains Mono,Cascadia Mono,Consolas,monospace;font-size:12px;letter-spacing:-.01em}.kv{display:grid;grid-template-columns:230px 1fr;gap:0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.kv>div{padding:10px 12px;border-bottom:1px solid var(--line)}.kv>div:nth-child(odd){color:var(--muted);background:var(--panel-soft);font-size:12.5px;font-weight:560}.steps{display:flex;align-items:center;gap:10px;margin-bottom:18px;flex-wrap:wrap}.step{display:flex;align-items:center;gap:9px;padding:7px 14px 7px 9px;border-radius:var(--radius-pill);background:#fff;border:1px solid var(--line);color:var(--muted);font-size:13px;font-weight:560;box-shadow:var(--shadow-xs)}.step .num{display:inline-flex;align-items:center;justify-content:center;width:21px;height:21px;border-radius:50%;background:var(--info-soft);color:var(--muted);font-size:11.5px;font-weight:700}.step.active{border-color:#c9d8fb;color:var(--accent-ink);background:linear-gradient(180deg,#fff,var(--accent-soft))}.step.active .num{background:var(--accent);color:#fff}.step.done .num{background:var(--ok);color:#fff}.step-arrow{color:var(--line-strong);font-size:15px}.dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:30px 20px;border:2px dashed var(--line-strong);border-radius:var(--radius);background:linear-gradient(180deg,#fbfcff,#f4f7fd);text-align:center;transition:border-color var(--fast),background var(--fast),transform var(--fast);cursor:pointer}.dropzone:hover,.dropzone.dragging{border-color:var(--accent);background:linear-gradient(180deg,#f6f9ff,var(--accent-soft));transform:translateY(-1px)}.dropzone .icon{font-size:26px}.dropzone strong{font-size:15px}.sheet-picker{display:grid;gap:10px}.sheet-card{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;padding:14px 16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-soft);transition:border-color var(--fast),box-shadow var(--fast),background var(--fast)}.sheet-card:hover{border-color:#c9d8fb;box-shadow:var(--shadow-xs)}.sheet-card.picked{border-color:#bcd0fb;background:linear-gradient(120deg,#fff,var(--accent-soft));box-shadow:var(--shadow-xs)}.sheet-card .name{font-weight:640;font-size:14.5px;display:flex;align-items:center;gap:8px}.sheet-card .stats{color:var(--muted);font-size:12.5px;margin-top:3px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:6px}.stat{border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;background:linear-gradient(180deg,#fff,var(--panel-soft));box-shadow:var(--shadow-xs)}.stat .value{font-size:21px;font-weight:700;letter-spacing:-.02em}.stat .label{font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-top:2px}.toggle-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;font-size:13.5px}.switch{position:relative;display:inline-block;width:40px;height:22px;flex:none}.switch input{opacity:0;width:0;height:0}.switch span{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--radius-pill);background:var(--line-strong);transition:background var(--fast);cursor:pointer}.switch span:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:var(--shadow-xs);transition:transform var(--fast)}.switch input:checked+span{background:var(--accent)}.switch input:checked+span:after{transform:translate(18px)}.switch input:focus-visible+span{box-shadow:var(--ring)}.meter{height:7px;border-radius:var(--radius-pill);background:var(--bg-deep);overflow:hidden}.meter>span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--accent),#6ea8fe);transition:width var(--slow)}.meter.ok>span{background:linear-gradient(90deg,var(--ok),#4ade9b)}.meter.warn>span{background:linear-gradient(90deg,#d99b1e,#f5c65a)}.skeleton{height:14px;border-radius:6px;background:linear-gradient(90deg,#eef1f7 25%,#e2e8f3 37%,#eef1f7 63%);background-size:400% 100%;animation:shimmer 1.3s ease-in-out infinite}@keyframes shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}.spinner{width:16px;height:16px;border-radius:50%;border:2px solid rgba(43,92,230,.25);border-top-color:var(--accent);display:inline-block;animation:spin .7s linear infinite;vertical-align:-3px}@keyframes spin{to{transform:rotate(360deg)}}.tag-list{display:flex;flex-wrap:wrap;gap:6px}.type-pill{display:inline-flex;align-items:center;padding:2px 9px;border-radius:var(--radius-pill);font-size:11px;font-weight:650;background:var(--info-soft);color:var(--ink-soft);border:1px solid var(--line)}.type-pill.generated{background:linear-gradient(120deg,#efe8ff,#e8eefe);color:#4b34a8;border-color:#ddd2fb}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:24px;background:#101a2e6b;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);animation:fade .16s var(--ease) both}@keyframes fade{0%{opacity:0}}.modal{width:100%;max-width:520px;display:flex;flex-direction:column;max-height:min(86vh,720px);background:var(--panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);animation:pop .18s var(--ease) both}@keyframes pop{0%{opacity:0;transform:translateY(10px) scale(.985)}}.modal-head{display:flex;align-items:center;gap:12px;padding:16px 18px;border-bottom:1px solid var(--line)}.modal-head h2{margin:0;font-size:16px;text-transform:none;letter-spacing:-.01em;color:var(--ink)}.modal-head h2:before{display:none}.modal-head button{margin-left:auto;font-size:18px;line-height:1;padding:4px 10px}.modal-body{padding:18px;overflow:auto;flex:1 1 auto}.modal-foot{display:flex;gap:8px;justify-content:flex-end;align-items:center;padding:14px 18px;border-top:1px solid var(--line);background:var(--panel-soft);border-radius:0 0 var(--radius-lg) var(--radius-lg);flex:none}.segmented{display:inline-flex;padding:3px;gap:3px;border-radius:var(--radius-pill);background:var(--bg-deep);border:1px solid var(--line)}.segmented button{border:none;background:transparent;border-radius:var(--radius-pill);padding:5px 14px;font-size:12.5px;color:var(--muted);box-shadow:none;display:inline-block}.segmented button:hover:not(:disabled){color:var(--accent);background:#ffffffb3}.segmented button.on{background:#fff;color:var(--accent-ink);font-weight:640;box-shadow:var(--shadow-xs)}.danger-text{color:var(--danger)}.search-bar{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:10px}.search-term{position:relative;flex:1;min-width:260px;display:flex;align-items:center;gap:8px;padding:0 12px;border:1px solid var(--line-strong);border-radius:var(--radius-pill);background:#fff;box-shadow:var(--shadow-xs);transition:border-color var(--fast),box-shadow var(--fast)}.search-term:focus-within{border-color:var(--accent);box-shadow:var(--ring)}.search-term .search-icon{font-size:17px;color:var(--muted)}.search-term input{border:none;box-shadow:none;padding:10px 0;background:transparent}.search-term input:focus-visible{box-shadow:none}.search-term button.ghost{font-size:16px;padding:0 6px;color:var(--muted)}.search-term .spinner{flex:none}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px 20px;background:radial-gradient(900px 420px at 20% 0%,#e6efff,#e6efff00 60%),radial-gradient(700px 360px at 100% 100%,#eaf7f1,#eaf7f100 55%),var(--bg)}.login-card{width:100%;max-width:400px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);padding:28px;box-shadow:var(--shadow-lg);animation:rise .26s var(--ease) both}.login-card.wide{max-width:480px}.login-card h1{margin:18px 0 6px;font-size:22px;font-weight:680;letter-spacing:-.02em}.login-brand{display:flex;align-items:center;gap:12px}.login-brand .mark{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:12px;background:linear-gradient(140deg,var(--accent) 0%,#2f7be0 100%);color:#fff;font-weight:700;letter-spacing:.06em;font-size:13px;box-shadow:0 6px 16px #2b5ce647}.login-card button.primary{width:100%;padding:11px 14px}.login-card form>div{display:flex;flex-direction:column;gap:5px}.login-card label{font-weight:560}.user-menu{position:relative;margin-left:14px}.user-chip{display:inline-flex;align-items:center;gap:10px;padding:5px 12px 5px 6px;border-radius:var(--radius-pill);border:1px solid rgba(255,255,255,.14);background:#ffffff12;color:#fff}.user-chip:hover:not(:disabled){background:#ffffff24;border-color:#ffffff3d;color:#fff}.user-chip .avatar{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:linear-gradient(140deg,#7fb1ff,#4ade9b);color:#10203a;font-weight:700;font-size:12px}.user-chip .who{display:flex;flex-direction:column;align-items:flex-start;line-height:1.2;font-size:12.5px}.user-chip .who strong{font-weight:600}.user-chip .caret{color:#9fb0ca;font-size:10px}.user-dropdown{position:absolute;right:0;top:calc(100% + 8px);min-width:210px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:6px;z-index:30;animation:pop .14s var(--ease) both}.user-dropdown button{display:flex;align-items:center;gap:8px;width:100%;border:none;background:none;text-align:left;padding:9px 10px;border-radius:var(--radius-sm);box-shadow:none;font-size:13.5px}.user-dropdown button:hover:not(:disabled){background:var(--accent-soft);color:var(--accent-ink)}.user-dropdown button.danger-text:hover:not(:disabled){background:var(--danger-soft);color:var(--danger)}.segmented.menu{margin-left:0;background:#ffffff1a;border-color:#ffffff29}
