@waiaas/daemon 2.8.0-rc.1 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -5
- package/dist/api/middleware/master-auth.d.ts +8 -1
- package/dist/api/middleware/master-auth.d.ts.map +1 -1
- package/dist/api/middleware/master-auth.js +8 -1
- package/dist/api/middleware/master-auth.js.map +1 -1
- package/dist/api/routes/actions.d.ts +3 -0
- package/dist/api/routes/actions.d.ts.map +1 -1
- package/dist/api/routes/actions.js +1 -1
- package/dist/api/routes/actions.js.map +1 -1
- package/dist/api/routes/admin.d.ts +3 -0
- package/dist/api/routes/admin.d.ts.map +1 -1
- package/dist/api/routes/admin.js +200 -1
- package/dist/api/routes/admin.js.map +1 -1
- package/dist/api/routes/defi-positions.d.ts +31 -0
- package/dist/api/routes/defi-positions.d.ts.map +1 -0
- package/dist/api/routes/defi-positions.js +182 -0
- package/dist/api/routes/defi-positions.js.map +1 -0
- package/dist/api/routes/openapi-schemas.d.ts +176 -5
- package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
- package/dist/api/routes/openapi-schemas.js +43 -0
- package/dist/api/routes/openapi-schemas.js.map +1 -1
- package/dist/api/routes/transactions.d.ts +3 -0
- package/dist/api/routes/transactions.d.ts.map +1 -1
- package/dist/api/routes/transactions.js +2 -2
- package/dist/api/routes/transactions.js.map +1 -1
- package/dist/api/routes/wallets.d.ts +3 -0
- package/dist/api/routes/wallets.d.ts.map +1 -1
- package/dist/api/routes/wallets.js +3 -2
- package/dist/api/routes/wallets.js.map +1 -1
- package/dist/api/routes/x402.d.ts +3 -0
- package/dist/api/routes/x402.d.ts.map +1 -1
- package/dist/api/routes/x402.js +1 -1
- package/dist/api/routes/x402.js.map +1 -1
- package/dist/api/server.d.ts +3 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +35 -18
- package/dist/api/server.js.map +1 -1
- package/dist/infrastructure/action/action-provider-registry.d.ts.map +1 -1
- package/dist/infrastructure/action/action-provider-registry.js +2 -0
- package/dist/infrastructure/action/action-provider-registry.js.map +1 -1
- package/dist/infrastructure/action/api-key-store.d.ts +5 -1
- package/dist/infrastructure/action/api-key-store.d.ts.map +1 -1
- package/dist/infrastructure/action/api-key-store.js +10 -4
- package/dist/infrastructure/action/api-key-store.js.map +1 -1
- package/dist/infrastructure/database/migrate.d.ts +1 -1
- package/dist/infrastructure/database/migrate.d.ts.map +1 -1
- package/dist/infrastructure/database/migrate.js +110 -2
- package/dist/infrastructure/database/migrate.js.map +1 -1
- package/dist/infrastructure/database/schema.d.ts +299 -0
- package/dist/infrastructure/database/schema.d.ts.map +1 -1
- package/dist/infrastructure/database/schema.js +31 -1
- package/dist/infrastructure/database/schema.js.map +1 -1
- package/dist/infrastructure/keystore/re-encrypt.d.ts +28 -0
- package/dist/infrastructure/keystore/re-encrypt.d.ts.map +1 -0
- package/dist/infrastructure/keystore/re-encrypt.js +134 -0
- package/dist/infrastructure/keystore/re-encrypt.js.map +1 -0
- package/dist/infrastructure/settings/setting-keys.d.ts +1 -1
- package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -1
- package/dist/infrastructure/settings/setting-keys.js +8 -0
- package/dist/infrastructure/settings/setting-keys.js.map +1 -1
- package/dist/infrastructure/settings/settings-service.d.ts +6 -0
- package/dist/infrastructure/settings/settings-service.d.ts.map +1 -1
- package/dist/infrastructure/settings/settings-service.js +10 -4
- package/dist/infrastructure/settings/settings-service.js.map +1 -1
- package/dist/lifecycle/daemon.d.ts +8 -1
- package/dist/lifecycle/daemon.d.ts.map +1 -1
- package/dist/lifecycle/daemon.js +144 -3
- package/dist/lifecycle/daemon.js.map +1 -1
- package/dist/notifications/notification-service.d.ts.map +1 -1
- package/dist/notifications/notification-service.js +6 -3
- package/dist/notifications/notification-service.js.map +1 -1
- package/dist/notifications/templates/message-templates.d.ts.map +1 -1
- package/dist/notifications/templates/message-templates.js +32 -2
- package/dist/notifications/templates/message-templates.js.map +1 -1
- package/dist/pipeline/database-policy-engine.d.ts +30 -0
- package/dist/pipeline/database-policy-engine.d.ts.map +1 -1
- package/dist/pipeline/database-policy-engine.js +149 -2
- package/dist/pipeline/database-policy-engine.js.map +1 -1
- package/dist/pipeline/sign-only.d.ts.map +1 -1
- package/dist/pipeline/sign-only.js +1 -0
- package/dist/pipeline/sign-only.js.map +1 -1
- package/dist/pipeline/stages.d.ts.map +1 -1
- package/dist/pipeline/stages.js +7 -0
- package/dist/pipeline/stages.js.map +1 -1
- package/dist/services/autostop-service.d.ts +3 -3
- package/dist/services/autostop-service.d.ts.map +1 -1
- package/dist/services/autostop-service.js +8 -15
- package/dist/services/autostop-service.js.map +1 -1
- package/dist/services/defi/position-tracker.d.ts +61 -0
- package/dist/services/defi/position-tracker.d.ts.map +1 -0
- package/dist/services/defi/position-tracker.js +156 -0
- package/dist/services/defi/position-tracker.js.map +1 -0
- package/dist/services/defi/position-write-queue.d.ts +37 -0
- package/dist/services/defi/position-write-queue.d.ts.map +1 -0
- package/dist/services/defi/position-write-queue.js +92 -0
- package/dist/services/defi/position-write-queue.js.map +1 -0
- package/dist/services/monitoring/defi-monitor-service.d.ts +29 -0
- package/dist/services/monitoring/defi-monitor-service.d.ts.map +1 -0
- package/dist/services/monitoring/defi-monitor-service.js +62 -0
- package/dist/services/monitoring/defi-monitor-service.js.map +1 -0
- package/dist/services/monitoring/health-factor-monitor.d.ts +66 -0
- package/dist/services/monitoring/health-factor-monitor.d.ts.map +1 -0
- package/dist/services/monitoring/health-factor-monitor.js +247 -0
- package/dist/services/monitoring/health-factor-monitor.js.map +1 -0
- package/package.json +5 -5
- package/public/admin/assets/index-BpDnuS0k.css +1 -0
- package/public/admin/assets/index-CgtuiQGn.js +1 -0
- package/public/admin/index.html +2 -2
- package/public/admin/assets/index-DDqQR5T7.css +0 -1
- package/public/admin/assets/index-xzLnQ5sm.js +0 -1
package/public/admin/index.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>WAIaaS Admin</title>
|
|
7
|
-
<script type="module" crossorigin src="/admin/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/admin/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/admin/assets/index-CgtuiQGn.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/admin/assets/index-BpDnuS0k.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="app"></div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-primary: #2563eb;--color-primary-hover: #1d4ed8;--color-primary-light: #eff6ff;--color-bg: #ffffff;--color-bg-secondary: #f8fafc;--color-bg-tertiary: #f1f5f9;--color-border: #e2e8f0;--color-text: #0f172a;--color-text-secondary: #64748b;--color-text-muted: #94a3b8;--color-success: #16a34a;--color-success-bg: #f0fdf4;--color-warning: #d97706;--color-warning-bg: #fffbeb;--color-danger: #dc2626;--color-danger-bg: #fef2f2;--color-info: #2563eb;--color-info-bg: #eff6ff;--color-tier-instant: #16a34a;--color-tier-delay: #d97706;--color-tier-blocked: #dc2626;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-6: 1.5rem;--space-8: 2rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height: 1.5;--radius-sm: .25rem;--radius-md: .375rem;--radius-lg: .5rem;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--sidebar-width: 220px;--header-height: 56px;--content-max-width: 1200px}body{font-family:var(--font-family);font-size:var(--font-size-base);line-height:var(--line-height);background:var(--color-bg);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--color-primary);text-decoration:none}button{cursor:pointer;font-family:inherit}input,select,textarea{font-family:inherit;font-size:inherit}.layout{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-width);background:var(--color-bg);border-right:1px solid var(--color-border);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:10}.sidebar-brand{padding:var(--space-4) var(--space-4);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-primary);border-bottom:1px solid var(--color-border)}.sidebar-nav{display:flex;flex-direction:column;padding:var(--space-2);gap:var(--space-1)}.sidebar-link{display:block;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);color:var(--color-text-secondary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);transition:background .15s,color .15s;text-decoration:none}.sidebar-link:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.sidebar-link.active{background:var(--color-primary-light);color:var(--color-primary)}.main{margin-left:var(--sidebar-width);flex:1;display:flex;flex-direction:column}.header{min-height:var(--header-height);border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-6);background:var(--color-bg);position:sticky;top:0;z-index:5}.header-left{display:flex;flex-direction:column;justify-content:center;gap:0}.header-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.header-subtitle{font-size:var(--font-size-xs);color:var(--color-text-secondary);font-weight:var(--font-weight-normal);margin:0}.btn-logout{padding:var(--space-1) var(--space-3);font-size:var(--font-size-sm);color:var(--color-text-secondary);background:none;border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;transition:background .15s,color .15s}.btn-logout:hover{background:var(--color-danger-bg);color:var(--color-danger);border-color:var(--color-danger)}.content{padding:var(--space-6);max-width:var(--content-max-width);width:100%}.page h2{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-4)}.table-container{overflow-x:auto}table{width:100%;border-collapse:collapse}table th{text-align:left;padding:var(--space-2) var(--space-3);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;border-bottom:2px solid var(--color-border);background:var(--color-bg-secondary)}table td{padding:var(--space-2) var(--space-3);font-size:var(--font-size-sm);border-bottom:1px solid var(--color-border)}table tbody tr:hover{background:var(--color-bg-secondary)}table tbody tr.clickable{cursor:pointer}table .table-empty,table .table-loading{text-align:center;color:var(--color-text-muted);padding:var(--space-8) var(--space-4)}.form-field{margin-bottom:var(--space-4)}.form-field label{display:block;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text);margin-bottom:var(--space-1)}.form-field input,.form-field select,.form-field textarea{width:100%;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);background:var(--color-bg);color:var(--color-text);outline:none;transition:border-color .15s}.form-field input:focus,.form-field select:focus,.form-field textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.form-field textarea{min-height:80px;resize:vertical}.form-field .form-error{display:block;font-size:var(--font-size-xs);color:var(--color-danger);margin-top:var(--space-1)}.form-field input[type=checkbox]{width:auto;margin-right:var(--space-2)}.form-field .form-description{display:block;font-size:var(--font-size-xs);color:var(--color-text-secondary);margin-top:var(--space-1)}.field-group{border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4) var(--space-6);margin-bottom:var(--space-4)}.field-group-legend{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);padding:0 var(--space-2)}.field-group-description{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-bottom:var(--space-3)}.field-group-body{display:flex;flex-direction:column;gap:var(--space-3)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;transition:background .15s,color .15s,border-color .15s}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-sm{padding:var(--space-1) var(--space-3);font-size:var(--font-size-xs)}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary{background:var(--color-bg);color:var(--color-text);border-color:var(--color-border)}.btn-secondary:hover:not(:disabled){background:var(--color-bg-secondary)}.btn-danger{background:var(--color-danger);color:#fff}.btn-danger:hover:not(:disabled){background:#b91c1c}.btn-ghost{background:transparent;color:var(--color-text-secondary)}.btn-ghost:hover:not(:disabled){background:var(--color-bg-tertiary);color:var(--color-text)}.badge{display:inline-flex;align-items:center;padding:.125rem var(--space-2);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);border-radius:9999px}.badge-success{background:var(--color-success-bg);color:var(--color-success)}.badge-warning{background:var(--color-warning-bg);color:var(--color-warning)}.badge-danger{background:var(--color-danger-bg);color:var(--color-danger)}.badge-info{background:var(--color-info-bg);color:var(--color-info)}.badge-neutral{background:var(--color-bg-tertiary);color:var(--color-text-secondary)}.modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-card{background:var(--color-bg);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:480px;max-height:90vh;overflow-y:auto}.modal-header{padding:var(--space-4) var(--space-6);border-bottom:1px solid var(--color-border);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.modal-body{padding:var(--space-4) var(--space-6)}.modal-footer{padding:var(--space-3) var(--space-6);border-top:1px solid var(--color-border);display:flex;justify-content:flex-end;gap:var(--space-2)}.toast-container{position:fixed;top:var(--space-4);right:var(--space-4);z-index:200;display:flex;flex-direction:column;gap:var(--space-2);max-width:360px}.toast{padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);font-size:var(--font-size-sm);box-shadow:var(--shadow-md);cursor:pointer;animation:toast-in .2s ease-out}@keyframes toast-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.toast-success{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success)}.toast-error{background:var(--color-danger-bg);color:var(--color-danger);border:1px solid var(--color-danger)}.toast-info{background:var(--color-info-bg);color:var(--color-info);border:1px solid var(--color-info)}.toast-warning{background:var(--color-warning-bg);color:var(--color-warning);border:1px solid var(--color-warning)}.empty-state{text-align:center;padding:var(--space-8) var(--space-4);color:var(--color-text-muted)}.empty-state h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);margin-bottom:var(--space-2)}.empty-state p{font-size:var(--font-size-sm);margin-bottom:var(--space-4)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--space-4)}.stat-card{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4) var(--space-6);box-shadow:var(--shadow-sm)}.stat-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-2)}.stat-value{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-text)}.stat-skeleton{height:2rem;background:var(--color-bg-tertiary);border-radius:var(--radius-md);animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.dashboard-error{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);background:var(--color-danger-bg);color:var(--color-danger);border:1px solid var(--color-danger);border-radius:var(--radius-md);margin-bottom:var(--space-4);font-size:var(--font-size-sm)}.update-banner{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);background:var(--color-warning-bg);color:var(--color-warning);border:1px solid var(--color-warning);border-radius:var(--radius-md);margin-bottom:var(--space-4);font-size:var(--font-size-sm)}.update-banner-icon{font-size:1.1em}.update-banner code{background:#0000001a;padding:.1em .4em;border-radius:var(--radius-sm);font-size:.9em}.prompt-card{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4) var(--space-6)}.prompt-card-desc{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin-bottom:var(--space-3)}.prompt-preview{background:var(--color-bg-tertiary);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);font-size:var(--font-size-xs);line-height:1.6;white-space:pre-wrap;word-break:break-all;max-height:300px;overflow:auto}.page-actions{display:flex;justify-content:flex-end;margin-bottom:var(--space-4)}.inline-form{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4) var(--space-6);margin-bottom:var(--space-4)}.inline-form-actions{display:flex;gap:var(--space-2);margin-top:var(--space-2)}.back-link{display:inline-block;font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-bottom:var(--space-4)}.back-link:hover{color:var(--color-primary)}.wallet-detail{margin-top:var(--space-4)}.detail-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-6)}.detail-name{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold)}.detail-grid{display:grid;gap:0}.detail-row{display:flex;padding:var(--space-3) 0;border-bottom:1px solid var(--color-border)}.detail-row-label{width:160px;flex-shrink:0;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.detail-row-value{font-size:var(--font-size-sm);display:flex;align-items:center;gap:var(--space-2);word-break:break-all}.inline-edit{display:flex;align-items:center;gap:var(--space-2)}.inline-edit-input{padding:var(--space-1) var(--space-2);border:1px solid var(--color-primary);border-radius:var(--radius-md);font-size:var(--font-size-base);outline:none}.session-controls{display:flex;align-items:flex-end;gap:var(--space-4);margin-bottom:var(--space-4)}.session-wallet-select{flex:1;max-width:400px}.session-wallet-select label{display:block;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text);margin-bottom:var(--space-1)}.session-wallet-select select{width:100%;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);background:var(--color-bg);color:var(--color-text);outline:none}.session-wallet-select select:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.token-warning{color:var(--color-warning);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);margin-bottom:var(--space-3)}.token-display{background:var(--color-bg-tertiary);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);display:flex;align-items:center;gap:var(--space-2)}.token-value{flex:1;font-size:var(--font-size-xs);word-break:break-all;font-family:SF Mono,Fira Code,monospace}.policy-controls{display:flex;align-items:flex-end;gap:var(--space-4);margin-bottom:var(--space-4)}.policy-filter-select{flex:1;max-width:400px}.policy-filter-select label{display:block;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text);margin-bottom:var(--space-1)}.policy-filter-select select{width:100%;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);background:var(--color-bg);color:var(--color-text);outline:none}.policy-filter-select select:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.tier-bars{display:flex;flex-direction:column;gap:3px;min-width:180px}.tier-bar{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-xs)}.tier-bar-label{width:52px;flex-shrink:0;font-weight:var(--font-weight-medium)}.tier-bar-track{flex:1;height:6px;background:var(--color-bg-tertiary);border-radius:3px;overflow:hidden}.tier-bar-fill{height:100%;border-radius:3px;transition:width .3s ease}.tier-bar-value{font-size:var(--font-size-xs);color:var(--color-text-secondary);min-width:60px;text-align:right}.tier-bar-fill--instant{background:var(--color-tier-instant)}.tier-bar-fill--notify{background:var(--color-info)}.tier-bar-fill--delay{background:var(--color-tier-delay)}.tier-bar-fill--approval{background:var(--color-tier-blocked)}.spending-limit-summary{display:flex;flex-direction:column;gap:.5rem}.cumulative-limits{display:flex;flex-direction:column;gap:.125rem;padding-top:.25rem;border-top:1px solid var(--color-border)}.cumulative-limits-label{font-size:var(--font-size-xs);color:var(--color-text-secondary);font-weight:500}.cumulative-limit-row{display:flex;align-items:center;gap:.5rem;font-size:var(--font-size-xs)}.cumulative-limit-type{color:var(--color-text-secondary);min-width:72px}.cumulative-limit-value{color:var(--color-warning);font-weight:600}.rules-vis-text{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.rules-vis-badges{display:flex;flex-wrap:wrap;gap:4px}.rules-summary{font-size:var(--font-size-xs);color:var(--color-text-secondary);max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:SF Mono,Fira Code,monospace}.edit-rules-textarea textarea{min-height:120px;font-family:SF Mono,Fira Code,monospace;font-size:var(--font-size-xs)}.policy-type-readonly{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text);padding:var(--space-2) 0;margin-bottom:var(--space-2)}.settings-section{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-6);margin-bottom:var(--space-4)}.settings-section--danger{border-color:var(--color-danger)}.settings-section-header{margin-bottom:var(--space-4)}.settings-section-header h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-1)}.settings-description{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.settings-section-body{display:flex;align-items:center;gap:var(--space-4)}.ks-state-card{display:flex;align-items:center;gap:var(--space-4);flex:1}.ks-state-info{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.shutdown-overlay{position:fixed;inset:0;background:#000c;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:300;color:#fff}.shutdown-overlay h2{font-size:var(--font-size-2xl);margin-bottom:var(--space-4);color:#fff}.shutdown-overlay p{font-size:var(--font-size-base);color:var(--color-text-muted)}.shutdown-confirm-input{margin-top:var(--space-3)}.shutdown-confirm-input label{display:block;font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-bottom:var(--space-1)}.shutdown-confirm-input input{width:100%;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);background:var(--color-bg);color:var(--color-text);outline:none}.shutdown-confirm-input input:focus{border-color:var(--color-danger);box-shadow:0 0 0 2px var(--color-danger-bg)}.channel-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-4);margin-bottom:var(--space-6)}.channel-card{padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-bg)}.channel-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-2)}.channel-card-name{font-weight:var(--font-weight-semibold);font-size:var(--font-size-base);text-transform:capitalize}.test-results{margin-top:var(--space-4)}.test-result-item{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) 0}.test-result-success{color:var(--color-success)}.test-result-failure{color:var(--color-danger)}.config-guidance{margin-top:var(--space-6);padding:var(--space-4);background:var(--color-info-bg);border:1px solid var(--color-info);border-radius:var(--radius-md);font-size:var(--font-size-sm)}.config-guidance pre{margin-top:var(--space-2);padding:var(--space-3);background:var(--color-bg-tertiary);border-radius:var(--radius-sm);font-family:monospace;font-size:var(--font-size-xs);overflow-x:auto;white-space:pre}.config-guidance p{color:var(--color-text-secondary);margin-bottom:var(--space-2)}.breadcrumb{display:flex;align-items:center;gap:var(--space-1);font-size:var(--font-size-xs);color:var(--color-text-secondary);margin-bottom:var(--space-2)}.breadcrumb-page{background:none;border:none;color:var(--color-primary);cursor:pointer;font-size:inherit;padding:0;font-family:inherit}.breadcrumb-page:hover{text-decoration:underline}.breadcrumb-separator{color:var(--color-text-muted)}.breadcrumb-current{color:var(--color-text-secondary);font-weight:var(--font-weight-medium)}.tab-nav{display:flex;gap:var(--space-1);border-bottom:1px solid var(--color-border)}.tab-btn{padding:var(--space-2) var(--space-4);background:none;border:none;border-bottom:2px solid transparent;font-size:var(--font-size-sm);font-weight:500;color:var(--color-text-secondary);cursor:pointer;transition:color .15s,border-color .15s}.tab-btn:hover{color:var(--color-text)}.tab-btn.active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.pagination{display:flex;justify-content:space-between;align-items:center;margin-top:var(--space-4)}.pagination-info{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.pagination-buttons{display:flex;gap:var(--space-2)}.notif-disabled-banner{padding:var(--space-3) var(--space-4);background:var(--color-warning-bg);border:1px solid var(--color-warning);border-radius:var(--radius-md);margin-bottom:var(--space-4);font-size:var(--font-size-sm);color:var(--color-text)}.settings-save-bar{position:sticky;top:var(--header-height);z-index:4;display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);background:var(--color-warning-bg);border:1px solid var(--color-warning);border-radius:var(--radius-md);margin-bottom:var(--space-4);font-size:var(--font-size-sm);color:var(--color-text)}.settings-save-bar-actions{display:flex;gap:var(--space-2)}.settings-category{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-lg);margin-bottom:var(--space-4);overflow:hidden}.settings-category-header{padding:var(--space-4) var(--space-6);border-bottom:1px solid var(--color-border)}.settings-category-header h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-1)}.settings-category-body{padding:var(--space-4) var(--space-6)}.settings-fields-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-4)}.settings-fields-grid .form-field{margin-bottom:0}.settings-field-full{grid-column:1 / -1}.settings-subgroup{margin-bottom:var(--space-4)}.settings-subgroup-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-3);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border)}.rpc-field-row{display:flex;gap:var(--space-2);align-items:flex-end}.rpc-field-row .form-field{flex:1;margin-bottom:0}.rpc-test-result{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--font-size-xs);margin-top:var(--space-1)}.rpc-test-result--success{color:var(--color-success)}.rpc-test-result--failure{color:var(--color-danger)}.rpc-pool-network{border:1px solid var(--color-border);border-radius:var(--radius-md);margin-bottom:var(--space-2);overflow:hidden}.rpc-pool-network-header{display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-3);cursor:pointer;background:var(--color-bg-secondary);font-weight:500;font-size:var(--font-size-sm);user-select:none;list-style:none}.rpc-pool-network-header::-webkit-details-marker{display:none}.rpc-pool-network-header:before{content:"▶";margin-right:var(--space-2);font-size:.65em;transition:transform .15s}.rpc-pool-network[open]>.rpc-pool-network-header:before{transform:rotate(90deg)}.rpc-pool-url-count{font-size:var(--font-size-xs);color:var(--color-text-secondary);font-weight:400}.rpc-url-list{padding:var(--space-2) 0}.rpc-url-item{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-3);font-size:var(--font-size-sm);border-bottom:1px solid var(--color-border-light, rgba(0,0,0,.05))}.rpc-url-item:last-of-type{border-bottom:none}.rpc-url-item--builtin{color:var(--color-text-secondary)}.rpc-url-disabled{opacity:.5}.rpc-url-priority{font-size:var(--font-size-xs);color:var(--color-text-secondary);min-width:2em;text-align:right;font-weight:500}.rpc-url-item-url{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono, monospace);font-size:var(--font-size-xs)}.rpc-url-actions{display:flex;gap:2px;align-items:center;flex-shrink:0}.rpc-action-btn{padding:2px 6px!important;min-width:0!important;font-size:var(--font-size-xs)!important;line-height:1.2!important}.rpc-delete-btn{color:var(--color-danger)!important}.rpc-toggle-off{color:var(--color-text-secondary)!important;opacity:.6}.badge-builtin{font-size:.65rem;background:var(--color-info-bg, #e0f2fe);color:var(--color-info, #0369a1);padding:1px 6px;border-radius:var(--radius-sm);white-space:nowrap;flex-shrink:0}.rpc-add-url{display:flex;gap:var(--space-2);padding:var(--space-2) var(--space-3);align-items:center}.rpc-add-url-input{flex:1;padding:var(--space-1) var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-family:var(--font-mono, monospace);background:var(--color-bg);color:var(--color-text)}.rpc-add-url-input::placeholder{color:var(--color-text-secondary);opacity:.6}.rpc-url-status{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--font-size-xs);white-space:nowrap}.rpc-url-status-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.rpc-url-status-dot--available{background-color:var(--color-success)}.rpc-url-status-dot--cooldown{background-color:var(--color-warning)}.rpc-url-status-dot--unknown{background-color:var(--color-text-muted)}.rpc-url-cooldown-info{color:var(--color-warning);font-size:var(--font-size-xs)}.rpc-url-test-inline{display:inline-flex;align-items:center;gap:var(--space-1)}.settings-info-box{padding:var(--space-3) var(--space-4);background:var(--color-info-bg);border:1px solid var(--color-info);border-radius:var(--radius-md);font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-top:var(--space-3)}.settings-info-box a{color:var(--color-primary);text-decoration:underline}.notif-test-section{margin-top:var(--space-4);padding-top:var(--space-4);border-top:1px solid var(--color-border)}.event-filter-groups{display:flex;flex-direction:column;gap:var(--space-2)}.event-filter-group{border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.event-filter-group[open]>summary{border-bottom:1px solid var(--color-border)}.event-filter-group-header{display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-3);cursor:pointer;background:var(--color-bg-secondary);font-weight:500;font-size:var(--font-size-sm);user-select:none;list-style:none}.event-filter-group-header::-webkit-details-marker{display:none}.event-filter-group-header:before{content:"▶";margin-right:var(--space-2);font-size:.65em;transition:transform .15s}.event-filter-group[open]>.event-filter-group-header:before{transform:rotate(90deg)}.event-filter-group-all{display:flex;align-items:center;gap:var(--space-1);font-size:var(--font-size-xs);font-weight:400;cursor:pointer}.event-filter-events{display:flex;flex-direction:column}.event-filter-event{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-3) var(--space-1) var(--space-5);font-size:var(--font-size-sm);cursor:pointer;border-bottom:1px solid var(--color-border-light, rgba(0,0,0,.05))}.event-filter-event:last-child{border-bottom:none}.event-filter-event:hover{background:var(--color-bg-secondary)}.event-filter-event code{font-size:var(--font-size-xs);min-width:180px;color:var(--color-text)}.event-desc{color:var(--color-text-secondary);font-size:var(--font-size-xs)}.event-broadcast{opacity:.7}.event-broadcast-badge{font-size:.65rem;background:var(--color-warning-bg, #fef3c7);color:var(--color-warning, #92400e);padding:1px 6px;border-radius:var(--radius-sm);margin-left:auto;white-space:nowrap}.settings-category-actions{display:flex;gap:var(--space-2);margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--color-border)}.dynamic-row-list{display:flex;flex-direction:column;gap:var(--space-2)}.dynamic-row{display:flex;align-items:flex-start;gap:var(--space-2)}.dynamic-row-fields{flex:1;display:flex;gap:var(--space-2);align-items:flex-start}.dynamic-row-fields .form-field{flex:1;margin-bottom:0}.dynamic-row-remove{flex-shrink:0;margin-top:var(--space-6);color:var(--color-danger)}.policy-form-section{margin-bottom:var(--space-4)}.policy-form-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-2)}.policy-form-header label{font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm)}.json-toggle{font-size:var(--font-size-xs)}.policy-form-placeholder{color:var(--color-text-secondary);font-size:var(--font-size-sm);padding:var(--space-4);border:1px dashed var(--color-border);border-radius:var(--radius-md);text-align:center}.policy-form-fields{display:flex;flex-direction:column;gap:var(--space-3)}.policy-form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-3)}.policy-form-grid .form-field{margin-bottom:0}.currency-select{position:relative}.currency-select-trigger{width:100%;display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);cursor:pointer;font-size:var(--font-size-sm);font-family:var(--font-family);color:var(--color-text)}.currency-select-trigger:hover{border-color:var(--color-primary)}.currency-select-chevron{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.currency-rate-preview{margin-top:var(--space-1);font-size:var(--font-size-xs);color:var(--color-text-secondary)}.currency-select-dropdown{position:absolute;top:100%;left:0;right:0;z-index:50;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);box-shadow:0 4px 12px #0000001a;margin-top:var(--space-1)}.currency-select-search{width:100%;padding:var(--space-2) var(--space-3);border:none;border-bottom:1px solid var(--color-border);outline:none;font-size:var(--font-size-sm);font-family:var(--font-family)}.currency-select-list{max-height:300px;overflow-y:auto}.currency-select-option{width:100%;display:flex;gap:var(--space-2);padding:var(--space-2) var(--space-3);border:none;background:none;cursor:pointer;text-align:left;font-size:var(--font-size-sm);font-family:var(--font-family);color:var(--color-text)}.currency-select-option:hover{background:var(--color-bg-secondary)}.currency-select-option--active{background:var(--color-primary-light);font-weight:var(--font-weight-semibold)}.currency-option-code{font-weight:var(--font-weight-semibold);min-width:3rem}.currency-option-name{flex:1}.currency-option-symbol{color:var(--color-text-secondary)}.currency-select-empty{padding:var(--space-3);text-align:center;color:var(--color-text-secondary);font-size:var(--font-size-sm)}.search-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:flex-start;justify-content:center;padding-top:15vh;z-index:100}.search-popover{background:var(--color-bg);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:560px;max-height:60vh;overflow:hidden;display:flex;flex-direction:column}.search-input-wrapper{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border)}.search-input-wrapper input{width:100%;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-base);outline:none;background:var(--color-bg);color:var(--color-text)}.search-input-wrapper input:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.search-results{overflow-y:auto;flex:1}.search-result-item{display:block;width:100%;padding:var(--space-3) var(--space-4);border:none;border-bottom:1px solid var(--color-border);background:none;text-align:left;cursor:pointer;font-family:inherit;color:var(--color-text)}.search-result-item:hover,.search-result-item.selected{background:var(--color-bg-secondary)}.search-result-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);margin-bottom:2px}.search-result-desc{font-size:var(--font-size-xs);color:var(--color-text-secondary);margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-path{font-size:var(--font-size-xs);color:var(--color-text-muted)}.search-empty{padding:var(--space-6) var(--space-4);text-align:center;color:var(--color-text-muted);font-size:var(--font-size-sm)}.search-hint{padding:var(--space-2) var(--space-4);font-size:var(--font-size-xs);color:var(--color-text-muted);border-top:1px solid var(--color-border);display:flex;gap:var(--space-4)}.search-hint kbd{background:var(--color-bg-tertiary);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:0 var(--space-1);font-size:var(--font-size-xs);font-family:inherit}.header-actions{display:flex;align-items:center;gap:var(--space-2)}.btn-search{padding:var(--space-1) var(--space-2);font-size:var(--font-size-base);background:none;border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;color:var(--color-text-secondary);transition:background .15s,color .15s;line-height:1}.btn-search:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.form-field--highlight{animation:field-highlight 2s ease-out;border-radius:var(--radius-md)}@keyframes field-highlight{0%{background:var(--color-primary-light);box-shadow:0 0 0 2px var(--color-primary)}to{background:transparent;box-shadow:none}}.unsaved-dialog-footer{justify-content:flex-end;gap:var(--space-2)}.filter-bar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-3);margin-bottom:var(--space-4)}.filter-field{display:flex;flex-direction:column;gap:var(--space-1)}.filter-field label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.03em}.filter-field select,.filter-field input[type=date]{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);background:var(--color-bg);color:var(--color-text);outline:none;transition:border-color .15s;min-width:140px}.filter-field select:focus,.filter-field input[type=date]:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.filter-clear{align-self:flex-end}.search-input{position:relative;display:inline-flex;align-items:center;max-width:400px;width:100%;margin-bottom:var(--space-4)}.search-input input[type=text]{width:100%;padding:var(--space-2) var(--space-3);padding-right:var(--space-8);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);background:var(--color-bg);color:var(--color-text);outline:none;transition:border-color .15s}.search-input input[type=text]:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.search-clear{position:absolute;right:var(--space-2);background:none;border:none;font-size:var(--font-size-sm);color:var(--color-text-muted);cursor:pointer;padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm)}.search-clear:hover{color:var(--color-text);background:var(--color-bg-tertiary)}@media(max-width:768px){.channel-grid,.settings-fields-grid{grid-template-columns:1fr}.filter-bar{flex-direction:column;align-items:stretch}.filter-field select,.filter-field input[type=date]{min-width:0;width:100%}.search-input{max-width:100%}}
|