:root{--bg-0: #07080c;--bg-1: #0b0d12;--bg-2: #11141b;--bg-3: #181c25;--bg-4: #1f2430;--line: rgba(255, 255, 255, .08);--line-strong: rgba(255, 255, 255, .16);--fg-0: #f5f7fb;--fg-1: #cdd3e0;--fg-2: #8a93a6;--fg-3: #5b6172;--accent: #7c5cff;--accent-2: #22d3ee;--accent-soft: rgba(124, 92, 255, .18);--danger: #ff5d7a;--danger-soft: rgba(255, 93, 122, .16);--success: #4ade80;--warning: #fbbf24;--radius-sm: 6px;--radius: 10px;--radius-lg: 16px;--radius-xl: 22px;--shadow-1: 0 1px 2px rgba(0, 0, 0, .4);--shadow-2: 0 10px 30px rgba(0, 0, 0, .45);--shadow-3: 0 24px 60px rgba(0, 0, 0, .55);--shadow-glow: 0 0 0 1px var(--accent-soft), 0 10px 40px rgba(124, 92, 255, .25);--gap-1: 4px;--gap-2: 8px;--gap-3: 12px;--gap-4: 16px;--gap-5: 24px;--gap-6: 32px;--font: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, monospace;--t-fast: .12s cubic-bezier(.2, .7, .2, 1);--t-base: .22s cubic-bezier(.2, .7, .2, 1)}*{box-sizing:border-box}*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);font-size:14px;color:var(--fg-0);background:radial-gradient(1200px 600px at 80% -10%,rgba(124,92,255,.15),transparent 60%),radial-gradient(900px 500px at -10% 110%,rgba(34,211,238,.12),transparent 60%),var(--bg-0);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow:hidden}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;padding:0}input,textarea,select{font:inherit;color:inherit}a{color:var(--accent-2);text-decoration:none}a:hover{text-decoration:underline}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--bg-4);border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#2a2f3d}::-webkit-scrollbar-track{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.row{display:flex;align-items:center;gap:var(--gap-2)}.col{display:flex;flex-direction:column;gap:var(--gap-2)}.grow{flex:1}.center{display:flex;align-items:center;justify-content:center}.muted{color:var(--fg-2)}.tiny{font-size:12px}.hidden{display:none!important}.app{display:grid;grid-template-rows:auto 1fr auto;height:100vh}.header{display:flex;align-items:center;gap:var(--gap-3);padding:12px 18px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(255,255,255,.02),transparent);backdrop-filter:blur(12px);position:relative;z-index:60}.brand{display:flex;align-items:center;gap:10px;font-weight:700;letter-spacing:.2px}.brand-mark{width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,var(--accent),var(--accent-2));box-shadow:var(--shadow-glow);display:grid;place-items:center;font-size:11px;font-weight:800;color:#0b0d12}.brand-sub{color:var(--fg-2);font-weight:500;margin-left:4px}.header-actions{margin-left:auto;display:flex;gap:var(--gap-2);align-items:center}.main{overflow:hidden;min-height:0;position:relative}.footer{display:flex;align-items:center;gap:var(--gap-3);padding:10px 18px;border-top:1px solid var(--line);background:#07080cb3;backdrop-filter:blur(12px);font-size:12px;color:var(--fg-2)}.footer .dot{width:8px;height:8px;border-radius:50%;background:var(--success);box-shadow:0 0 8px var(--success)}.footer .dot.idle{background:var(--fg-3);box-shadow:none}.btn{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:var(--radius);background:var(--bg-3);color:var(--fg-0);border:1px solid var(--line);transition:background var(--t-fast),border-color var(--t-fast),transform var(--t-fast);white-space:nowrap;user-select:none}.btn:hover{background:var(--bg-4);border-color:var(--line-strong)}.btn:active{transform:translateY(1px)}.btn[disabled]{opacity:.45;cursor:not-allowed}.btn.primary{background:linear-gradient(135deg,var(--accent),#5b3df0);border-color:transparent;color:#fff;box-shadow:var(--shadow-glow)}.btn.primary:hover{filter:brightness(1.08)}.btn.ghost{background:transparent}.btn.ghost:hover{background:var(--bg-2)}.btn.danger{background:var(--danger-soft);color:#ffb0bf;border-color:#ff5d7a4d}.btn.danger:hover{background:#ff5d7a40}.btn.sm{padding:6px 10px;font-size:12px}.btn.icon{padding:8px;width:36px;height:36px;justify-content:center}.btn.icon.sm{width:28px;height:28px;padding:4px}.kbd{display:inline-block;padding:2px 6px;font-family:var(--mono);font-size:11px;background:var(--bg-3);border:1px solid var(--line);border-bottom-width:2px;border-radius:6px;color:var(--fg-1)}.dropzone{height:100%;display:grid;place-items:center;padding:32px}.dropzone-card{width:min(720px,100%);padding:48px 36px;border:1px dashed var(--line-strong);border-radius:var(--radius-xl);background:radial-gradient(600px 200px at 50% 0%,rgba(124,92,255,.15),transparent 70%),var(--bg-1);text-align:center;transition:border-color var(--t-base),background var(--t-base),transform var(--t-base)}.dropzone-card.hover{border-color:var(--accent);background:radial-gradient(600px 240px at 50% 0%,rgba(124,92,255,.28),transparent 70%),var(--bg-2);transform:translateY(-2px)}.dropzone-icon{width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,var(--accent),var(--accent-2));display:grid;place-items:center;margin:0 auto 16px;box-shadow:var(--shadow-glow)}.dropzone h2{margin:0 0 6px;font-size:22px}.dropzone p{margin:0;color:var(--fg-2)}.dropzone-formats{margin-top:18px;display:flex;justify-content:center;gap:8px;color:var(--fg-3);font-size:12px}.editor{display:grid;grid-template-columns:260px 1fr;height:100%;min-height:0}.sidebar{border-right:1px solid var(--line);background:#0b0d1280;display:flex;flex-direction:column;min-height:0}.sidebar-section{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:10px}.sidebar-title{font-size:11px;color:var(--fg-3);text-transform:uppercase;letter-spacing:.12em;font-weight:700}.sidebar-file{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius)}.sidebar-file .name{font-weight:600;font-size:13px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-file .meta{font-size:11px;color:var(--fg-2)}.tool-list{display:flex;flex-direction:column;gap:2px}.tool{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;color:var(--fg-1);font-size:13px;transition:background var(--t-fast),color var(--t-fast)}.tool:hover{background:var(--bg-2);color:var(--fg-0)}.tool[disabled]{opacity:.35;pointer-events:none}.tool .badge{margin-left:auto;font-size:11px;color:var(--fg-2)}.workspace{padding:20px 24px;overflow:auto;min-height:0}.workspace-head{display:flex;align-items:center;gap:var(--gap-3);margin-bottom:18px}.workspace-head h1{margin:0;font-size:18px}.workspace-head .sub{color:var(--fg-2);font-size:12px}.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 12px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:16px;position:sticky;top:0;z-index:2;backdrop-filter:blur(8px)}.toolbar .divider{width:1px;height:22px;background:var(--line);margin:0 4px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:18px;padding-bottom:80px}.grid.small{grid-template-columns:repeat(auto-fill,minmax(130px,1fr))}.grid.large{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.page-card{position:relative;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;transition:border-color var(--t-fast),transform var(--t-fast),box-shadow var(--t-fast);cursor:pointer;user-select:none}.page-card:hover{border-color:var(--line-strong)}.page-card.selected{border-color:var(--accent);box-shadow:var(--shadow-glow)}.page-card .thumb{aspect-ratio:.77;display:grid;place-items:center;background:repeating-linear-gradient(45deg,rgba(255,255,255,.02) 0 10px,transparent 10px 20px),var(--bg-3)}.page-card .thumb img{max-width:100%;max-height:100%;border-radius:4px;box-shadow:var(--shadow-2);background:#fff;display:block}.page-card .thumb .skeleton{width:60%;height:80%;background:linear-gradient(90deg,var(--bg-3),var(--bg-4),var(--bg-3));background-size:200% 100%;animation:shimmer 1.4s linear infinite;border-radius:4px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.page-card .meta{display:flex;align-items:center;gap:8px;padding:8px 10px;border-top:1px solid var(--line);font-size:12px;color:var(--fg-2)}.page-card .meta .num{font-family:var(--mono);color:var(--fg-0);font-weight:700}.page-card .meta .rot{margin-left:auto}.page-card .hover-actions{position:absolute;top:6px;right:6px;display:flex;gap:4px;opacity:0;transition:opacity var(--t-fast)}.page-card:hover .hover-actions,.page-card.selected .hover-actions{opacity:1}.hover-actions .btn.icon{background:#0f121ad9;border-color:#ffffff1a;backdrop-filter:blur(6px)}.modal-backdrop{position:fixed;inset:0;background:#03040899;backdrop-filter:blur(6px);display:grid;place-items:center;z-index:50;padding:24px}.modal{width:min(560px,100%);background:var(--bg-1);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-3);overflow:hidden}.modal.lg{width:min(820px,100%)}.modal-head{display:flex;align-items:center;gap:10px;padding:16px 20px;border-bottom:1px solid var(--line)}.modal-head h3{margin:0;font-size:16px}.modal-head .close{margin-left:auto}.modal-body{padding:18px 20px;max-height:60vh;overflow:auto}.modal-foot{display:flex;gap:8px;justify-content:flex-end;padding:14px 20px;border-top:1px solid var(--line);background:var(--bg-2)}.json-editor{width:100%;min-height:320px;font-family:var(--mono);font-size:12.5px;line-height:1.55;padding:14px 16px;background:var(--bg-0);color:var(--fg-1);border:1px solid var(--line);border-radius:var(--radius);resize:vertical;outline:none;tab-size:2}.json-editor:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.json-status{font-size:12px}.json-status.ok{color:var(--success)}.json-status.err{color:var(--danger)}.empty{text-align:center;padding:60px 20px;color:var(--fg-2)}.toast-stack{position:fixed;bottom:60px;right:20px;display:flex;flex-direction:column;gap:8px;z-index:60;pointer-events:none}.toast{background:var(--bg-3);border:1px solid var(--line);border-left:3px solid var(--accent);padding:10px 14px;border-radius:var(--radius);box-shadow:var(--shadow-2);min-width:220px;font-size:13px}.toast.error{border-left-color:var(--danger)}.toast.success{border-left-color:var(--success)}.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;background:var(--bg-3);border:1px solid var(--line);border-radius:999px;font-size:11px;color:var(--fg-1)}.lang{position:relative}.lang-menu{position:absolute;top:calc(100% + 6px);right:0;min-width:190px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-3);padding:4px;z-index:200;display:flex;flex-direction:column}.lang-list{display:flex;flex-direction:column;gap:2px;border:1px solid var(--line);border-radius:var(--radius);padding:4px;background:var(--bg-2)}.lang-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:6px;text-align:left;color:var(--fg-1);font-size:13px;transition:background var(--t-fast),color var(--t-fast)}.lang-item:hover{background:var(--bg-3);color:var(--fg-0)}.lang-item.active{color:var(--fg-0);background:var(--accent-soft)}.lang-item>svg:last-child{margin-left:auto;color:var(--accent)}.lang-code{font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:.04em}.lang-label{flex:1;text-align:left}.flag{flex-shrink:0;border-radius:2px;box-shadow:0 0 0 1px #00000040;display:block}.donate-btn{text-decoration:none;background:linear-gradient(135deg,#ff6b9a,#ff3d7f);color:#fff;border-color:transparent;font-weight:600}.donate-btn:hover{filter:brightness(1.08);background:linear-gradient(135deg,#ff6b9a,#ff3d7f);color:#fff}.donate-btn svg{color:#fff}.donate-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.donate-tile{padding:14px 8px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;font-size:16px;font-weight:700;transition:background var(--t-fast),border-color var(--t-fast)}.donate-tile:hover{background:var(--bg-3);border-color:var(--line-strong)}.donate-tile.active{background:linear-gradient(135deg,#ff6b9a33,#ff3d7f33);border-color:#ff3d7f;color:#ffd0df}.tool-switcher{margin-left:8px}.compare-view{max-width:1200px;margin:0 auto;padding:24px;display:flex;flex-direction:column;gap:18px}.cmp-head h1{margin:0;font-size:20px}.cmp-head .sub{color:var(--fg-2);font-size:13px}.cmp-slots{display:grid;grid-template-columns:1fr auto 1fr;gap:14px;align-items:stretch}.cmp-vs{display:grid;place-items:center;color:var(--fg-3)}.cmp-slot{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:130px;padding:20px;border:1px dashed var(--line-strong);border-radius:var(--radius-lg);background:var(--bg-1);cursor:pointer;transition:border-color var(--t-base),background var(--t-base);text-align:center}.cmp-slot:hover,.cmp-slot.hover{border-color:var(--accent);background:var(--bg-2)}.cmp-slot.filled{border-style:solid}.cmp-slot-name{font-weight:600;font-size:13px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cmp-tag{position:absolute;top:8px;left:8px;padding:2px 8px;border-radius:4px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.cmp-tag-a{background:#dc26262e;color:#ffb4b4}.cmp-tag-b{background:#16a34a2e;color:#b6f5d1}.cmp-actions{display:flex;align-items:center;gap:12px}.cmp-progress{flex:1;height:6px;background:var(--bg-3);border-radius:999px;overflow:hidden}.cmp-progress-bar{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .2s}.cmp-error{padding:10px 14px;background:var(--danger-soft);border:1px solid rgba(255,93,122,.3);border-radius:var(--radius);color:#ffb0bf;font-size:13px}.cmp-summary{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 12px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);position:sticky;top:0;z-index:2;backdrop-filter:blur(8px)}.chip-warn{background:#eab3082e;color:#ffe08a;border-color:#eab3084d}.chip-ok{background:#4ade802e;color:#b6f5d1;border-color:#4ade804d}.cmp-legend{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--fg-2)}.cmp-key{display:inline-block;width:12px;height:12px;border-radius:3px;margin-left:8px}.cmp-key-removed{background:#dc2626}.cmp-key-added{background:#16a34a}.cmp-toggle{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--fg-2);cursor:pointer}.cmp-results{display:flex;flex-direction:column;gap:16px}.cmp-page{border:1px solid var(--line);border-radius:var(--radius);background:var(--bg-2);overflow:hidden}.cmp-page-changed{border-color:#eab30866}.cmp-page-only-a{border-color:#dc262666}.cmp-page-only-b{border-color:#16a34a66}.cmp-page-head{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--line)}.cmp-status{font-size:12px;font-weight:600}.cmp-status-same{color:var(--fg-3)}.cmp-status-changed{color:#ffe08a}.cmp-status-only-a{color:#ffb4b4}.cmp-status-only-b{color:#b6f5d1}.cmp-diff{font-family:var(--mono);font-size:12.5px;line-height:1.5;border:1px solid var(--line);border-radius:var(--radius);background:var(--bg-2);overflow:hidden}.cmp-page-marker{display:flex;align-items:center;gap:8px;padding:5px 12px;background:var(--bg-3);border-bottom:1px solid var(--line);border-top:1px solid var(--line);color:var(--fg-2);font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;position:sticky;top:0;z-index:1}.cmp-diff>.cmp-page-marker:first-child{border-top:0}.cmp-row{display:grid;grid-template-columns:28px 1fr 1fr;border-bottom:1px solid var(--line)}.cmp-row:last-child{border-bottom:0}.cmp-gutter{text-align:center;color:var(--fg-3);background:var(--bg-3);user-select:none;font-weight:700}.cmp-side-a,.cmp-side-b{padding:2px 10px;white-space:pre-wrap;word-break:break-word;border-left:1px solid var(--line)}.cmp-row-same .cmp-side-a,.cmp-row-same .cmp-side-b{color:var(--fg-1)}.cmp-row-removed .cmp-side-a{background:#dc262629;color:#ffb4b4}.cmp-row-removed .cmp-gutter{color:#ff7a7a}.cmp-row-added .cmp-side-b{background:#16a34a29;color:#b6f5d1}.cmp-row-added .cmp-gutter{color:#6ee7a8}.cmp-row-changed .cmp-side-a,.cmp-row-changed .cmp-side-b{background:#eab30814;color:var(--fg-1)}.cmp-row-changed .cmp-gutter{color:#ffe08a}.cmp-w-removed{background:#dc262652;color:#ffd0d0;border-radius:2px}.cmp-w-added{background:#16a34a52;color:#c8f5d8;border-radius:2px}.cmp-empty,.cmp-onlyone{padding:16px;color:var(--fg-3);font-size:13px}.cmp-onlyone .cmp-col{font-family:var(--mono);font-size:12.5px;line-height:1.5}.cmp-onlyone .cmp-col.removed .cmp-line{background:#dc262629;color:#ffb4b4}.cmp-onlyone .cmp-col.added .cmp-line{background:#16a34a29;color:#b6f5d1}.cmp-line{padding:2px 10px;white-space:pre-wrap;word-break:break-word}.account-view{max-width:1100px;margin:0 auto;padding:24px;display:flex;flex-direction:column;gap:18px}.account-head h1{margin:0;font-size:20px}.account-head .sub{color:var(--fg-2);font-size:13px}.account-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}.acc-section{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;gap:10px}.acc-section-head h2{margin:0;font-size:15px}.acc-form{display:flex;flex-direction:column;gap:6px}.acc-list{display:flex;flex-direction:column;gap:4px}.acc-item,.acc-sig{display:flex;align-items:center;gap:8px;padding:6px 8px;background:var(--bg-3);border:1px solid var(--line);border-radius:var(--radius)}.acc-item.default,.acc-sig.default{border-color:var(--accent);background:var(--accent-soft)}.acc-default-btn{flex-shrink:0;display:grid;place-items:center;padding:2px}.acc-radio{width:16px;height:16px;border-radius:50%;border:2px solid var(--line-strong);display:block}.acc-radio.on{border-color:var(--accent);background:radial-gradient(circle,var(--accent) 0 4px,transparent 5px)}.acc-item-body{flex:1;min-width:0}.acc-item-label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acc-item-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acc-sig-list{display:flex;flex-direction:column;gap:4px}.acc-sig-img{height:36px;max-width:140px;background:#fff;border-radius:4px;padding:3px}.acc-sig .acc-item-label{flex:1}@media (max-width: 820px){.account-grid{grid-template-columns:1fr}}.sig-saved-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.sig-saved-cell{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;transition:border-color var(--t-fast),background var(--t-fast)}.sig-saved-cell:hover{border-color:var(--line-strong)}.sig-saved-cell.on{border-color:var(--accent);background:var(--accent-soft)}.sig-saved-cell img{max-width:100%;height:56px;object-fit:contain;background:#fff;border-radius:4px;padding:4px}.letter-pick{display:flex;gap:6px;margin-bottom:4px}.letter-pick-select{flex:1;padding:6px 10px;font-size:12px}.letters-view{max-width:1100px;margin:0 auto;padding:24px;display:flex;flex-direction:column;gap:18px}.letters-head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.letters-head h1{margin:0;font-size:20px}.letters-head .sub{color:var(--fg-2);font-size:13px}.letters-form{display:flex;flex-direction:column;gap:14px}.letter-row2{display:grid;grid-template-columns:1fr 1fr;gap:14px}.letter-field{display:flex;flex-direction:column;gap:4px}.letter-label{font-size:13px;font-weight:600}.letter-input{width:100%;padding:9px 11px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);color:var(--fg-0);font-size:13px;font-family:inherit;outline:none;resize:vertical}.letter-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.letter-recipient-bar{display:flex;gap:6px;margin-bottom:4px}.letter-recipient-select{flex:1;padding:6px 10px;font-size:12px}.letter-sig{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.pj-list{display:flex;flex-direction:column;gap:6px}.pj-row{display:flex;gap:6px;align-items:center}.pj-row .letter-input{flex:1}.pj-file{flex-shrink:0;max-width:170px;cursor:pointer}.pj-file.has-file{border-color:var(--accent);color:var(--fg-0)}.pj-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pj-grip{flex-shrink:0;display:grid;place-items:center;width:20px;color:var(--fg-3);cursor:grab}.pj-grip:active{cursor:grabbing}.pj-row{cursor:grab}.pj-row.dragging{opacity:.5;outline:1px dashed var(--accent);border-radius:var(--radius)}.pj-row .letter-input,.pj-row .pj-file,.pj-row .btn{cursor:auto}.pj-row .pj-grip{cursor:grab}.pj-add-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.pj-add-row .letter-pick-select{flex:1;max-width:240px}.letter-sig-img{height:48px;max-width:200px;background:#fff;border:1px solid var(--line);border-radius:6px;padding:4px}.letters-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}.letter-tpl-list{display:flex;flex-direction:column;gap:4px}.letter-tpl{display:flex;align-items:center;gap:4px;border-radius:8px}.letter-tpl.editing{background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent)}.letters-editing{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--accent-2, #b9a8ff);padding:6px 10px;background:var(--accent-soft);border:1px solid var(--accent);border-radius:var(--radius);margin-top:4px}.letter-tpl-load{flex:1;display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;color:var(--fg-1);font-size:13px;text-align:left;transition:background var(--t-fast)}.letter-tpl-load:hover{background:var(--bg-3);color:var(--fg-0)}.letter-tpl-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 860px){.letter-row2{grid-template-columns:1fr}}.picker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px}.picker-cell{display:flex;flex-direction:column;gap:4px;padding:6px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;transition:border-color var(--t-fast),background var(--t-fast)}.picker-cell:hover{border-color:var(--line-strong)}.picker-cell.on{border-color:var(--accent);background:var(--accent-soft)}.picker-thumb{aspect-ratio:.72;display:grid;place-items:center;background:var(--bg-3);border-radius:4px;overflow:hidden}.picker-thumb img{max-width:100%;max-height:100%;background:#fff;box-shadow:var(--shadow-2)}.picker-thumb .skeleton{width:60%;height:80%;background:linear-gradient(90deg,var(--bg-3),var(--bg-4),var(--bg-3));background-size:200% 100%;animation:shimmer 1.4s linear infinite;border-radius:4px}.picker-cell-foot{display:flex;align-items:center;gap:6px;color:var(--fg-2)}.picker-check{width:16px;height:16px;border-radius:4px;border:1.5px solid var(--line-strong);display:grid;place-items:center;color:#fff}.picker-check.on{background:var(--accent);border-color:var(--accent)}.history-layout{display:flex;gap:14px;align-items:stretch}.history-rows{flex:0 0 240px;display:flex;flex-direction:column;gap:3px;overflow:auto;max-height:54vh;padding-right:2px}.hist-row{display:flex;align-items:center;gap:8px;width:100%;padding:7px 9px;border-radius:8px;border:1px solid transparent;background:transparent;color:var(--fg-1);cursor:pointer;text-align:left}.hist-row:hover{background:var(--bg-3)}.hist-row.selected{background:var(--accent-soft);border-color:var(--accent);color:var(--fg-0)}.hist-row.is-editing{box-shadow:inset 2px 0 0 var(--accent)}.hist-row-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px}.hist-row .tag{flex-shrink:0}.history-detail{flex:1;min-width:0;display:flex;flex-direction:column;gap:10px}.history-detail-meta{display:flex;flex-direction:column;gap:4px}.hist-detail-name{font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.history-detail-actions{display:flex;flex-wrap:wrap;gap:6px}.pdf-preview{display:flex;align-items:center;justify-content:center;background:var(--bg-3);border:1px solid var(--line);border-radius:var(--radius);overflow:auto;min-height:240px;max-height:42vh}.pdf-preview img{max-width:100%;max-height:42vh;display:block;box-shadow:0 2px 14px #00000073}.pdf-preview.is-empty{flex-direction:column;gap:10px;color:var(--fg-3)}.pdf-preview-spin{width:24px;height:24px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--accent);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.history-meta{display:flex;flex-wrap:wrap;gap:6px;font-size:11px;color:var(--fg-2)}.history-hash{font-family:var(--mono);font-size:10px;color:var(--fg-3);word-break:break-all}@media (max-width: 640px){.history-layout{flex-direction:column}.history-rows{flex-basis:auto;max-height:28vh}}.tag{display:inline-block;padding:1px 7px;border-radius:4px;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.tag-before{background:#78829633;color:#cfd6e3}.tag-after{background:#4ade802e;color:#b6f5d1}.tag-edit{background:#60a5fa2e;color:#bcd6ff}.tag-letters{background:#c084fc2e;color:#e2c8ff}.tool .badge{margin-left:auto;padding:1px 7px;border-radius:999px;background:var(--accent-soft);color:var(--fg-0);font-size:11px;font-weight:600}.page-editor{display:flex;flex-direction:column;height:100%;min-height:0}.editor-toolbar{position:sticky;top:0;z-index:4;display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 12px;background:#0b0d12d9;backdrop-filter:blur(12px);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:16px}.editor-toolbar .size-input{width:60px;text-align:center}.editor-toolbar .color-input{width:32px;height:28px;border:1px solid var(--line);border-radius:6px;padding:2px;background:var(--bg-3)}.page-stage{flex:1;min-height:0;overflow:auto;display:flex;justify-content:center;align-items:flex-start;padding:24px;background:radial-gradient(circle at 50% 0%,rgba(255,255,255,.03),transparent 60%),var(--bg-0);border-radius:var(--radius);border:1px solid var(--line)}.page-wrap{position:relative;display:inline-block;box-shadow:var(--shadow-3);border-radius:4px;overflow:hidden;background:#fff}.page-canvas{display:block}.ann-layer{position:absolute;inset:0;user-select:none}.ann-hint{position:absolute;top:10px;left:50%;transform:translate(-50%);padding:6px 12px;background:#0b0d12d9;border:1px solid var(--line);border-radius:999px;font-size:12px;color:var(--fg-0);pointer-events:none;backdrop-filter:blur(6px)}.ann{position:absolute;outline:1px dashed transparent;transition:outline-color var(--t-fast);pointer-events:auto}.ann.selected{outline-color:var(--accent)}.ann-rect,.ann-image{cursor:move}.ann-image img{width:100%;height:100%;pointer-events:none;user-select:none;display:block}.ann-text{cursor:move;white-space:pre-wrap;padding:2px;min-width:12px;min-height:14px}.ann-text-inner{outline:none;cursor:text}.ann-text.editing{cursor:text;background:#ffffff0f;outline:1px solid var(--accent)}.ann-handle{position:absolute;width:14px;height:14px;background:var(--accent);border:2px solid var(--bg-0);border-radius:50%;z-index:3;display:grid;place-items:center;color:#fff;padding:0}.handle-br{right:-7px;bottom:-7px;cursor:nwse-resize}.handle-del{top:-10px;right:-10px;width:22px;height:22px;background:var(--danger);cursor:pointer}.handle-del:hover{filter:brightness(1.1)}.handle-rot{top:-10px;left:-10px;width:20px;height:20px;background:var(--accent);cursor:grab;color:#fff}.handle-rot:active{cursor:grabbing}.handle-rot:hover{filter:brightness(1.1)}.handle-front,.handle-back{width:20px;height:20px;background:var(--bg-3);border:1px solid var(--accent);color:var(--fg-1);cursor:pointer}.handle-front{bottom:-10px;left:-10px}.handle-back{bottom:-10px;left:14px}.handle-front:hover,.handle-back:hover{background:var(--accent-soft);color:var(--fg-0)}.ann-draft{position:absolute;background:#ffffff80;border:1px dashed var(--accent);pointer-events:none}.ann-draft.highlight{background:#fde04766;border-style:solid;border-color:#fde047b3}.ann-draft.shape{background:transparent;border-style:solid;border-color:var(--accent)}.ann-draft-svg{position:absolute;inset:0;pointer-events:none}.ann-highlight{mix-blend-mode:multiply}.ann-shape:not(.ann-fillrect){background:transparent!important}.ann-fillrect{cursor:move}.ann-draw{background:transparent!important;cursor:move}.all-pages{display:flex;flex-direction:column;align-items:center;gap:24px;padding:8px 0 40px;overflow:auto;height:100%;min-height:0}.page-slot{display:flex;flex-direction:column;gap:8px;align-items:stretch}.page-slot-head{display:flex;align-items:center;gap:6px;padding:6px 8px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);font-size:12px;opacity:.6;transition:opacity var(--t-fast)}.page-slot:hover .page-slot-head{opacity:1}.page-placeholder{background:var(--bg-2);border:1px solid var(--line);border-radius:4px}.tools-bar{position:sticky;top:0;z-index:5;display:flex;flex-direction:column;gap:8px;padding:8px 10px;background:#0b0d12e0;backdrop-filter:blur(12px);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:14px}.tools-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.tools-row+.tools-row{padding-top:8px;border-top:1px solid var(--line)}.tools-bar .size-input{width:56px;text-align:center}.tools-bar .color-input{width:32px;height:28px;border:1px solid var(--line);border-radius:6px;padding:2px;background:var(--bg-3)}.seg{display:inline-flex;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);padding:2px;gap:2px}.seg .btn{border:0;background:transparent}.seg .btn.primary{background:var(--accent-soft);color:var(--fg-0);box-shadow:inset 0 0 0 1px var(--accent)}.text-layer{position:absolute;inset:0;pointer-events:none;user-select:none;overflow:hidden}.text-layer.editable .text-item{pointer-events:auto;cursor:text}.text-item{position:absolute;white-space:pre;color:transparent;background:transparent;transform-origin:0 0;font-family:sans-serif;border-radius:2px;transition:background var(--t-fast),outline var(--t-fast);outline:1px solid transparent}.text-layer.editable .text-item:hover{background:#7c5cff2e;outline-color:var(--accent)}.text-layer .text-item.selected{background:#7c5cff59;outline:1.5px solid var(--accent);outline-offset:1px}.text-layer.editable .text-item.edited{outline:1px dashed rgba(124,92,255,.5)}.text-layer.editable .text-item.edited:hover{background:#7c5cff1f}.text-sel-bar{flex-basis:100%;display:flex;align-items:center;gap:8px;padding:8px 10px;margin-top:6px;background:var(--accent-soft);border:1px solid var(--accent);border-radius:var(--radius);animation:slideDown .18s ease-out}@keyframes slideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.tool-btn .tool-label{display:inline}@media (max-width: 1100px){.tool-btn .tool-label{display:none}}.btn.pulse{animation:pulseShadow 1.8s ease-in-out infinite}@keyframes pulseShadow{0%,to{box-shadow:0 0 #7c5cff00}50%{box-shadow:0 0 0 4px #7c5cff26}}.sig-tabs{display:flex;gap:4px;padding:4px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:14px}.sig-tab{flex:1;padding:8px 10px;border-radius:8px;color:var(--fg-1);font-size:13px;transition:background var(--t-fast),color var(--t-fast)}.sig-tab:hover{background:var(--bg-3);color:var(--fg-0)}.sig-tab.active{background:var(--accent-soft);color:var(--fg-0);box-shadow:inset 0 0 0 1px var(--accent)}.sig-body{display:flex;flex-direction:column;gap:10px}.sig-canvas-wrap{border:1px dashed var(--line-strong);border-radius:var(--radius);background:repeating-linear-gradient(0deg,rgba(0,0,0,.04) 0 1px,transparent 1px 24px),#fff;overflow:hidden}.sig-canvas-wrap canvas{display:block;width:100%;height:auto;touch-action:none;cursor:crosshair}.sig-type-input{width:100%;padding:10px 12px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);color:var(--fg-0);outline:none}.sig-type-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.sig-preview{padding:24px;background:#fff;color:#0b0d12;border-radius:var(--radius);text-align:center;font-family:Dancing Script,Brush Script MT,Apple Chancery,cursive;font-style:italic;font-weight:700;font-size:56px;min-height:120px;display:grid;place-items:center}.sig-upload{display:block;border:1px dashed var(--line-strong);border-radius:var(--radius);background:var(--bg-2);padding:18px;cursor:pointer;transition:border-color var(--t-fast),background var(--t-fast)}.sig-upload:hover{border-color:var(--accent);background:var(--bg-3)}.sig-upload img{display:block;max-width:100%;max-height:200px;margin:0 auto;background:#fff;padding:8px;border-radius:6px}.sig-upload-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:24px;color:var(--fg-2)}.sig-secure{display:flex;align-items:center;gap:8px;margin-top:6px;padding:10px 12px;background:#4ade8014;border:1px solid rgba(74,222,128,.18);color:#b6f5d1;border-radius:var(--radius);font-size:12px}
