:root{--color-primary:#ff6b35;--color-primary-dark:#e85020;--color-primary-soft:#fff1ea;--color-accent:#1e88a8;--color-accent-soft:#e6f3f7;--color-bg:#f6f7f9;--color-surface:#fff;--color-text:#1a2233;--color-text-muted:#6b7688;--color-border:#e4e8ee;--color-success:#2e9e5b;--color-success-soft:#e7f6ee;--color-warning:#e0a106;--color-warning-soft:#fdf4dd;--color-danger:#e23d4b;--color-danger-soft:#fdecee;--radius-sm:6px;--radius:10px;--radius-lg:16px;--radius-pill:999px;--shadow-sm:0 1px 2px rgba(26,34,51,.06);--shadow:0 4px 16px rgba(26,34,51,.08);--shadow-lg:0 12px 32px rgba(26,34,51,.12);--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-8:48px}*,:after,:before{box-sizing:border-box;margin:0;padding:0}body,html{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang TC,Microsoft JhengHei,Roboto,sans-serif;background:var(--color-bg);color:var(--color-text);line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}.container{max-width:1080px}.container,.container-narrow{width:100%;margin:0 auto;padding:0 var(--space-5)}.container-narrow{max-width:560px}.page{padding:var(--space-6) 0 var(--space-8)}.stack{display:flex;flex-direction:column;gap:var(--space-4)}.row,.row-between{display:flex;align-items:center;gap:var(--space-3)}.row-between{justify-content:space-between}.grow{flex:1 1}.h1{font-size:1.75rem;font-weight:800;letter-spacing:-.01em}.h2{font-size:1.3rem}.h2,.h3{font-weight:700}.h3{font-size:1.05rem}.muted{color:var(--color-text-muted)}.text-sm{font-size:.875rem}.text-xs{font-size:.78rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:.6rem 1.15rem;border:1px solid transparent;border-radius:var(--radius);font-size:.95rem;font-weight:600;transition:background .15s,border-color .15s,transform .05s,opacity .15s;white-space:nowrap}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--color-primary-dark)}.btn-outline{background:var(--color-surface);border-color:var(--color-border);color:var(--color-text)}.btn-outline:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary)}.btn-ghost{background:transparent;color:var(--color-text-muted)}.btn-ghost:hover:not(:disabled){background:var(--color-bg);color:var(--color-text)}.btn-danger{background:var(--color-danger);color:#fff}.btn-danger:hover:not(:disabled){filter:brightness(.95)}.btn-success{background:var(--color-success);color:#fff}.btn-success:hover:not(:disabled){filter:brightness(.95)}.btn-accent{background:var(--color-accent);color:#fff}.btn-accent:hover:not(:disabled){filter:brightness(.95)}.table tbody tr.row-clickable{transition:background .12s}.table tbody tr.row-clickable:hover{background:var(--color-primary-soft)}.btn-block{width:100%}.btn-sm{padding:.35rem .7rem;font-size:.82rem}.btn-lg{padding:.8rem 1.5rem;font-size:1rem}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.card-pad{padding:var(--space-5)}.field{display:flex;flex-direction:column;gap:var(--space-2)}.label{font-size:.875rem;font-weight:600;color:var(--color-text)}.label .req{color:var(--color-danger);margin-left:2px}.input,.select,.textarea{width:100%;padding:.6rem .8rem;border:1px solid var(--color-border);border-radius:var(--radius);font-size:.95rem;font-family:inherit;background:var(--color-surface);color:var(--color-text);transition:border-color .15s,box-shadow .15s}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-soft)}.textarea{resize:vertical;min-height:84px}.field-error{color:var(--color-danger);font-size:.8rem}.help{color:var(--color-text-muted);font-size:.8rem}.badge{display:inline-flex;align-items:center;gap:4px;padding:.2rem .6rem;border-radius:var(--radius-pill);font-size:.78rem;font-weight:600;line-height:1.4}.badge-primary{background:var(--color-primary-soft);color:var(--color-primary-dark)}.badge-accent{background:var(--color-accent-soft);color:var(--color-accent)}.badge-neutral{background:var(--color-bg);color:var(--color-text-muted);border:1px solid var(--color-border)}.badge-success{background:var(--color-success-soft);color:var(--color-success)}.badge-warning{background:var(--color-warning-soft);color:var(--color-warning)}.badge-danger{background:var(--color-danger-soft);color:var(--color-danger)}.divider{height:1px;background:var(--color-border);border:none;margin:var(--space-4) 0}.empty{text-align:center;padding:var(--space-8) var(--space-4);color:var(--color-text-muted)}.empty-icon{font-size:2.5rem;margin-bottom:var(--space-3)}.spinner{width:22px;height:22px;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.center-screen{min-height:60vh;display:flex;align-items:center;justify-content:center}.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));grid-gap:var(--space-4);gap:var(--space-4)}.info-row{display:flex;gap:var(--space-3);padding:var(--space-2) 0;font-size:.92rem}.info-row .info-key{color:var(--color-text-muted);min-width:84px}.table{width:100%;border-collapse:collapse;font-size:.92rem}.table td,.table th{padding:var(--space-3);text-align:left;border-bottom:1px solid var(--color-border);vertical-align:middle}.table th{color:var(--color-text-muted);font-weight:600;white-space:nowrap}.table tbody tr:last-child td{border-bottom:none}.metric-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));grid-gap:var(--space-3);gap:var(--space-3)}.metric{border:1px solid var(--color-border);border-radius:var(--radius);padding:var(--space-4);text-align:center;background:var(--color-bg)}.metric-value{font-size:1.8rem;font-weight:700;color:var(--color-primary);line-height:1.2}.metric-label{font-size:.85rem;margin-top:var(--space-1)}