:root{--bg:#fff;--surface:#fff;--surface-2:#f4f6fa;--text:#17191e;--muted:#5b6578;--border:#e2e8f0;--primary:#51b848;--primary-hover:#439e3b;--primary-ink:#fff;--primary-soft:rgba(81,184,72,.12);--accent:#13e3ff;--accent-soft:rgba(19,227,255,.12);--dx-dark-blue:#1b2032;--dx-dark-border:#283046;--dx-dark-surface:#22293d;--dx-dark-surface-2:#283149;--dx-dark-text:#fff;--dx-dark-muted:#94a3b8;--success:#2e8526;--success-soft:rgba(81,184,72,.14);--warn:#b45309;--warn-soft:#fef3c7;--danger:#dc2626;--danger-soft:#fee2e2;--info:#0284c7;--info-soft:#e0f2fe;--radius:12px;--radius-sm:8px;--radius-pill:9999px;--shadow:0 1px 3px rgba(27,32,50,.06),0 1px 2px rgba(27,32,50,.04);--shadow-hover:0 6px 16px rgba(27,32,50,.08);--focus:0 0 0 3px rgba(81,184,72,.35);--font:"Manrope",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}.site-shell{background:#fff;display:flex;flex-direction:column;min-height:100vh}.portal-main,.site-main{background:#fff;flex:1 0 auto}a{color:var(--primary);text-decoration:none}a:hover{color:var(--primary-hover)}:focus-visible{border-radius:4px;box-shadow:var(--focus);outline:none}h1,h2,h3,h4{color:var(--text);font-family:var(--font);font-weight:700;line-height:1.25;margin:0 0 .5em}h1{font-size:2.15rem;font-weight:800;letter-spacing:-.02em}h2{font-size:1.45rem;font-weight:700}h3{font-size:1.15rem;font-weight:600}p{margin:0 0 1em}code,pre{font-family:var(--mono);font-size:.9em}img{max-width:100%}.skip-link{background:#fff;border-radius:6px;left:-999px;padding:8px 12px;position:absolute;top:8px;z-index:100}.skip-link:focus{left:8px}.container{margin:0 auto;max-width:1180px;padding:0 20px}.narrow{max-width:760px}.stack>*+*{margin-top:16px}.row{align-items:center;display:flex;flex-wrap:wrap;gap:12px}.row.between{justify-content:space-between}.grid{display:grid;gap:18px}.grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}@media(max-width:1024px){.grid.cols-3,.grid.cols-4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:680px){.grid.cols-2,.grid.cols-3,.grid.cols-4{grid-template-columns:1fr}}.muted{color:var(--muted)}.small{font-size:.875rem}.mono{font-family:var(--mono)}.right{text-align:right}.sr-only{height:1px;overflow:hidden;position:absolute;width:1px;clip:rect(0 0 0 0);white-space:nowrap}.kpi{color:var(--text);font-size:2.25rem;font-weight:800;letter-spacing:-.02em;line-height:1.1;margin-bottom:6px}.card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}.card:hover{border-color:#51b84866}.card.tight{padding:14px 16px}.card h2,.card h3{margin-top:0}.section{padding-bottom:48px;padding-top:48px}.section-title{align-items:baseline;display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;margin-bottom:16px}.section-title h2{margin-bottom:0}.btn{align-items:center;background:#fff;border:1px solid var(--border);border-radius:var(--radius-pill);color:var(--text);cursor:pointer;display:inline-flex;font-family:var(--font);font-size:.93rem;font-weight:600;gap:6px;justify-content:center;min-height:38px;padding:8px 18px;text-decoration:none;transition:all .15s ease}.btn:hover{background:var(--surface-2)}.btn.primary{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}.btn.primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.ghost{background:transparent;border-color:transparent}.btn.sm{border-radius:var(--radius-pill);font-size:.86rem;min-height:32px;padding:5px 14px}.btn:disabled,.btn[aria-disabled=true]{cursor:not-allowed;opacity:.55}label{display:block;font-size:.92rem;font-weight:600;margin-bottom:4px}.field{margin-bottom:14px}.field .hint{color:var(--muted);font-size:.85rem;margin-top:2px}.field .error{color:var(--danger);font-size:.85rem;margin-top:4px}input[type=date],input[type=datetime-local],input[type=email],input[type=number],input[type=search],input[type=text],input[type=url],select,textarea{background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-family:var(--font);font-size:.95rem;padding:9px 12px;width:100%}input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:var(--focus);outline:none}textarea{min-height:110px;resize:vertical}input[aria-invalid=true],select[aria-invalid=true],textarea[aria-invalid=true]{border-color:var(--danger)}.checkbox{align-items:flex-start;display:flex;font-weight:400;gap:8px}.checkbox input{height:18px;margin-top:4px;width:18px}table.table{background:#fff;border-collapse:collapse;width:100%}.table-wrap{border:1px solid var(--border);border-radius:var(--radius);overflow-x:auto}.table td,.table th{border-bottom:1px solid var(--border);font-size:.95rem;padding:11px 14px;text-align:left;vertical-align:top}.table th{background:var(--surface-2);color:var(--muted);font-size:.85rem;font-weight:600;white-space:nowrap}.table tr:last-child td{border-bottom:none}.badge{align-items:center;background:var(--surface-2);border:1px solid transparent;border-radius:var(--radius-pill);color:var(--muted);display:inline-flex;font-size:.78rem;font-weight:700;gap:4px;padding:2px 10px;white-space:nowrap}.badge.success{background:var(--success-soft);color:var(--success)}.badge.warn{background:var(--warn-soft);color:var(--warn)}.badge.danger{background:var(--danger-soft);color:var(--danger)}.badge.info{background:var(--info-soft);color:var(--info)}.badge.primary{background:var(--primary-soft);color:var(--primary)}.alert{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px}.alert.error{background:var(--danger-soft);border-color:transparent;color:var(--danger)}.alert.success{background:var(--success-soft);border-color:transparent;color:var(--success)}.alert.warn{background:var(--warn-soft);color:var(--warn)}.alert.info,.alert.warn{border-color:transparent}.alert.info{background:var(--info-soft);color:var(--info)}.tabs{border-bottom:1px solid var(--border);display:flex;flex-wrap:wrap;gap:4px;margin-bottom:16px}.tabs a,.tabs button{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);cursor:pointer;font-family:var(--font);font-weight:600;padding:10px 14px;text-decoration:none}.tabs .router-link-exact-active,.tabs [aria-selected=true]{border-bottom-color:var(--primary);color:var(--primary)}.prose{max-width:72ch}.prose h2{margin-top:1.4em}.prose ul{padding-left:1.2em}.prose pre{background:var(--surface-2);border-radius:8px;overflow-x:auto;padding:12px}.site-header{background:var(--dx-dark-blue);border-bottom:1px solid var(--dx-dark-border);position:sticky;top:0;z-index:40}.site-header .bar{align-items:center;display:flex;gap:16px;min-height:66px}.site-header .brand-link{align-items:center;display:flex;text-decoration:none}.site-header .nav{align-items:center;display:flex;flex-wrap:nowrap;gap:4px}.site-header .nav a{border-radius:var(--radius-pill);color:#cbd5e1;font-size:.92rem;font-weight:600;padding:6px 14px;text-decoration:none;transition:all .15s ease}.site-header .nav a:hover{background:#ffffff17;color:#fff}.site-header .nav a.router-link-active,.site-header .nav a.router-link-exact-active{background:#51b84840;border:1px solid rgba(81,184,72,.4);color:#fff}.site-header .search-input-pill{background:var(--dx-dark-surface)!important;border:1px solid var(--dx-dark-border)!important;border-radius:var(--radius-pill)!important;color:#fff!important;font-size:.88rem!important;padding:7px 14px!important}.site-header .search-input-pill::-moz-placeholder{color:var(--dx-dark-muted)!important}.site-header .search-input-pill::placeholder{color:var(--dx-dark-muted)!important}.site-header .search-input-pill:focus{border-color:var(--primary)!important;box-shadow:0 0 0 2px #51b84859!important}.site-header .request-btn{background:#ffffff1a!important;border:1px solid hsla(0,0%,100%,.2)!important;color:#fff!important}.site-header .request-btn:hover{background:#ffffff2e!important}.site-header .ghost-dark{background:#ffffff1a!important;border:1px solid hsla(0,0%,100%,.2)!important;color:#fff!important}.site-header .ghost-dark:hover{background:#ffffff2e!important}.hero.dx-hero{background:var(--dx-dark-blue);border-bottom:1px solid var(--dx-dark-border);color:#fff;padding:60px 0 52px}.hero.dx-hero .badge.primary{background:#51b8482e;border:1px solid rgba(81,184,72,.35);color:#6ed665}.hero-title{color:#fff;font-size:2.75rem;font-weight:800;letter-spacing:-.025em;margin:12px 0 8px}.hero-actions{margin-top:24px}.dx-btn-primary{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:700}.dx-btn-primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.dx-btn-ghost{background:#ffffff1a;border:1px solid hsla(0,0%,100%,.25);color:#fff}.dx-btn-ghost:hover{background:#ffffff2e;color:#fff}.hero-meta{color:var(--dx-dark-muted)}.bottom-blue-section{background:var(--dx-dark-blue);border-top:1px solid var(--dx-dark-border);color:#fff;padding:64px 0 48px}.bottom-blue-section .dark-section-title{color:#fff;margin-bottom:18px}.dark-card{background:var(--dx-dark-surface)!important;border:1px solid #343e59!important;box-shadow:0 4px 12px #0000002e!important;color:#fff!important}.dark-card:hover{border-color:#51b84880!important}.dark-card summary{color:#fff;cursor:pointer;font-weight:600}.dark-card summary:hover{color:var(--primary)}.dark-card-content{color:#cbd5e1;line-height:1.6;margin-top:10px}.dark-card h2{color:#fff!important}.dark-muted{color:#94a3b8}.dark-link{color:var(--primary)!important}.dark-link:hover{color:var(--primary-hover)!important;text-decoration:underline}.dark-card .prose,.dark-card .prose li,.dark-card .prose p{color:#cbd5e1}.dark-card .prose pre{background:#171c2b;color:#e2e8f0}.dark-card .prose code{color:#6ed665}.dark-card .prose a{color:var(--primary)}.site-footer{background:var(--dx-dark-blue);border-top:1px solid var(--dx-dark-border);color:var(--dx-dark-muted);font-size:.92rem;margin-top:0;padding:38px 0}.site-footer a{color:#cbd5e1}.site-footer a:hover{color:var(--primary)}.admin-shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.admin-side{background:var(--dx-dark-blue);border-right:1px solid var(--dx-dark-border);color:var(--dx-dark-muted);height:100vh;overflow-y:auto;padding:16px 12px;position:sticky;top:0}.admin-side nav a{border-radius:6px;color:#cbd5e1;display:block;font-size:.93rem;font-weight:600;padding:8px 10px;text-decoration:none}.admin-side nav a.router-link-active,.admin-side nav a:hover{background:#51b84833;color:#fff}.admin-side .group{color:var(--dx-dark-muted);font-size:.72rem;letter-spacing:.06em;margin:16px 10px 4px;text-transform:uppercase}.admin-main{background:#fff;min-width:0;padding:24px}@media(max-width:860px){.admin-shell{grid-template-columns:1fr}.admin-side{height:auto;position:static}}.cart{bottom:16px;max-width:360px;position:fixed;right:16px;z-index:30}.dialog-backdrop{background:#131724a6;display:grid;inset:0;padding:16px;place-items:center;position:fixed;z-index:50}.dialog{border-radius:var(--radius);max-height:92vh;max-width:960px;overflow:auto;padding:20px}.dialog,.preview-frame{background:#fff;width:100%}.preview-frame{border:1px solid var(--border);border-radius:8px;height:70vh}.timeline{list-style:none;margin:0;padding:0}.timeline li{border-left:2px solid var(--border);padding:0 0 12px 14px;position:relative}.timeline li:before{background:var(--primary);border-radius:50%;content:"";height:10px;left:-6px;position:absolute;top:6px;width:10px}.kv{display:grid;gap:6px 16px;grid-template-columns:max-content 1fr}.kv dt{color:var(--muted);font-weight:600}.kv dd{margin:0}.filters{align-items:end;display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));margin-bottom:14px}.filters .field{margin:0}.spinner{animation:spin .8s linear infinite;border:2px solid var(--border);border-radius:50%;border-top-color:var(--primary);display:inline-block;height:18px;width:18px}@keyframes spin{to{transform:rotate(1turn)}}@media(prefers-reduced-motion:reduce){.spinner{animation:none}}
