:root{--bg-app:#1e1e1e;--bg-header:#1c1b22;--bg-pane:#2d2d2d;--bg-surface:#2b2b2b;--bg-surface-elevated:#2b2b36;--bg-hover:#2b2a33;--bg-selected:#42414d;--border-subtle:#3c3b46;--border-btn:#555;--accent-purple:#6164f6;--accent-purple-hover:#7275fb;--accent-danger:#d22b2b;--accent-danger-hover:#e81123;--accent-hover-token:#f44;--highlight-token-bg:#ff444426;--text-primary:#fff;--text-secondary:#cfcfd8;--text-muted:#9a9aa6;--selection-bg:#214283;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;color:var(--text-primary);background:var(--bg-app);-webkit-font-smoothing:antialiased;font-family:Segoe UI,Tahoma,system-ui,-apple-system,sans-serif}*{box-sizing:border-box}body{background:var(--bg-app);-webkit-user-select:none;user-select:none;width:100vw;height:100vh;margin:0;padding:0;overflow:hidden}.hanvi-app{background:var(--bg-app);flex-direction:column;width:100vw;height:100vh;display:flex}.app-header{background-color:var(--bg-header);border-bottom:1px solid var(--border-subtle);z-index:50;flex-shrink:0;align-items:center;height:40px;padding:0 8px;display:flex;position:relative}.hamburger-container{margin-right:4px;position:relative}.hamburger-btn{cursor:pointer;width:32px;height:32px;color:var(--text-secondary);background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;transition:background .15s;display:flex}.hamburger-btn:hover{background-color:var(--bg-hover);color:var(--text-primary)}.header-status{color:var(--text-muted);align-items:center;gap:8px;margin-left:auto;padding:0 8px;font-size:12px;display:flex}.busy-dot{background:var(--accent-purple);border-radius:50%;width:8px;height:8px;animation:1s infinite alternate pulse}@keyframes pulse{0%{opacity:.4;transform:scale(.9)}to{opacity:1;transform:scale(1.1)}}.dropdown-menu{z-index:100;transform-origin:0 0;background-color:#202028;border:1px solid #ffffff1a;border-radius:10px;flex-direction:column;gap:2px;width:240px;padding:6px;animation:.18s cubic-bezier(.16,1,.3,1) dropdownEnter;display:flex;position:absolute;top:42px;left:0;box-shadow:0 12px 32px #00000080,0 0 0 1px #ffffff0d}@keyframes dropdownEnter{0%{opacity:0;transform:scale(.95)translateY(-6px)}to{opacity:1;transform:scale(1)translateY(0)}}.menu-item{width:100%;color:var(--text-primary);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:4px;justify-content:space-between;align-items:center;padding:6px 10px;font-size:13px;display:flex}.menu-item:hover{background-color:var(--bg-selected)}.menu-item .shortcut{color:var(--text-muted);font-size:11px}.menu-separator{background-color:var(--border-subtle);height:1px;margin:4px 6px}.workspace-splitter{background:var(--bg-app);flex:1;min-height:0;display:flex}.column-left{border-right:1px solid var(--bg-app);flex-direction:column;flex:none;min-width:200px;height:100%;display:flex}.workspace-splitter-v{touch-action:none;background:var(--bg-app);cursor:col-resize;flex:none;width:6px;transition:background .15s}.workspace-splitter-v:hover{background:#383838}.column-right{flex-direction:column;flex:1 1 0;min-width:200px;height:100%;display:flex}.pane-splitter-h{touch-action:none;background:var(--bg-app);cursor:row-resize;flex:none;height:6px;transition:background .15s}.pane-splitter-h:hover{background:#383838}.pane-container{background:var(--bg-pane);flex-direction:column;display:flex;overflow:hidden}.pane-cn{flex:none;min-height:100px}.pane-sv{flex:1 1 0;min-height:100px}.pane-vn{flex:1;height:100%}.pane-header{background:#00000026;border-bottom:1px solid #ffffff0d;justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.pane-title{text-transform:uppercase;letter-spacing:.6px;color:var(--text-muted);font-size:12px;font-weight:600}.pane-header-actions{align-items:center;gap:8px;display:flex}.pane-content{background:var(--bg-pane);-webkit-user-select:text;user-select:text;flex:1;padding:14px 18px;position:relative;overflow-y:auto}.relative-container{position:relative}.pane-content::-webkit-scrollbar{background:var(--bg-surface);width:10px}.nameset-list-container::-webkit-scrollbar{background:var(--bg-surface);width:10px}.pane-content::-webkit-scrollbar-thumb{background:#555;border-radius:5px}.nameset-list-container::-webkit-scrollbar-thumb{background:#555;border-radius:5px}.pane-content::-webkit-scrollbar-thumb:hover{background:#777}.nameset-list-container::-webkit-scrollbar-thumb:hover{background:#777}.token-canvas{line-height:1.65}.role-cn{font-family:Noto Sans SC,Microsoft YaHei,sans-serif;font-size:18px;line-height:1.6}.role-sv{color:#e0e0e0;font-family:Tahoma,sans-serif;font-size:15px;line-height:1.5}.role-vn{font-family:Tahoma,Segoe UI,sans-serif;font-size:16px;line-height:1.65}.token-paragraph{margin:0 0 16px}.token{cursor:pointer;border-radius:3px;padding:1px 0;transition:color .1s,background-color .1s;display:inline}.token.search-match{color:#fff;background-color:#a06e14b3}.token.search-match-active{color:#000;background-color:#ff9600}.token-empty-state{height:100%;color:var(--text-muted);justify-content:center;align-items:center;font-size:14px;display:flex}.findbar{z-index:40;transform-origin:100% 0;background-color:#202028;border:1px solid #ffffff1f;border-radius:10px;align-items:center;gap:6px;padding:6px 10px;animation:.18s cubic-bezier(.16,1,.3,1) findbarEnter;display:flex;position:absolute;top:10px;right:16px;box-shadow:0 8px 24px #00000080,0 0 0 1px #ffffff0d}@keyframes findbarEnter{0%{opacity:0;transform:scale(.95)translateY(-8px)}to{opacity:1;transform:scale(1)translateY(0)}}.findbar input{color:#fff;background-color:#1c1b22;border:1px solid #3c3b46;border-radius:4px;outline:none;width:160px;height:24px;padding:2px 6px;font-size:13px}.findbar input:focus{border-color:#61ccff}.matches-label{color:var(--text-muted);text-align:center;min-width:50px;font-size:12px}.findbar-btn{background-color:var(--bg-surface);border:1px solid var(--border-subtle);color:var(--text-secondary);cursor:pointer;border-radius:4px;justify-content:center;align-items:center;width:24px;height:24px;padding:0;transition:background .15s;display:flex}.findbar-btn:hover:not(:disabled){background-color:var(--bg-selected);color:#fff}.findbar-btn:disabled{opacity:.4;cursor:default}.findbar-btn.close-find-btn:hover{background-color:var(--accent-danger-hover);color:#fff}.page-control-bar{background:var(--bg-pane);border-top:1px solid #ffffff0d;justify-content:center;align-items:center;padding:6px 16px;display:flex}.page-control-inner{align-items:center;gap:12px;display:flex}.page-counter{align-items:center;gap:4px;font-family:Tahoma,sans-serif;font-size:14px;font-weight:700;display:flex}.page-input{border:1px solid var(--border-subtle);color:#fff;text-align:right;background:0 0;border-radius:4px;width:48px;height:28px;padding:0 4px;font-family:Tahoma,sans-serif;font-size:14px;font-weight:700}.page-input:focus{border-color:#61ccff;outline:none}.page-slash{color:var(--text-muted)}.page-total{min-width:30px}.page-nav-btn{min-width:80px;height:28px;padding:0 14px;font-size:13px;font-weight:700}.bottom-bar{background-color:var(--bg-header);border-top:1px solid var(--border-subtle);flex-shrink:0;justify-content:space-between;align-items:center;height:34px;padding:0 12px;font-size:12px;display:flex}.bottom-left{flex:1;align-items:center;gap:12px;display:flex}.progress-bar-container{background:#333;border-radius:3px;width:140px;height:6px;overflow:hidden}.progress-bar-fill{background:var(--accent-purple);border-radius:3px;height:100%;transition:width .25s ease-out}.bottom-status-text{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.bottom-right{align-items:center;gap:12px;display:flex}.current-nameset-btn{background-color:var(--bg-surface);border:1px solid var(--accent-purple);color:#fff;cursor:pointer;border-radius:4px;padding:3px 10px;font-size:12px;font-weight:700;transition:background .15s}.current-nameset-btn:hover{background-color:var(--accent-purple)}.char-per-page-container{color:var(--text-muted);align-items:center;gap:6px;font-size:12px;display:flex}.char-per-page-input{background:var(--bg-surface);border:1px solid var(--border-btn);color:#fff;text-align:right;border-radius:4px;width:65px;height:24px;padding:0 4px;font-size:12px}.char-per-page-input:focus{border-color:#61ccff;outline:none}.btn{color:#f4f4f7;cursor:pointer;-webkit-user-select:none;user-select:none;background-color:#ffffff0f;border:1px solid #ffffff1a;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:6px 14px;font-size:13px;font-weight:600;transition:all .15s cubic-bezier(.16,1,.3,1);display:inline-flex}.btn:hover:not(:disabled){background-color:#ffffff1f;border-color:#ffffff2e;transform:translateY(-1px);box-shadow:0 3px 10px #00000040}.btn:active:not(:disabled){box-shadow:none;background-color:#ffffff14;transform:translateY(0)}.btn:disabled{opacity:.35;cursor:not-allowed;box-shadow:none!important;transform:none!important}.btn-primary{color:#fff;background:linear-gradient(135deg,#6366f1 0%,#4f46e5 100%);border:1px solid #ffffff26;box-shadow:0 2px 8px #4f46e54d}.btn-primary:hover:not(:disabled){background:linear-gradient(135deg,#7173fc 0%,#584ff5 100%);border-color:#ffffff40;transform:translateY(-1px);box-shadow:0 4px 16px #4f46e573}.btn-sm{color:var(--text-secondary);cursor:pointer;background:#ffffff0d;border:1px solid #ffffff1a;border-radius:6px;padding:3px 9px;font-size:11.5px;font-weight:500;transition:all .15s}.btn-sm:hover{color:#fff;background:#ffffff1f}.btn-icon-label{color:var(--text-secondary);cursor:pointer;background:#ffffff0d;border:1px solid #ffffff1a;border-radius:6px;align-items:center;gap:5px;padding:3px 9px;font-size:11.5px;transition:all .15s;display:flex}.btn-icon-label:hover{color:#fff;background:#ffffff1f}.modal-backdrop{z-index:200;-webkit-backdrop-filter:blur(10px);background:#06060ab3;justify-content:center;align-items:center;width:100vw;height:100vh;animation:.22s cubic-bezier(.16,1,.3,1) forwards backdropFadeIn;display:flex;position:fixed;inset:0}.modal-backdrop.modal-backdrop-exit{animation:.16s cubic-bezier(.4,0,1,1) forwards backdropFadeOut}.modal,.nameset-dialog{transform-origin:50%;background:#1b1b24;border:1px solid #ffffff1f;border-radius:16px;flex-direction:column;animation:.24s cubic-bezier(.16,1,.3,1) forwards modalScaleIn;display:flex;overflow:hidden;box-shadow:0 24px 60px -15px #000c,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a}.modal.modal-exit,.nameset-dialog.modal-exit{animation:.16s cubic-bezier(.4,0,1,1) forwards modalScaleOut}@keyframes backdropFadeIn{0%{opacity:0;-webkit-backdrop-filter:blur()}to{opacity:1;-webkit-backdrop-filter:blur(10px)}}@keyframes backdropFadeOut{0%{opacity:1;-webkit-backdrop-filter:blur(10px)}to{opacity:0;-webkit-backdrop-filter:blur()}}@keyframes modalScaleIn{0%{opacity:0;transform:scale(.92)translateY(12px)}to{opacity:1;transform:scale(1)translateY(0)}}@keyframes modalScaleOut{0%{opacity:1;transform:scale(1)translateY(0)}to{opacity:0;transform:scale(.94)translateY(8px)}}.dict-popup{width:520px;max-width:94vw;max-height:92vh}.nameset-dialog{width:520px;max-width:94vw;height:540px;max-height:90vh}.popup-header{background:#ffffff05;border-bottom:1px solid #ffffff14;justify-content:space-between;align-items:center;padding:12px 18px;display:flex}.popup-title{letter-spacing:.3px;color:#f4f4f7;font-size:13.5px;font-weight:700}.icon-btn.close-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;width:28px;height:28px;transition:all .15s;display:flex}.icon-btn.close-btn:hover{color:#f87171;background-color:#ef44442e}.popup-body{flex-direction:column;gap:14px;padding:16px 18px;display:flex}.popup-footer{background:#0000002e;border-top:1px solid #ffffff12;justify-content:flex-end;gap:10px;padding:12px 18px;display:flex}.btn.close-popup-btn{color:#f4f4f7;background:#ffffff14;border:1px solid #ffffff1f;border-radius:8px;padding:7px 20px;font-weight:600;transition:all .15s cubic-bezier(.16,1,.3,1)}.btn.close-popup-btn:hover{background:#ffffff26;border-color:#ffffff38;transform:translateY(-1px);box-shadow:0 4px 12px #00000040}.nameset-search-bar{border-bottom:1px solid var(--border-subtle);background:#1c1b22;align-items:center;gap:8px;padding:10px 14px;display:flex}.nameset-search-bar .search-icon{color:var(--text-muted)}.nameset-search-bar input{color:#fff;background:0 0;border:none;outline:none;flex:1;font-size:14px}.clear-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;width:20px;height:20px;display:flex}.clear-btn:hover{color:#fff}.nameset-list-container{flex:1;padding:0;overflow-y:auto}.nameset-table{border-collapse:collapse;width:100%;font-size:13px}.nameset-table th{background-color:var(--bg-surface-elevated);color:var(--text-secondary);border-bottom:1px solid var(--border-subtle);text-align:left;letter-spacing:.4px;padding:8px 14px;font-size:12px;font-weight:700}.nameset-table td{border-bottom:1px solid #ffffff0a;padding:8px 14px}.nameset-table tr:hover{background-color:#ffffff08}.nameset-table tr.active-row{background-color:#6164f61f}.nameset-title-cell{font-weight:600}.nameset-title-cell .active-tag{margin-left:8px}.active-tag{background-color:var(--accent-purple);color:#fff;text-transform:uppercase;border-radius:3px;padding:1px 6px;font-size:10px;font-weight:700}.btn-choose-set{background-color:var(--bg-surface);border:1px solid var(--accent-purple);color:#fff;padding:4px 10px;font-size:12px;font-weight:700}.btn-choose-set:hover{background-color:var(--accent-purple)}.btn-active-set{background-color:var(--accent-purple);border:1px solid var(--accent-purple);color:#fff;padding:4px 10px;font-size:12px;font-weight:700}.btn-danger-outline{color:#f87171;background:#ef444414;border:1px solid #ef444440;font-weight:600}.btn-danger-outline:hover:not(:disabled){color:#fca5a5;background-color:#ef444433;border-color:#ef444473;transform:translateY(-1px);box-shadow:0 2px 8px #ef444433}.nameset-footer{border-top:1px solid var(--border-subtle);background:#1c1b22;justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.empty-message{text-align:center;color:var(--text-muted);padding:40px;font-size:13px}.btn-danger{color:#fff;background:linear-gradient(135deg,#ef4444 0%,#dc2626 100%);border:1px solid #ffffff26;font-weight:600}.btn-danger:hover:not(:disabled){background:linear-gradient(135deg,#f87171 0%,#ef4444 100%);transform:translateY(-1px);box-shadow:0 4px 12px #ef44444d}.inline-edit,.dict-input,.entries-add input,.namesets-create input{color:var(--text-primary);font:inherit;background:#00000040;border:1px solid #ffffff1a;border-radius:8px;outline:none;padding:8px 12px;transition:all .15s}.inline-edit:focus,.dict-input:focus,.entries-add input:focus,.namesets-create input:focus{background:#00000059;border-color:#6366f1;box-shadow:0 0 0 3px #6366f133}.cn-text{font-family:Noto Sans SC,Microsoft YaHei,sans-serif}.dict-editor{gap:12px;overflow-y:auto}.dict-hero-card{background:linear-gradient(#6366f117 0%,#6366f105 100%);border:1px solid #6366f12e;border-radius:12px;flex-direction:column;align-items:center;gap:8px;padding:16px 12px;display:flex}.dict-original{letter-spacing:2px;color:#fff;text-shadow:0 2px 8px #0006;text-align:center;-webkit-user-select:text;user-select:text;font-family:Noto Sans SC,Microsoft YaHei,sans-serif;font-size:30px;font-weight:700}.dict-sv-pill{background:#6366f126;border:1px solid #6366f14d;border-radius:20px;align-items:center;gap:8px;padding:3px 14px;display:inline-flex}.dict-sv-label{text-transform:uppercase;letter-spacing:.6px;color:#818cf8;font-size:10.5px;font-weight:700}.dict-sv-text{color:#e0e7ff;-webkit-user-select:text;user-select:text;font-family:Segoe UI,Tahoma,system-ui,sans-serif;font-size:14.5px;font-weight:600}.dict-card{background:#ffffff08;border:1px solid #ffffff12;border-radius:12px;flex-direction:column;gap:10px;padding:12px 14px;transition:border-color .15s;display:flex}.dict-card:focus-within{border-color:#6366f159}.dict-card-header{justify-content:space-between;align-items:center;display:flex}.dict-card-title{text-transform:uppercase;letter-spacing:.8px;color:#a1a1aa;font-size:11px;font-weight:700}.dict-input{width:100%;font-family:inherit;font-size:14px}.nameset-toggle{color:#a1a1aa;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:12.5px;transition:color .15s;display:flex}.nameset-toggle:hover:not(.disabled){color:#fff}.nameset-toggle.disabled{color:var(--text-muted);cursor:default}.nameset-toggle input[type=checkbox]{accent-color:#6366f1;cursor:pointer;width:15px;height:15px}.capitalize-row{justify-content:space-between;align-items:center;gap:8px;display:flex}.capitalize-label{color:#71717a;font-size:12px;font-weight:600}.capitalize-segmented{background:#0000004d;border:1px solid #ffffff14;border-radius:8px;gap:2px;padding:2px;display:inline-flex}.cap-segment-btn{color:#a1a1aa;cursor:pointer;background:0 0;border:none;border-radius:6px;padding:3px 11px;font-size:11px;font-weight:600;transition:all .15s}.cap-segment-btn:hover:not(:disabled){color:#fff;background:#ffffff1a}.cap-segment-btn:active:not(:disabled){color:#fff;background:#6366f1;box-shadow:0 1px 4px #0000004d}.cap-segment-btn:disabled{opacity:.35;cursor:default}.dict-actions{align-items:center;gap:8px;margin-top:2px;display:flex}.dict-actions .btn{flex:1;padding:7px 10px;font-size:12.5px}.chip-list{background:#00000040;border:1px solid #ffffff12;border-radius:8px;flex-wrap:wrap;align-items:center;gap:6px;min-height:40px;padding:8px 10px;display:flex}.chip{color:#e0e7ff;cursor:grab;background:#6366f12e;border:1px solid #6366f152;border-radius:16px;align-items:center;gap:6px;padding:4px 8px 4px 12px;font-size:13px;font-weight:500;transition:all .15s cubic-bezier(.16,1,.3,1);display:inline-flex;box-shadow:0 1px 3px #0003}.chip:hover{border-color:#6366f18c;transform:translateY(-1px);box-shadow:0 3px 8px #6366f140}.chip-default{color:#fff;background:linear-gradient(135deg,#6366f1 0%,#4f46e5 100%);border-color:#fff3;font-weight:600}.chip.dragging{opacity:.35;transform:scale(.95)}.chip-remove{width:18px;height:18px;color:inherit;opacity:.75;cursor:pointer;background:#0003;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:all .15s;display:flex}.chip-remove:hover{opacity:1;background:#00000073;transform:scale(1.1)}.chip-empty{color:var(--text-muted);align-self:center;margin:0 auto;font-size:12px}.rule-popup{width:420px;max-width:92vw}.rule-table{border-collapse:collapse;width:100%}.rule-table th,.rule-table td{text-align:left;border-bottom:1px solid var(--border-subtle);padding:8px 10px}.rule-table th{color:var(--text-muted);font-size:12px}.rule-table td{-webkit-user-select:text;user-select:text;font-size:16px}.entries-editor{width:760px;max-width:94vw;height:640px;max-height:92vh}.entries-list{outline:none;flex:1;min-height:0;overflow-y:auto}.entries-table{border-collapse:collapse;width:100%;font-size:14px}.entries-table th{background-color:var(--bg-surface-elevated);color:var(--text-secondary);border-bottom:1px solid var(--border-subtle);text-align:left;padding:8px 14px;font-size:12px;position:sticky;top:0}.entries-table td{border-bottom:1px solid #ffffff0a;padding:6px 14px;font-family:Tahoma,sans-serif}.entries-table td.cn-text{white-space:nowrap;width:1%;font-family:Noto Sans SC,Microsoft YaHei,sans-serif}.entries-table tr:hover{background-color:#ffffff08}.entries-table tr.selected{background-color:var(--selection-bg)}.entries-table .inline-edit{width:100%;padding:2px 6px}.entries-sentinel{height:1px}.entries-add{border-top:1px solid var(--border-subtle);gap:8px;padding:10px 14px;display:flex}.entries-add input{flex:1;min-width:0}.entries-add input.cn-text{flex:.6}.entries-count{color:var(--text-muted);align-self:center;margin-right:auto;font-size:12px}.namesets-manager{width:760px;max-width:94vw;height:560px;max-height:92vh}.namesets-create{border-bottom:1px solid var(--border-subtle);gap:8px;padding:10px 14px;display:flex}.namesets-create input{flex:1;min-width:0}.namesets-message{color:var(--text-secondary);background:#6164f61f;padding:8px 14px;font-size:12px}.namesets-message.error{color:#ffb4b4;background:#d22b2b2e}.nameset-actions{text-align:right;white-space:nowrap}.nameset-actions .btn{margin-left:6px;padding:3px 10px;font-size:12px}.confirm-text{color:#ffb4b4;font-size:12px}body.resizing-columns,body.resizing-columns *{cursor:col-resize!important;-webkit-user-select:none!important;user-select:none!important}body.resizing-rows,body.resizing-rows *{cursor:row-resize!important;-webkit-user-select:none!important;user-select:none!important}
