:root{--o-brand:#243742;--o-brand-dark:#1a2831;--o-primary:#5d8da8;--o-bg:#f2f2f7;--o-border:#e7e9ed;--o-text:#374151;--o-muted:#8b8f9a;--o-sidebar-bg:#111827;--o-sidebar-text:#dee2e6;--o-sidebar-active:#5d8da8;--o-success:#28a745;--o-warning:#ffac00;--o-danger:#dc3545}*{box-sizing:border-box}body{background:var(--o-bg);color:var(--o-text);margin:0;font-family:Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px}a{color:var(--o-primary);text-decoration:none}.o-topbar{border-bottom:1px solid var(--o-border);background:#fff;justify-content:space-between;align-items:center;height:46px;padding:0 16px;display:flex}.o-topbar .left{align-items:center;gap:12px;display:flex}.o-topbar .app{color:#111827;font-size:15px;font-weight:600}.o-topbar .crumb{color:var(--o-muted);font-size:13px}.o-topbar .right{align-items:center;gap:12px;display:flex}.o-topbar .right a{color:var(--o-muted);font-size:13px}.o-topbar .right a:hover{color:var(--o-primary)}.o-topbar.dark{background:var(--o-sidebar-bg);border-bottom:none}.o-topbar.dark .app{color:#fff}.o-topbar.dark .right a{color:var(--o-sidebar-text)}.o-topbar.dark .right a:hover{color:#fff}.o-avatar{background:var(--o-primary);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:13px;font-weight:600;display:flex}.o-content{width:100%;max-width:1080px;margin:24px auto;padding:0 24px}.o-sheet{border:1px solid var(--o-border);background:#fff;border-radius:4px;padding:32px 40px;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000a}.o-ribbon{background:var(--o-success);color:#fff;letter-spacing:.08em;padding:5px 48px;font-size:13px;font-weight:700;position:absolute;top:26px;right:-40px;transform:rotate(45deg);box-shadow:0 2px 4px #0003}.o-list{border-collapse:collapse;border:1px solid var(--o-border);background:#fff;border-radius:4px;width:100%}.o-list th{text-align:left;border-bottom:1px solid var(--o-border);color:var(--o-muted);text-transform:uppercase;letter-spacing:.03em;background:#fff;padding:10px 12px;font-size:12px;font-weight:600}.o-list td{border-bottom:1px solid var(--o-border);padding:10px 12px}.o-list tbody tr:hover{background:#eef3f7}.o-list .num{text-align:right;font-variant-numeric:tabular-nums}.o-btn{background:var(--o-brand);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:8px 16px;font-size:14px;display:inline-block}.o-btn:hover{background:var(--o-brand-dark)}.o-btn.secondary{color:var(--o-text);border:1px solid var(--o-border);background:#fff}.o-btn.secondary:hover{background:var(--o-bg)}.o-badge{border-radius:20px;padding:2px 10px;font-size:12px;font-weight:600;display:inline-block}.o-badge.success{background:var(--o-success);color:#fff}.o-badge.warning{background:var(--o-warning);color:#4a3800}.o-badge.danger{background:var(--o-danger);color:#fff}.o-badge.muted{color:#5b5f6b;background:#ececf0}.o-login-wrap{background:var(--o-bg);justify-content:center;align-items:center;min-height:100vh;display:flex}.o-login{border:1px solid var(--o-border);background:#fff;border-radius:6px;width:360px;padding:36px;box-shadow:0 2px 8px #0000000f}.o-login h1{color:var(--o-primary);text-align:center;margin:0 0 4px;font-size:20px}.o-login p.sub{text-align:center;color:var(--o-muted);margin:0 0 24px}.o-login label{margin:12px 0 4px;font-size:13px;font-weight:600;display:block}.o-login input{border:1px solid var(--o-border);border-radius:4px;width:100%;padding:9px 10px;font-size:14px}.o-login input:focus{outline:2px solid var(--o-primary);outline-offset:-1px;border-color:var(--o-primary)}.o-login .o-btn{width:100%;margin-top:20px;padding:10px}.o-error{color:#92222d;background:#f8d7da;border-radius:4px;margin-bottom:8px;padding:8px 12px;font-size:13px}.o-breadcrumb{color:var(--o-muted);margin-bottom:12px;font-size:13px}.o-title{color:#111827;margin:0 0 2px;font-size:24px;font-weight:600}.o-subtitle{color:var(--o-muted);margin:0 0 20px}.o-kv{grid-template-columns:160px 1fr;gap:6px 16px;margin:16px 0;display:grid}.o-kv dt{color:var(--o-muted)}.o-kv dd{margin:0;font-weight:500}.o-totals{width:260px;margin-top:16px;margin-left:auto;line-height:2}.o-totals .row{justify-content:space-between;display:flex}.o-totals .grand{border-top:2px solid var(--o-border);font-size:16px;font-weight:700}
