:root{--c-primary: #2a4d69;--c-accent: #4b86b4;--c-background: #f8f9fa;--c-text: #212529;--c-text-muted: #6c757d;--c-border: #dee2e6;--c-success: #28a745;--c-warning: #ffc107;--c-danger: #dc3545;--c-illustration-1: #e7eff6;--c-illustration-2: #b8d8e8;--c-illustration-3: #4b86b4;--c-illustration-4: #2a4d69;--c-surface: #ffffff;--c-surface-alt: #eef3f8;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--shadow-sm: 0 1px 2px rgb(33 37 41 / 6%), 0 1px 3px rgb(33 37 41 / 8%);--shadow-md: 0 4px 12px rgb(33 37 41 / 8%);--shadow-lg: 0 12px 32px rgb(33 37 41 / 12%);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--space-7: 48px;--font-sans: "Inter", "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;--transition-fast: .12s ease;--transition-base: .2s ease;color-scheme:light}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;min-height:100%}body{background:var(--c-background);color:var(--c-text);font-family:var(--font-sans);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{margin:0 0 var(--space-3);font-weight:650;line-height:1.25;letter-spacing:-.01em}h1{font-size:1.75rem}h2{font-size:1.25rem}h3{font-size:1.0625rem}p{margin:0 0 var(--space-3)}a{color:var(--c-accent);text-decoration:none}a:hover,a:focus-visible{text-decoration:underline}:focus-visible{outline:2px solid var(--c-accent);outline-offset:2px}.page{max-width:1080px;margin:0 auto;padding:var(--space-5) var(--space-4) var(--space-7)}.page--narrow{max-width:720px}.card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:var(--space-5)}.card+.card{margin-top:var(--space-4)}.card__title{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-4)}.card__title h2{margin:0}.stack{display:flex;flex-direction:column;gap:var(--space-4)}.row{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}.row--between{justify-content:space-between}.muted{color:var(--c-text-muted)}.small{font-size:.875rem}.tiny{font-size:.8125rem}.strong{font-weight:600}.text-danger{color:var(--c-danger)}.text-success{color:var(--c-success)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:10px var(--space-4);border:1px solid transparent;border-radius:var(--radius-sm);background:var(--c-primary);color:#fff;font:inherit;font-weight:550;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),opacity var(--transition-fast)}.btn:hover:not(:disabled){background:#22405a}.btn:disabled{opacity:.55;cursor:not-allowed}.btn--primary{background:var(--c-primary)}.btn--accent{background:var(--c-accent)}.btn--accent:hover:not(:disabled){background:#3f739c}.btn--ghost{background:transparent;border-color:var(--c-border);color:var(--c-text)}.btn--ghost:hover:not(:disabled){background:var(--c-surface-alt)}.btn--danger{background:transparent;border-color:var(--c-danger);color:var(--c-danger)}.btn--danger:hover:not(:disabled){background:#fdf0f1}.btn--sm{padding:6px var(--space-3);font-size:.875rem}.btn--block{width:100%}.field{display:flex;flex-direction:column;gap:var(--space-1)}.field>label{font-size:.9375rem;font-weight:550}.field__hint{color:var(--c-text-muted);font-size:.8125rem}input[type=text],input[type=password],input[type=number],select,textarea{width:100%;padding:9px var(--space-3);border:1px solid var(--c-border);border-radius:var(--radius-sm);background:var(--c-surface);color:var(--c-text);font:inherit;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}input:focus,select:focus,textarea:focus{border-color:var(--c-accent);box-shadow:0 0 0 3px #4b86b42e;outline:none}.choice-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--space-3)}.choice{display:flex;flex-direction:column;gap:var(--space-1);padding:var(--space-3);border:1px solid var(--c-border);border-radius:var(--radius-sm);background:var(--c-surface);cursor:pointer;text-align:left;font:inherit;color:inherit;transition:border-color var(--transition-fast),background var(--transition-fast)}.choice:hover{border-color:var(--c-accent)}.choice[aria-pressed=true]{border-color:var(--c-primary);background:var(--c-illustration-1);box-shadow:inset 0 0 0 1px var(--c-primary)}.choice__label{font-weight:600}.choice__note{color:var(--c-text-muted);font-size:.8125rem}.alert{display:flex;gap:var(--space-3);padding:var(--space-3) var(--space-4);border:1px solid var(--c-border);border-left-width:4px;border-radius:var(--radius-sm);background:var(--c-surface)}.alert--danger{border-left-color:var(--c-danger);background:#fdf3f4}.alert--warning{border-left-color:var(--c-warning);background:#fffaf0}.alert--success{border-left-color:var(--c-success);background:#f2fbf4}.alert--info{border-left-color:var(--c-accent);background:var(--c-illustration-1)}.alert__title{font-weight:600;margin-bottom:var(--space-1)}.progress{position:relative;height:8px;border-radius:999px;background:var(--c-surface-alt);overflow:hidden}.progress__bar{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--c-accent),var(--c-primary));transition:width var(--transition-base)}.progress--indeterminate .progress__bar{width:35%;animation:coffre-indeterminate 1.3s ease-in-out infinite}@keyframes coffre-indeterminate{0%{transform:translate(-100%)}to{transform:translate(320%)}}.list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}.list__item{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--c-border);border-radius:var(--radius-sm);background:var(--c-surface)}.icon{flex:0 0 auto;width:24px;height:24px}.badge{display:inline-flex;align-items:center;padding:2px var(--space-2);border-radius:999px;background:var(--c-surface-alt);color:var(--c-text-muted);font-size:.75rem;font-weight:600;letter-spacing:.01em;white-space:nowrap}.badge--active{background:#eaf6ee;color:#1c7c34}.badge--expired{background:#fdf0f1;color:var(--c-danger)}.badge--revoked{background:#f2f3f5;color:#495057}.badge--purged{background:#f2f3f5;color:var(--c-text-muted)}.vault-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--space-4)}.stat{display:flex;flex-direction:column;gap:2px}.stat__value{font-weight:650;font-variant-numeric:tabular-nums}.stat__label{color:var(--c-text-muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.04em}.stat-row{display:flex;flex-wrap:wrap;gap:var(--space-5)}.state-screen{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--space-4);padding:var(--space-6) var(--space-4)}.state-screen__art{width:min(320px,70vw);height:auto;border-radius:var(--radius-md)}.state-screen h1{margin:0}.state-screen p{max-width:46ch;margin:0;color:var(--c-text-muted)}.skeleton{border-radius:var(--radius-sm);background:linear-gradient(90deg,#eef1f4 25%,#e3e8ee 37%,#eef1f4 63%);background-size:400% 100%;animation:coffre-shimmer 1.4s ease infinite}@keyframes coffre-shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}.spinner{width:18px;height:18px;border:2px solid rgb(255 255 255 / 45%);border-top-color:#fff;border-radius:50%;animation:coffre-spin .8s linear infinite}.spinner--dark{border-color:#2a4d6940;border-top-color:var(--c-primary)}@keyframes coffre-spin{to{transform:rotate(360deg)}}.app-header{border-bottom:1px solid var(--c-border);background:var(--c-surface)}.app-header__inner{max-width:1080px;margin:0 auto;padding:var(--space-3) var(--space-4);display:flex;align-items:center;justify-content:space-between;gap:var(--space-4)}.app-brand{display:inline-flex;align-items:center;gap:var(--space-2);color:var(--c-primary);font-weight:700;font-size:1.0625rem}.app-brand:hover{text-decoration:none}.app-nav{display:flex;gap:var(--space-4);font-size:.9375rem}.app-nav a[aria-current=page]{color:var(--c-primary);font-weight:600}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
