:root{--bg:#f8fafc;--surface:#ffffff;--surface-2:#f1f5f9;--surface-3:#e2e8f0;--line:#e2e8f0;--line-strong:#cbd5e1;--text:#0f172a;--muted:#64748b;--blue:#2563eb;--blue-soft:#eff6ff;--blue-border:#bfdbfe;--green:#059669;--green-soft:#ecfdf5;--green-border:#a7f3d0;--amber:#d97706;--amber-soft:#fffbeb;--amber-border:#fde68a;--red:#dc2626;--red-soft:#fef2f2;--red-border:#fca5a5;--focus:#3b82f6;--shadow:0 4px 6px -1px rgba(15,23,42,0.05),0 2px 4px -2px rgba(15,23,42,0.05);--shadow-lg:0 10px 15px -3px rgba(15,23,42,0.08),0 4px 6px -4px rgba(15,23,42,0.08);--radius:12px;--radius-sm:8px;--radius-lg:16px;--transition:all 0.25s cubic-bezier(0.4,0,0.2,1);--sidebar-width:210px}[data-theme=dark]{--bg:#0b0f19;--surface:#131c2e;--surface-2:#1e293b;--surface-3:#334155;--line:#1f2d47;--line-strong:#38bdf8;--text:#f8fafc;--muted:#94a3b8;--blue:#38bdf8;--blue-soft:rgba(56,189,248,0.12);--blue-border:rgba(56,189,248,0.3);--green:#34d399;--green-soft:rgba(52,211,153,0.12);--green-border:rgba(52,211,153,0.3);--amber:#fbbf24;--amber-soft:rgba(251,191,36,0.12);--amber-border:rgba(251,191,36,0.3);--red:#f87171;--red-soft:rgba(248,113,113,0.12);--red-border:rgba(248,113,113,0.3);--focus:#38bdf8;--shadow:0 4px 6px -1px rgba(0,0,0,0.2),0 2px 4px -2px rgba(0,0,0,0.2);--shadow-lg:0 10px 15px -3px rgba(0,0,0,0.3),0 4px 6px -4px rgba(0,0,0,0.3)}*{box-sizing:border-box}body,html{min-height:100%;scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-plus-jakarta-sans),ui-sans-serif,system-ui,-apple-system,sans-serif;letter-spacing:-.01em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.app-shell,.icon-button,.message,.metric,.mini-icon,.panel,.pill,.status,.tab,.topbar,.user-chip,body,html,input,select,table,td,textarea,th{transition:background-color .3s ease,border-color .3s ease,color .3s ease,box-shadow .3s ease,transform .2s ease}button,input,select,textarea{font:inherit}button{cursor:pointer;border:none;background:transparent;outline:none}button:disabled{cursor:not-allowed;opacity:.4}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--surface-3);border-radius:99px}::-webkit-scrollbar-thumb:hover{background:var(--line-strong)}.app-shell{width:min(1560px,calc(100vw - 32px));margin:0 auto;padding:24px 0 48px;display:flex;flex-direction:column;gap:20px;animation:fadeIn .4s ease-out}.topbar{min-height:72px;justify-content:space-between;gap:16px;padding:12px 24px;border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow)}.brand-block,.topbar{display:flex;align-items:center}.brand-block{gap:12px;min-width:220px}.brand-mark{display:grid;width:42px;height:42px;place-items:center;border-radius:var(--radius-sm);color:#ffffff;background:linear-gradient(135deg,var(--green),#059669);box-shadow:0 4px 12px rgba(5,150,105,.3);transition:transform .3s ease}[data-theme=dark] .brand-mark{box-shadow:0 4px 12px rgba(52,211,153,.2)}.brand-block:hover .brand-mark{transform:rotate(5deg) scale(1.05)}.eyebrow{margin:0 0 2px;color:var(--muted);font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em}h1,h2,h3{margin:0;font-weight:700;letter-spacing:-.02em}h1{font-size:1.25rem;line-height:1.15;color:var(--text)}h2,h3{font-size:1.1rem}.topbar-actions{flex:1;justify-content:flex-end;gap:12px;min-width:0}.service-pills,.topbar-actions{display:flex;align-items:center}.service-pills{gap:8px;flex-wrap:wrap}.count-badge,.pill,.status{display:inline-flex;align-items:center;justify-content:center;min-height:28px;border-radius:99px;font-size:.72rem;font-weight:700;text-transform:capitalize;white-space:nowrap;padding:0 12px}.pill{gap:6px;border:1px solid var(--line);background:var(--surface-2);color:var(--text);position:relative}.pill:before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background-color:var(--muted);margin-right:2px}.pill.ok:before{background-color:var(--green);box-shadow:0 0 8px var(--green);animation:pulseGreen 2s ease-in-out infinite}.pill.warn:before{background-color:var(--amber);box-shadow:0 0 8px var(--amber);animation:pulseAmber 2s ease-in-out infinite}.pill.ok,.status.active,.status.approved,.status.ok,.status.ready{color:var(--green);border:1px solid var(--green-border);background:var(--green-soft)}.pill.warn,.status.deprecated,.status.inactive,.status.retired,.status.suspended{color:var(--amber);border:1px solid var(--amber-border);background:var(--amber-soft)}.status.blocked,.status.disabled,.status.revoked{color:var(--red);border:1px solid var(--red-border);background:var(--red-soft)}.user-chip{display:flex;align-items:center;gap:8px;min-height:40px;padding:0 16px;border:1px solid var(--line);background:var(--surface-2);color:var(--text);font-weight:600;font-size:.82rem;border-radius:99px}.user-chip svg{color:var(--muted)}.icon-button,.mini-icon{display:inline-grid;place-items:center;border:1px solid var(--line);color:var(--text);background:var(--surface);border-radius:var(--radius-sm);box-shadow:var(--shadow);transition:var(--transition)}.icon-button{width:40px;height:40px}.mini-icon{width:32px;height:32px}.icon-button:hover,.mini-icon:hover{border-color:var(--line-strong);background:var(--surface-2);transform:translateY(-2px);color:var(--blue)}.icon-button:active,.mini-icon:active{transform:translateY(0) scale(.95)}.theme-toggle{color:var(--amber);border-color:var(--amber-border);background:var(--amber-soft)}[data-theme=dark] .theme-toggle{color:var(--blue);border-color:var(--blue-border);background:var(--blue-soft)}.metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.metric{display:flex;align-items:center;min-height:88px;gap:16px;padding:16px 20px;border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);cursor:pointer;position:relative;overflow:hidden}.metric:after{content:"";position:absolute;bottom:0;left:0;right:0;height:3px;background:transparent;transition:var(--transition)}.metric.blue:after{background:var(--blue)}.metric.green:after{background:var(--green)}.metric.amber:after{background:var(--amber)}.metric.red:after{background:var(--red)}.metric:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}.metric-icon{display:grid;width:44px;height:44px;place-items:center;border-radius:var(--radius-sm);transition:var(--transition)}.metric span{display:block;color:var(--muted);font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.metric strong{display:block;margin-top:4px;font-size:1.75rem;font-weight:800;line-height:1;color:var(--text)}.metric.blue .metric-icon{color:var(--blue);background:var(--blue-soft)}.metric.green .metric-icon{color:var(--green);background:var(--green-soft)}.metric.amber .metric-icon{color:var(--amber);background:var(--amber-soft)}.metric.red .metric-icon{color:var(--red);background:var(--red-soft)}.metric:hover .metric-icon{transform:scale(1.1)}.message-band{display:grid;gap:10px}.message{min-height:48px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 20px;border-radius:var(--radius-sm);font-weight:600;font-size:.88rem;border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow);animation:slideInDown .3s cubic-bezier(.16,1,.3,1)}.message.notice{color:var(--green);border-color:var(--green-border);background:var(--green-soft)}.message.error{color:var(--red);border-color:var(--red-border);background:var(--red-soft)}.message.key-result{color:var(--text);border-color:var(--amber-border);background:var(--amber-soft);align-items:center}.message.key-result span{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9rem;font-weight:700;color:var(--amber)}.workspace{display:grid;grid-template-columns:var(--sidebar-width) minmax(0,1fr);gap:20px;align-items:start}.tab-rail{display:flex;flex-direction:column;gap:6px;position:sticky;top:24px;padding:12px;border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow)}.tab{width:100%;min-height:44px;display:flex;align-items:center;gap:12px;padding:0 16px;border-radius:var(--radius-sm);color:var(--muted);font-weight:600;font-size:.88rem;text-align:left;transition:var(--transition)}.tab svg{transition:transform .2s ease}.tab:hover{color:var(--text);background:var(--surface-2)}.tab:hover svg{transform:translateX(2px)}.tab.active{color:#ffffff;background:linear-gradient(135deg,var(--blue),#1d4ed8);box-shadow:0 4px 12px rgba(37,99,235,.2)}[data-theme=dark] .tab.active{color:#0b0f19;background:linear-gradient(135deg,var(--blue),#0ea5e9);box-shadow:0 4px 12px rgba(56,189,248,.25)}.tab.active svg{color:inherit!important}.panel{min-width:0;padding:24px;border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);animation:fadeIn .3s ease-out}.section-title{justify-content:space-between;gap:12px;margin-bottom:24px;border-bottom:1px solid var(--line);padding-bottom:16px}.count-badge,.section-title{display:flex;align-items:center}.count-badge{min-width:36px;height:26px;color:var(--blue);border:1px solid var(--blue-border);background:var(--blue-soft);font-weight:700;border-radius:99px;justify-content:center}.form-grid{display:grid;gap:16px;align-items:end;margin-bottom:24px;padding:20px;background:var(--surface-2);border-radius:var(--radius);border:1px solid var(--line)}.products-form{grid-template-columns:minmax(120px,.9fr) minmax(180px,1.2fr) minmax(120px,.7fr) minmax(260px,1.6fr) auto}.clients-form{grid-template-columns:minmax(120px,.8fr) minmax(170px,1fr) minmax(200px,1.2fr) minmax(120px,.7fr) minmax(260px,1.6fr) auto}.license-create-form,.license-edit-form{grid-template-columns:repeat(4,minmax(150px,1fr))}.builds-form{grid-template-columns:repeat(4,minmax(150px,1fr)) auto}.editor-block{margin-bottom:24px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);overflow:hidden;animation:slideInUp .3s cubic-bezier(.16,1,.3,1)}.editor-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 20px;border-bottom:1px solid var(--line);background:var(--surface-2)}.editor-block .form-grid{margin-bottom:0;border:0;box-shadow:none;border-radius:0;background:transparent}label{display:grid;gap:6px;min-width:0;color:var(--muted);font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.json-field,.modules-field{grid-column:span 2}.field-hint{display:block;margin-top:4px;color:var(--muted);font-size:.72rem;line-height:1.35}.module-picker .module-picker-label{display:block;margin-bottom:8px;font-size:.82rem;font-weight:600;color:var(--text)}.module-checkboxes{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}.module-option{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);font-size:.84rem;cursor:pointer}.module-option input{width:auto;min-height:0;margin:0;cursor:pointer}.module-option.always-on{opacity:.75;cursor:not-allowed}.module-option small{color:var(--muted);font-size:.68rem}.overdue-flag{display:inline-block;margin-top:3px;padding:1px 7px;border:1px solid var(--amber-border);border-radius:999px;background:var(--amber-soft);color:var(--amber);font-size:.68rem;font-weight:600}.build-approved-tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border:1px solid var(--green-border);border-radius:var(--radius-sm);background:var(--green-soft);color:var(--green);font-size:.72rem;font-weight:600;white-space:nowrap}input,select,textarea{width:100%;min-height:40px;border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 12px;outline:0;color:var(--text);background:var(--surface);box-shadow:inset 0 1px 2px rgba(0,0,0,.02);font-size:.88rem;transition:var(--transition)}textarea{min-height:90px;padding:10px 12px;resize:vertical;line-height:1.4}input:focus,select:focus,textarea:focus{border-color:var(--focus);box-shadow:0 0 0 3px var(--blue-soft);background:var(--surface)}.mini-button,.primary-button,.secondary-button{display:flex;align-items:center;gap:8px;justify-content:center;font-weight:700;white-space:nowrap;border-radius:var(--radius-sm);transition:var(--transition);box-shadow:var(--shadow);font-size:.88rem}.primary-button{min-width:112px;min-height:40px;padding:0 16px;color:#ffffff;background:linear-gradient(135deg,var(--green),#047857)}.primary-button:hover{background:linear-gradient(135deg,#059669,#065f46);transform:translateY(-1px);box-shadow:0 4px 12px rgba(5,150,105,.2)}.primary-button:active{transform:translateY(0) scale(.97)}.mini-button,.secondary-button{min-height:40px;padding:0 16px;color:var(--text);background:var(--surface);border:1px solid var(--line)}.secondary-button:hover{background:var(--surface-2);border-color:var(--line-strong);transform:translateY(-1px)}.secondary-button:active{transform:translateY(0) scale(.97)}.mini-button{min-height:32px;padding:0 10px;font-size:.78rem;border-radius:var(--radius-sm)}.mini-button.danger{color:var(--red);border-color:var(--red-border);background:var(--red-soft)}.mini-button.danger:hover{background:var(--red);color:#ffffff;border-color:var(--red)}.form-actions{display:flex;align-items:center;gap:10px;align-self:end;justify-content:flex-end}.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:var(--surface)}table{width:100%;min-width:1040px;border-collapse:separate;border-spacing:0}.table-wrap.full table{min-width:1140px}td,th{padding:14px 16px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}th{color:var(--muted);background:var(--surface-2);font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}th:first-child{border-top-left-radius:var(--radius)}th:last-child{border-top-right-radius:var(--radius)}td{font-size:.88rem;color:var(--text)}tbody tr:last-child td{border-bottom:0}tbody tr{transition:background-color .2s ease}tbody tr:hover td{background:var(--surface-2)}td small{display:block;margin-top:4px;color:var(--muted);font-size:.75rem}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.strong{font-weight:700}.hash,.modules-cell{max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status{min-width:80px;padding:0 10px}.row-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.empty-row{height:100px;color:var(--muted);text-align:center;font-weight:600}.login-shell{display:grid;min-height:100vh;place-items:center;padding:24px;background:radial-gradient(circle at top,var(--surface-2) 0,var(--bg) 100%);animation:fadeIn .5s ease-out}.login-panel{display:grid;width:min(440px,100%);gap:24px;padding:32px;border:1px solid var(--line);background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.login-header{display:flex;align-items:center;justify-content:space-between;gap:16px}.login-form{display:grid;gap:16px}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInDown{0%{transform:translateY(-16px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes slideInUp{0%{transform:translateY(16px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes pulseGreen{0%,to{transform:scale(1);opacity:.6;box-shadow:0 0 0 0 rgba(5,150,105,.4)}50%{transform:scale(1.2);opacity:1;box-shadow:0 0 0 4px rgba(5,150,105,.2)}}@keyframes pulseAmber{0%,to{transform:scale(1);opacity:.6;box-shadow:0 0 0 0 rgba(217,119,6,.4)}50%{transform:scale(1.2);opacity:1;box-shadow:0 0 0 4px rgba(217,119,6,.2)}}@media (max-width:1240px){.topbar{align-items:flex-start;flex-direction:column;padding:20px}.topbar-actions{width:100%;justify-content:flex-start;flex-wrap:wrap}.metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.workspace{grid-template-columns:1fr;gap:16px}.tab-rail{position:static;flex-direction:row;overflow-x:auto;padding:8px;gap:8px}.tab{flex:0 0 auto;width:auto;min-height:38px;padding:0 14px}.tab svg{margin-right:2px}.builds-form,.clients-form,.license-create-form,.license-edit-form,.products-form{grid-template-columns:repeat(2,minmax(150px,1fr))}}@media (max-width:760px){.app-shell{width:min(100vw - 16px,1560px);padding-top:12px}.form-grid,.panel,.topbar{padding:16px}.metric-grid{gap:12px}.builds-form,.clients-form,.license-create-form,.license-edit-form,.metric-grid,.products-form{grid-template-columns:1fr}.json-field,.modules-field{grid-column:auto}.primary-button,.secondary-button{width:100%}.form-actions{width:100%;flex-direction:column}.form-actions button,.service-pills,.user-chip{width:100%}.user-chip{justify-content:center}}@font-face{font-family:Plus Jakarta Sans;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/6fe53d21e6e7ebd8-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Plus Jakarta Sans;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/8ebc6e9dde468c4a-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Plus Jakarta Sans;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/9e7b0a821b9dfcb4-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Plus Jakarta Sans;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/636a5ac981f94f8b-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Plus Jakarta Sans Fallback;src:local("Arial");ascent-override:98.88%;descent-override:21.15%;line-gap-override:0.00%;size-adjust:104.98%}.__className_646807{font-family:Plus Jakarta Sans,Plus Jakarta Sans Fallback;font-style:normal}.__variable_646807{--font-plus-jakarta-sans:"Plus Jakarta Sans","Plus Jakarta Sans Fallback"}