:root{--ub-bg:#fff;--ub-sidebar:#f7f8f9;--ub-surface:#fff;--ub-surface-2:#f4f5f7;--ub-surface-3:#e9ebee;--ub-ink:#16181d;--ub-ink-soft:#3d424b;--ub-ink-faint:#6b7280;--ub-ink-faintest:#9096a0;--ub-border:#e8eaed;--ub-border-2:#eef0f2;--ub-accent:#2563eb;--ub-accent-dark:#1d4ed8;--ub-accent-soft:#eff5ff;--ub-accent-line:#d5e3fd;--ub-success:#16a34a;--ub-success-soft:#e8f8ee;--ub-success-dark:#15803d;--ub-warning:#ea9a08;--ub-warning-soft:#fdf5e4;--ub-warning-dark:#b45309;--ub-warning-line:#f6e2b4;--ub-gold:#ea9a08;--ub-gold-soft:#fdf5e4;--ub-gold-dark:#b45309;--ub-danger:#dc2626;--ub-danger-soft:#fdeeee;--ub-danger-dark:#b42318;--ub-info:#7c3aed;--ub-info-soft:#f3efff;--ub-info-dark:#6d28d9;--ub-orange-soft:#fdf0e6;--ub-orange-dark:#c2410c;--ub-radius-sm:8px;--ub-radius:10px;--ub-radius-lg:12px;--ub-sidebar-w:262px}.ub-shell{background:var(--ub-bg);min-height:100vh;color:var(--ub-ink);font-family:var(--font-body), Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;font-size:15px;display:flex}.ub-shell h1,.ub-shell h2,.ub-shell h3,.ub-shell h4{letter-spacing:-.015em;margin:0;font-family:inherit;font-weight:700}.ub-shell a{color:var(--ub-accent-dark);text-decoration:none}.ub-shell a:hover{color:var(--ub-accent)}.ub-sidebar{flex:0 0 var(--ub-sidebar-w);background:var(--ub-sidebar);border-right:1px solid var(--ub-border);flex-direction:column;height:100vh;padding:20px 14px 16px;display:flex;position:sticky;top:0}.ub-brand{align-items:center;gap:11px;padding:2px 8px 26px;display:flex}.ub-brand img{object-fit:contain;flex:none;width:30px;height:30px}.ub-brand span{letter-spacing:-.015em;color:var(--ub-ink);flex:1;font-size:15.5px;font-weight:700}.ub-sidebar-toggle{border:1px solid var(--ub-border);background:var(--ub-surface);width:26px;height:26px;color:var(--ub-ink-faint);cursor:pointer;border-radius:8px;flex:none;justify-content:center;align-items:center;display:flex}.ub-sidebar-toggle:hover{color:var(--ub-ink);background:var(--ub-surface-2)}.ub-sidebar.collapsed{flex-basis:76px;padding-left:10px;padding-right:10px}.ub-sidebar.collapsed .ub-brand{justify-content:center;padding-bottom:20px}.ub-sidebar.collapsed .ub-navitem{justify-content:center;padding:10px}.ub-sidebar.collapsed .ub-sidebar-user{justify-content:center;padding:10px 0}.ub-navgroup-label{text-transform:uppercase;letter-spacing:.04em;color:var(--ub-ink-faintest);padding:16px 12px 6px;font-size:11.5px;font-weight:700}.ub-navgroup-label:first-child{padding-top:4px}.ub-navitem{border-radius:var(--ub-radius-sm);color:var(--ub-ink-soft);cursor:pointer;align-items:center;gap:12px;padding:9px 12px;font-size:14px;font-weight:500;display:flex}.ub-navitem:hover{background:var(--ub-surface-3)}.ub-navitem.active{background:var(--ub-surface-3);color:var(--ub-ink);font-weight:700}.ub-navitem svg{color:var(--ub-ink-faint);flex:none}.ub-navitem.active svg{color:var(--ub-accent)}.ub-sidebar-spacer{flex:1}.ub-sidebar-user{border-radius:var(--ub-radius-sm);border-top:1px solid var(--ub-border);align-items:center;gap:11px;margin-top:6px;padding:14px 10px 10px;display:flex}.ub-sidebar-user button{color:var(--ub-ink-faint);cursor:pointer;background:0 0;border:0;flex:none;padding:4px}.ub-sidebar-user button:hover{color:var(--ub-ink)}.ub-avatar{color:#fff;letter-spacing:-.01em;background:linear-gradient(150deg,#4c8ff5,#2563eb);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:12px;font-weight:600;display:flex}.ub-main{flex:1;min-width:0;max-width:1420px;padding:30px 34px 64px}.ub-topbar{justify-content:space-between;align-items:center;margin-bottom:28px;display:flex}.ub-search{border:1px solid var(--ub-border);background:var(--ub-surface);border-radius:var(--ub-radius-sm);color:var(--ub-ink-faintest);align-items:center;gap:8px;width:280px;padding:10px 14px;font-size:14px;display:flex}.ub-icon-btn{border-radius:var(--ub-radius-sm);cursor:pointer;width:34px;height:34px;color:var(--ub-ink-faint);justify-content:center;align-items:center;display:flex;position:relative}.ub-icon-btn:hover{background:var(--ub-surface-2);color:var(--ub-ink)}.ub-card{background:var(--ub-surface);border:1px solid var(--ub-border);border-radius:var(--ub-radius-lg);padding:22px}.ub-kpi{padding:22px 24px}.ub-kpi-icon{border-radius:10px;justify-content:center;align-items:center;width:36px;height:36px;margin-bottom:14px;display:flex}.ub-kpi-value{letter-spacing:-.03em;font-size:28px;font-weight:700;line-height:1}.ub-kpi-label{color:var(--ub-ink-faint);margin-top:10px;font-size:13.5px}.ub-menu-item:hover{background:var(--ub-surface-2)}.ub-btn{border-radius:var(--ub-radius-sm);cursor:pointer;white-space:nowrap;border:1px solid #0000;align-items:center;gap:8px;padding:10px 17px;font-size:14.5px;font-weight:600;display:inline-flex}.ub-btn-primary{background:var(--ub-accent);color:#fff}.ub-btn-primary:hover{background:var(--ub-accent-dark)}.ub-btn-ghost{background:var(--ub-surface);border-color:var(--ub-border);color:var(--ub-ink-soft)}.ub-btn-ghost:hover{background:var(--ub-surface-2)}.ub-btn-danger{border-color:var(--ub-danger);color:var(--ub-danger-dark);background:0 0}.ub-btn:disabled{opacity:.45;cursor:default}.ub-pill{white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:4px 11px;font-size:12.5px;font-weight:600;display:inline-flex}.ub-pill-accent{background:var(--ub-accent-soft);color:var(--ub-accent-dark)}.ub-pill-gold{background:var(--ub-gold-soft);color:var(--ub-gold-dark)}.ub-pill-success{background:var(--ub-success-soft);color:var(--ub-success-dark)}.ub-pill-warning{background:var(--ub-warning-soft);color:var(--ub-warning-dark)}.ub-pill-danger{background:var(--ub-danger-soft);color:var(--ub-danger-dark)}.ub-pill-info{background:var(--ub-info-soft);color:var(--ub-info-dark)}.ub-pill-neutral{background:var(--ub-surface-2);color:var(--ub-ink-faint)}.ub-banner{border-radius:var(--ub-radius);border:1px solid #0000;align-items:center;gap:10px;margin-bottom:16px;padding:10px 16px;font-size:13px;font-weight:600;display:flex}.ub-banner-accent{background:var(--ub-accent-soft);color:var(--ub-accent-dark);border-color:var(--ub-accent-line)}.ub-banner-warning{background:var(--ub-warning-soft);color:var(--ub-warning-dark);border-color:var(--ub-warning-line)}.ub-banner-success{background:var(--ub-success-soft);color:var(--ub-success-dark);border-color:#c6ead4}.ub-tabs{flex-wrap:wrap;gap:8px;margin-bottom:20px;display:flex}.ub-tab{border:1px solid var(--ub-border);color:var(--ub-ink-soft);background:var(--ub-surface);cursor:pointer;border-radius:999px;padding:8px 15px;font-size:13.5px;font-weight:600}.ub-tab.active{background:var(--ub-ink);color:#fff;border-color:var(--ub-ink)}.ub-table{border-collapse:collapse;width:100%}.ub-table th{text-align:left;color:var(--ub-ink-faint);border-bottom:1px solid var(--ub-border);padding:0 10px 13px;font-size:13px;font-weight:600}.ub-table td{border-bottom:1px solid var(--ub-border-2);color:var(--ub-ink);vertical-align:middle;padding:15px 10px;font-size:14.5px}.ub-table tr:last-child td{border-bottom:0}.ub-table tr.ub-row-overdue td:first-child{border-left:3px solid var(--ub-danger)}.ub-table tr.ub-row-due td:first-child{border-left:3px solid var(--ub-warning)}.ub-track{grid-template-columns:repeat(auto-fit,minmax(90px,1fr));display:grid}.ub-step{text-align:center;flex-direction:column;align-items:center;gap:8px;display:flex;position:relative}.ub-step:before{content:"";background:var(--ub-border);height:2px;position:absolute;top:14px;left:-50%;right:50%}.ub-step:first-child:before{display:none}.ub-step.done:before{background:var(--ub-success)}.ub-step-bullet{background:var(--ub-surface-2);width:29px;height:29px;color:var(--ub-ink-faint);z-index:1;border:2px solid var(--ub-surface);border-radius:50%;justify-content:center;align-items:center;font-size:12.5px;font-weight:700;display:flex}.ub-step.done .ub-step-bullet{background:var(--ub-success-soft);color:var(--ub-success-dark)}.ub-step.now .ub-step-bullet{background:var(--ub-accent);color:#fff;box-shadow:0 0 0 4px var(--ub-accent-soft)}.ub-step-label{color:var(--ub-ink-faint);font-size:12px}.ub-step.now .ub-step-label{color:var(--ub-ink);font-weight:650}.ub-field label{color:var(--ub-ink-soft);margin-bottom:8px;font-size:13.5px;font-weight:600;display:block}.ub-field input,.ub-field select,.ub-field textarea{border:1px solid var(--ub-border);border-radius:var(--ub-radius-sm);width:100%;color:var(--ub-ink);background:var(--ub-surface);padding:11px 13px;font-family:inherit;font-size:14.5px}.ub-field input:focus,.ub-field select:focus,.ub-field textarea:focus{border-color:var(--ub-accent);box-shadow:0 0 0 3px var(--ub-accent-soft);outline:none}.ub-field textarea{resize:vertical;min-height:80px}.ub-page-head{justify-content:space-between;align-items:center;gap:16px;margin-bottom:22px;display:flex}.ub-page-head p{color:var(--ub-ink-faint);margin:6px 0 0;font-size:15px}.ub-kpi-row{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:16px;margin-bottom:24px;display:grid}.ub-kpi-strip{border:1px solid var(--ub-border);border-radius:var(--ub-radius-lg);background:var(--ub-surface);grid-template-columns:repeat(auto-fit,minmax(140px,1fr));margin-bottom:24px;display:grid;overflow:hidden}.ub-kpi-strip-item{border-right:1px solid var(--ub-border);color:inherit;align-items:baseline;gap:8px;min-width:0;padding:12px 16px;text-decoration:none;display:flex}.ub-kpi-strip-item:last-child{border-right:none}.ub-kpi-strip-item:hover{background:var(--ub-surface-2)}.ub-kpi-strip-value{letter-spacing:-.02em;white-space:nowrap;font-size:17px;font-weight:700;line-height:1}.ub-kpi-strip-label{color:var(--ub-ink-faint);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}@media (max-width:900px){.ub-kpi-strip{grid-template-columns:repeat(3,1fr)}.ub-kpi-strip-item:nth-child(3n){border-right:none}.ub-kpi-strip-item:nth-child(n+4){border-top:1px solid var(--ub-border)}}@media (max-width:560px){.ub-kpi-strip{grid-template-columns:repeat(2,1fr)}.ub-kpi-strip-item{flex-direction:column;align-items:flex-start;gap:2px}.ub-kpi-strip-item:nth-child(3n){border-right:1px solid var(--ub-border)}.ub-kpi-strip-item:nth-child(2n){border-right:none}.ub-kpi-strip-item:nth-child(n+3){border-top:1px solid var(--ub-border)}}.ub-empty{text-align:center;color:var(--ub-ink-faint);border:1px dashed var(--ub-border);border-radius:var(--ub-radius);background:var(--ub-surface);padding:32px;font-size:14px}
*{box-sizing:border-box}body{margin:0}
