:root{--paper: #fbfaf6;--paper-2: #f4f2ea;--ink: #1a2b1f;--green: #14532d;--green-deep: #0f3d22;--seal: #b4471f;--line: #c9c4b4;--field-bg: #ffffff;--muted: #5a5c50;--danger: #9b2c2c;--radius: 8px;--maxw: 960px;--serif: "DM Serif Display", Georgia, serif;--sans: "Libre Franklin", system-ui, sans-serif;--line-soft: #ddd8c9;--shadow-doc: 0 1px 2px rgba(26, 43, 31, .05), 0 8px 24px -12px rgba(26, 43, 31, .18);--shadow-doc-hover: 0 2px 4px rgba(26, 43, 31, .07), 0 14px 32px -14px rgba(26, 43, 31, .22);--ring: 0 0 0 3px rgba(20, 83, 45, .14)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;background-color:var(--paper);background-image:radial-gradient(rgba(26,43,31,.018) 1px,transparent 1px),linear-gradient(180deg,#fdfcf8 0%,var(--paper) 38%,var(--paper-2) 100%);background-size:4px 4px,100% 100%;background-attachment:fixed}h1,h2,h3{font-family:var(--serif);font-weight:400;letter-spacing:-.01em;line-height:1.12;color:var(--green-deep);margin:0 0 .4em}h1{font-size:30px}h2{font-size:23px}h3{font-size:18px;letter-spacing:0}p{margin:0 0 1em}p:last-child{margin-bottom:0}a{color:var(--green);text-underline-offset:2px;text-decoration-color:#14532d59}a:hover{color:var(--green-deep);text-decoration-color:currentColor}::selection{background:#b4471f2e}.brand{font-family:var(--serif);font-size:22px;line-height:1;color:var(--green);display:inline-flex;align-items:center;gap:9px;letter-spacing:.01em}.brand-seal{position:relative;width:18px;height:18px;flex:0 0 auto;border-radius:50%;background:radial-gradient(circle at 35% 30%,#c9603a 0%,var(--seal) 55%,#8f3415 100%);box-shadow:inset 0 0 0 1.5px #ffffff59,inset 0 0 0 3px var(--seal),0 1px 1px #1a2b1f40}.brand-seal:after{content:"";position:absolute;top:50%;left:50%;width:6px;height:6px;background:#fbfaf6eb;transform:translate(-50%,-50%) rotate(45deg);border-radius:1px}.label{display:block;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin-bottom:6px}.input{width:100%;padding:10px 12px;font:inherit;color:var(--ink);background:var(--field-bg);border:1px solid var(--line);border-left:3px solid var(--green);border-radius:var(--radius);transition:border-color .15s ease,box-shadow .15s ease}.input::placeholder{color:#9b9c8e}.input:hover{border-color:#b6b0a0}.input:focus{outline:none;border-color:var(--green);box-shadow:var(--ring)}.input[aria-invalid=true]{border-color:var(--danger);border-left-color:var(--danger)}.input[aria-invalid=true]:focus{box-shadow:0 0 0 3px #9b2c2c24}.field{margin-bottom:16px}.field-error{color:var(--danger);font-size:13px;margin-top:6px}.btn{font:inherit;font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-size:13px;padding:11px 18px;border-radius:var(--radius);border:1px solid transparent;cursor:pointer;background:var(--green);color:var(--paper);transition:background .15s ease,box-shadow .15s ease,transform .05s ease}.btn:hover{background:var(--green-deep)}.btn:focus-visible{outline:none;box-shadow:var(--ring)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn:disabled:active{transform:none}.btn-secondary{background:transparent;color:var(--green);border-color:var(--line)}.btn-secondary:hover{background:var(--paper-2);border-color:var(--green)}.btn-danger{background:var(--seal);color:#fff}.btn-danger:hover{background:#973a17}.btn-ghost{background:transparent;color:var(--muted);border-color:var(--line)}.btn-ghost:hover{background:var(--paper-2);color:var(--ink)}.card{position:relative;background:var(--field-bg);border:1px solid var(--line);border-top:3px solid var(--green);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow-doc)}.card:after{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:linear-gradient(90deg,#b4471f80,#b4471f00);pointer-events:none}.banner{border-radius:var(--radius);padding:12px 14px;font-size:14px;margin-bottom:16px;border:1px solid;border-left-width:3px}.banner-error{background:#fbeceb;border-color:#e3b9b3;border-left-color:var(--danger);color:var(--danger)}.banner-info{background:#eef3ee;border-color:#c3d3c3;border-left-color:var(--green);color:var(--green-deep)}.badge{display:inline-block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;padding:2px 9px;border-radius:999px;border:1px solid var(--line);line-height:1.6}.badge-active{background:#eef3ee;color:var(--green-deep);border-color:#c3d3c3}.badge-pending{background:#fdf1e7;color:var(--seal);border-color:#e8c3a6}.badge-revoked{background:var(--paper-2);color:var(--muted)}.auth-shell{min-height:100%;display:grid;place-items:center;padding:32px}.auth-card{width:100%;max-width:420px}.app-header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--line);box-shadow:0 2px 0 -1px var(--seal);background:var(--paper)}.app-main{max-width:var(--maxw);margin:0 auto;padding:32px 24px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#1a2b1f73;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:grid;place-items:center;padding:24px;z-index:50}.modal{background:var(--field-bg);border-radius:var(--radius);border-top:3px solid var(--seal);padding:24px;max-width:520px;width:100%;box-shadow:var(--shadow-doc-hover)}.mono{font-family:ui-monospace,SF Mono,Menlo,monospace}.key-reveal{background:var(--paper-2);border:1px dashed var(--line);border-radius:var(--radius);padding:12px;word-break:break-all;line-height:1.6}.spinner{width:28px;height:28px;border:3px solid var(--line);border-top-color:var(--green);border-radius:50%;animation:spin .8s linear infinite}.center-page{min-height:100%;display:grid;place-items:center}@keyframes spin{to{transform:rotate(360deg)}}.keys-section{margin-bottom:28px}.key-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 0;border-bottom:1px solid var(--line-soft)}.key-row:last-child{border-bottom:none}.empty{text-align:center;padding:40px 0;color:var(--muted)}@media (prefers-reduced-motion: reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}
