*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#1a1a1a;--surface:#242424;--surface2:#2e2e2e;--border:#3a3a3a;--accent:#e0a84b;--accent2:#f0c060;--text:#d0d0d0;--text-dim:#888;--ctrl:#e07b39;--shift:#7b9ee0;--alt:#7be09a;--danger:#e05a5a;--font:"Fira Code", "Courier New", monospace;--font-ui:"Inter", system-ui, sans-serif;--t-fast:.1s;--t-normal:.15s}html,body{background:var(--bg);color:var(--text);font-family:var(--font);min-height:100vh}.app{max-width:1400px;margin:0 auto;padding:24px 16px 48px}.app-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;margin-bottom:20px;padding-bottom:16px;display:flex}.app-title{letter-spacing:.05em;color:var(--accent);text-transform:uppercase;font-size:28px;font-weight:700}.app-title-group{flex-direction:column;gap:1px;display:flex}.app-tagline{letter-spacing:.12em;text-transform:uppercase;color:var(--text-dim);font-size:11px;font-weight:400;font-family:var(--font-ui)}.header-actions{align-items:center;gap:10px;display:flex}.btn-icon{background:var(--surface2);border:1px solid var(--border);color:var(--text-dim);cursor:pointer;width:32px;height:32px;transition:color var(--t-normal), border-color var(--t-normal);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:15px;display:flex}.btn-icon:hover{color:var(--accent);border-color:var(--accent)}.btn-export{background:var(--surface2);color:var(--accent);border:1px solid var(--accent);cursor:pointer;font-family:var(--font);transition:background var(--t-normal);border-radius:4px;padding:7px 16px;font-size:13px}.btn-export:hover{background:#3a3010}.btn-presets{min-width:11.5ch}.dropdown{position:relative}.dropdown-menu{background:var(--surface2);border:1px solid var(--border);z-index:50;border-radius:6px;min-width:100%;padding:4px 4px 8px;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 6px 24px #00000080}.dropdown-item{white-space:nowrap;width:100%;color:var(--text);font-family:var(--font);text-align:left;cursor:pointer;transition:background var(--t-fast), color var(--t-fast);background:0 0;border:none;border-radius:4px;padding:7px 12px;font-size:13px;display:block}.dropdown-item:hover{background:var(--surface);color:var(--accent)}.dropdown-item-active{color:var(--accent)}.dropdown-sep{background:var(--border);height:1px;margin:4px 0}.color-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.color-picker{border:1px solid var(--border);background:var(--surface2);cursor:pointer;border-radius:4px;width:36px;height:28px;padding:2px 3px}.color-swatch{cursor:pointer;width:24px;height:24px;transition:transform var(--t-fast);border:1px solid #ffffff26;border-radius:4px;flex-shrink:0}.color-swatch:hover{transform:scale(1.15)}.color-swatch.active{outline-offset:1px;outline:2px solid #fff}.btn-clear-color{border:1px solid var(--border);color:var(--text-dim);font-family:var(--font);cursor:pointer;white-space:nowrap;background:0 0;border-radius:3px;padding:3px 8px;font-size:11px}.btn-clear-color:hover{color:var(--danger);border-color:var(--danger)}.layout-name{color:var(--accent);letter-spacing:.05em;text-transform:uppercase;cursor:pointer;transition:border-color var(--t-normal);border-bottom:1px dashed #0000;margin-top:15px;margin-bottom:12px;font-size:28px;font-weight:700;display:inline-block}.layout-name:hover{border-bottom-color:var(--accent)}.layout-name-input{font-family:var(--font);letter-spacing:.05em;text-transform:uppercase;border:none;border-bottom:1px solid var(--accent);color:var(--accent);background:0 0;outline:none;width:100%;max-width:600px;margin-top:15px;margin-bottom:12px;font-size:28px;font-weight:700}.legend-row{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.legend{color:var(--text-dim);gap:20px;font-size:12px;display:flex}.format-tabs{align-items:center;gap:4px;display:flex}.format-tab{background:var(--surface2);border:1px solid var(--border);color:var(--text-dim);font-family:var(--font);cursor:pointer;transition:border-color var(--t-normal), color var(--t-normal);white-space:nowrap;-webkit-user-select:none;user-select:none;border-radius:4px;align-items:center;gap:6px;padding:4px 10px;font-size:11px;display:flex}.format-tab:hover{border-color:var(--text-dim);color:var(--text)}.format-tab.active{border-color:var(--accent);color:var(--accent)}.format-tab-input{color:inherit;font-family:var(--font);background:0 0;border:none;outline:none;width:72px;padding:0;font-size:11px}.format-tab-sep{color:var(--border);font-size:10px}.format-tab-remove{cursor:pointer;color:var(--text-dim);transition:color var(--t-normal);font-size:10px;line-height:1}.format-tab-remove:hover{color:var(--danger)}.format-add-btn{background:var(--surface2);border:1px solid var(--border);color:var(--text-dim);font-family:var(--font);cursor:pointer;width:24px;height:24px;transition:border-color var(--t-normal), color var(--t-normal);border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;display:flex}.format-add-btn:hover{border-color:var(--accent);color:var(--accent)}.legend-item{align-items:center;gap:6px;display:flex}.legend-dot{border-radius:2px;width:12px;height:12px;display:inline-block}.legend-dot.bound{border:1px solid var(--accent);background:#3d3420}.keyboard-container{border:1px solid var(--border);background:#111;border-radius:8px;margin-bottom:28px;padding:16px}.panel{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:20px}.panel-title{color:var(--accent);text-transform:uppercase;letter-spacing:.08em;align-items:center;gap:8px;margin-bottom:14px;font-size:15px;font-weight:700;display:flex}.count-badge{background:var(--surface2);border:1px solid var(--border);color:var(--text-dim);border-radius:10px;padding:1px 8px;font-size:12px}.table-wrapper{overflow-x:auto}.mouse-add-row{justify-content:flex-start;padding:10px 0 4px;display:flex}.mouse-remap-tag{color:#b0c8ff;opacity:.8;margin-left:5px;font-size:10px;display:inline-block}.tooltip-mouse-icon{margin-right:4px;font-size:12px}.tooltip-mouse-row{color:#b0c8ff}.binding-table{border-collapse:collapse;table-layout:fixed;width:100%;font-size:13px;font-family:var(--font-ui)}.binding-table th{text-align:left;border-bottom:1px solid var(--border);color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em;padding:6px 12px;font-size:11px}.binding-table td{vertical-align:middle;border-bottom:1px solid #2a2a2a;padding:7px 12px}.binding-table tr{cursor:pointer;transition:background var(--t-fast)}.binding-table tr:hover{background:var(--surface2)}.binding-table tr.row-selected{background:#3a3010}.binding-table tr.row-selected td{border-bottom-color:#4a4010}.binding-table tr.row-dragging{opacity:.4}.binding-table tr.row-drag-over td{border-top:2px solid var(--accent)}.binding-table tr.row-conflict td{border-bottom-color:#5a3a00}.conflict-icon{color:#e0a030;cursor:default;flex-shrink:0;margin-left:6px;font-size:12px}.cell-drag{width:20px;padding-left:0!important;padding-right:0!important}.drag-handle{color:var(--text-dim);cursor:grab;padding:2px 4px;font-size:14px;line-height:1;display:inline-block}.drag-handle:active{cursor:grabbing}.cell-key{color:var(--accent2);width:80px;font-weight:700}.cell-mod{width:110px}.cell-color,.cell-color-head{text-align:center;width:60px}.cell-action{color:var(--text)}.cell-del{text-align:center;width:40px}.mod-tags{flex-wrap:wrap;gap:3px;display:flex}.mod-tag{white-space:nowrap;border:1px solid;border-radius:3px;padding:1px 5px;font-size:10px;display:inline-block}.mod-none{color:var(--text-dim)}.binding-color-swatch{border:1px solid var(--border);background:var(--surface2);cursor:pointer;vertical-align:middle;width:18px;height:18px;transition:transform var(--t-fast), border-color var(--t-normal);border-radius:3px;padding:0;display:inline-block}.binding-color-swatch:hover{border-color:var(--accent);transform:scale(1.15)}.action-text{cursor:text;transition:border-color var(--t-normal);border-bottom:1px dashed #0000}.action-text:hover{border-bottom-color:var(--text-dim)}.action-edit-input{background:var(--surface2);border:1px solid var(--accent);color:var(--text);font-family:var(--font);border-radius:3px;width:100%;padding:2px 6px;font-size:13px}.btn-del{color:var(--text-dim);cursor:pointer;transition:color var(--t-normal), border-color var(--t-normal);background:0 0;border:1px solid #0000;border-radius:3px;padding:2px 6px;font-size:12px}.btn-del:hover{color:var(--danger);border-color:var(--danger)}.btn-lock{cursor:pointer;opacity:.6;transition:opacity var(--t-normal);background:0 0;border:none;padding:0;font-size:13px;line-height:1}.btn-lock:hover{opacity:1}.table-empty{color:var(--text-dim);text-align:center;padding:24px;font-size:13px}.modal-help{width:520px}.modal-share{width:480px}.modal-share-import{width:420px}.share-import-body{font-size:13px;font-family:var(--font-ui);color:var(--text-dim);flex-direction:column;gap:10px;margin-bottom:20px;line-height:1.6;display:flex}.share-import-body p{margin:0}.btn-download-current{background:var(--surface2);border:1px solid var(--border);color:var(--accent);font-family:var(--font);cursor:pointer;transition:border-color var(--t-normal), color var(--t-normal);border-radius:4px;align-self:flex-start;padding:6px 12px;font-size:12px}.btn-download-current:hover{border-color:var(--accent);color:var(--text)}.share-body{font-size:13px;font-family:var(--font-ui);color:var(--text);margin-bottom:20px;line-height:1.6}.share-body p{color:var(--text-dim);margin:0 0 14px}.share-url-row{gap:8px;display:flex}.share-url-input{background:var(--surface);border:1px solid var(--border);color:var(--text);font-family:var(--font);cursor:text;border-radius:4px;flex:1;padding:6px 8px;font-size:11px}.share-url-input:focus{border-color:var(--accent);outline:none}.help-modal-title{word-spacing:-.2em;padding-left:10px}.help-body{font-size:13px;font-family:var(--font-ui);color:var(--text);flex-direction:column;gap:10px;max-height:60vh;margin-bottom:20px;padding:0 10px;line-height:1.6;display:flex;overflow-y:auto}.help-body h4{text-transform:uppercase;letter-spacing:.08em;color:var(--accent);margin-top:6px;font-size:12px}.help-body strong{color:var(--accent2)}.help-credit{color:var(--text-dim);margin-top:6px;font-size:12px}.help-credit a{color:var(--accent);text-decoration:none}.help-credit a:hover{text-decoration:underline}.help-credit-note{color:var(--text-dim);font-size:11px;font-style:italic}.modal-settings{width:400px}.settings-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.settings-danger-section{margin-top:4px}.settings-danger-label{color:var(--text-dim);margin-bottom:10px;font-size:12px}.settings-section{margin-bottom:20px}.settings-section-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-dim);margin-bottom:10px;font-size:11px}.settings-row{align-items:center;gap:10px;margin-bottom:8px;display:flex}.settings-row-labeled{justify-content:space-between}.settings-label{color:var(--text-dim);flex-shrink:0;width:120px;font-size:12px}.settings-select{background:var(--surface);border:1px solid var(--border);color:var(--text);font-family:var(--font);cursor:pointer;min-width:128px;transition:border-color var(--t-normal);border-radius:4px;padding:5px 8px;font-size:12px}.settings-row-labeled .settings-select{box-sizing:border-box;flex:1;width:0;min-width:0}.settings-select:focus{border-color:var(--accent);outline:none}.modal-orphan{width:460px}.orphan-body{font-size:13px;font-family:var(--font-ui);color:var(--text-dim);margin-bottom:20px;line-height:1.6}.orphan-body p{margin:0 0 12px}.orphan-list{border:1px solid var(--border);background:var(--surface);border-radius:4px;flex-direction:column;gap:4px;max-height:200px;padding:8px;display:flex;overflow-y:auto}.orphan-item{align-items:center;gap:8px;font-size:12px;display:flex}.orphan-combo{color:var(--accent);font-family:var(--font);min-width:80px}.orphan-arrow{color:var(--text-dim)}.orphan-action{color:var(--text);flex:1}.orphan-format{color:var(--text-dim);background:var(--surface2);border:1px solid var(--border);border-radius:3px;padding:1px 5px;font-size:10px}.btn-danger{background:var(--danger)!important;border-color:var(--danger)!important;color:#fff!important}.btn-danger:hover{filter:brightness(1.1)}.toggle-group{border:1px solid var(--border);border-radius:6px;display:flex;overflow:hidden}.toggle-btn{color:var(--text-dim);font-family:var(--font);cursor:pointer;transition:background var(--t-normal), color var(--t-normal);background:0 0;border:none;padding:6px 14px;font-size:12px}.toggle-btn:not(:last-child){border-right:1px solid var(--border)}.toggle-btn.active{background:var(--surface2);color:var(--accent)}.toggle-btn:hover:not(.active){color:var(--text)}.modal-backdrop{z-index:100;background:#000000b3;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--border);border-radius:8px;width:380px;max-width:95vw;padding:24px 28px;box-shadow:0 8px 40px #000000b3}.modal-title{color:var(--accent);margin-bottom:20px;font-size:16px;font-weight:700}.modal-key{background:var(--surface2);border:1px solid var(--border);color:var(--accent2);border-radius:4px;padding:1px 8px;font-size:15px}.modal-form{flex-direction:column;gap:14px;display:flex}.modal-row{flex-direction:column;gap:6px;display:flex}.modal-row label{text-transform:uppercase;letter-spacing:.08em;color:var(--text-dim);font-size:11px}.mod-buttons{flex-wrap:wrap;gap:6px;display:flex}.mod-btn{background:var(--surface2);border:1px solid var(--border);color:var(--text-dim);font-family:var(--font);cursor:pointer;transition:all var(--t-normal);border-radius:4px;padding:5px 12px;font-size:12px}.mod-btn:hover{border-color:var(--text-dim);color:var(--text)}.mod-btn.active{border-color:var(--accent);color:var(--accent);background:#3a3010}.modal-input{background:var(--surface2);border:1px solid var(--border);color:var(--text);font-family:var(--font);transition:border-color var(--t-normal);border-radius:4px;width:100%;padding:8px 10px;font-size:14px}.modal-input:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 2px #e0a84b40}.conflict-warn{color:#e0a040;background:#3a2a10;border:1px solid #6a4a10;border-radius:4px;padding:6px 10px;font-size:12px}.modal-combo{color:var(--text-dim);text-align:center;font-size:12px}.combo-label{background:var(--surface2);border:1px solid var(--border);color:var(--accent2);border-radius:4px;margin-left:4px;padding:1px 8px}.modal-actions{justify-content:flex-end;gap:10px;margin-top:4px;display:flex}.btn-primary{background:var(--accent);color:#111;font-family:var(--font);cursor:pointer;transition:background var(--t-normal);border:none;border-radius:4px;padding:8px 20px;font-size:13px;font-weight:700}.btn-primary:hover:not(:disabled){background:var(--accent2)}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{background:var(--surface2);color:var(--text-dim);border:1px solid var(--border);font-family:var(--font);cursor:pointer;transition:color var(--t-normal);border-radius:4px;padding:8px 16px;font-size:13px}.btn-secondary:hover{color:var(--text)}.color-pick-row{align-items:center;gap:8px;display:flex}.recently-picked-label{text-transform:uppercase;letter-spacing:.08em;color:var(--text-dim);margin-top:2px;font-size:10px;display:block}.recent-colors-row{flex-wrap:wrap;gap:8px;margin-top:2px;display:flex}.mobile-warning-modal{max-width:340px;padding:28px 24px 20px;position:relative}.mobile-warning-close{color:var(--text-dim);cursor:pointer;background:0 0;border:none;padding:4px;font-size:14px;line-height:1;position:absolute;top:10px;right:12px}.mobile-warning-close:hover{color:var(--text)}.mobile-warning-text{font-size:16px;font-family:var(--font-ui);color:var(--text);font-style:italic;line-height:1.7}.mobile-notice{color:#e0a040;background:#2a2010;border:1px solid #6a4a10;border-radius:4px;padding:10px 12px;font-size:12px;font-style:italic}.header-mobile{display:none}.desktop-nav{align-items:center;gap:10px;display:flex}.mobile-only{display:none}@media (width<=768px){.layout-name,.layout-name-input{font-size:20px}.desktop-nav{display:none}.header-mobile{display:block;position:relative}.mobile-only{display:block}.app-tagline{display:none}.btn-hamburger{background:var(--surface2);border:1px solid var(--border);color:var(--text-dim);cursor:pointer;width:36px;height:36px;transition:color var(--t-normal), border-color var(--t-normal);border-radius:6px;justify-content:center;align-items:center;font-size:18px;display:flex}.btn-hamburger:hover{color:var(--accent);border-color:var(--accent)}.hamburger-menu{background:var(--surface2);border:1px solid var(--border);z-index:50;border-radius:6px;min-width:180px;padding:4px;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 6px 24px #00000080}.hamburger-item{width:100%;color:var(--text);font-family:var(--font);text-align:left;cursor:pointer;transition:background var(--t-fast), color var(--t-fast);background:0 0;border:none;border-radius:4px;padding:9px 14px;font-size:13px;display:block}.hamburger-item:hover{background:var(--surface);color:var(--accent)}.hamburger-sep{background:var(--border);height:1px;margin:4px 0}.format-tabs{padding-bottom:2px;overflow-x:auto}.legend{display:none}.table-wrapper{width:calc(100% + 40px);margin-left:-20px;margin-right:-20px}.binding-table,.binding-table thead,.binding-table tbody{width:100%;display:block}.binding-table tr{align-items:center;width:100%;display:flex}.binding-table th,.binding-table td{box-sizing:border-box;flex-shrink:0;align-items:center;padding:6px 8px;display:flex;overflow:hidden}.cell-drag,.cell-del,.cell-del-head{display:none!important}.cell-drag{padding-left:8px!important}.cell-mod{width:90px;padding-left:20px!important}.cell-key{white-space:nowrap;text-overflow:ellipsis;width:80px}.mouse-binding-table .cell-key,.hotas-binding-table .cell-key{width:140px}.cell-action{overflow-wrap:break-word;word-break:break-word;flex:1;min-width:0}.mouse-add-row{padding-left:20px}.legend-row{justify-content:flex-start}.format-add-btn{order:-1}.modal{max-height:90vh;overflow-y:auto}}.app-footer{border-top:1px solid var(--border);margin-top:48px;padding-top:20px;padding-bottom:8px}.footer-content{color:var(--text-dim);font-size:12px;font-family:var(--font-ui);flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;display:flex}.footer-link{color:var(--text-dim);transition:color var(--t-normal);text-decoration:none}.footer-link:hover{color:var(--accent)}.footer-sep{color:var(--border)}.kofi-btn{background:var(--surface2);border:1px solid var(--accent);color:var(--accent);font-family:var(--font-ui);transition:background var(--t-normal), color var(--t-normal);white-space:nowrap;border-radius:6px;padding:4px 10px;font-size:12px;text-decoration:none}.kofi-btn:hover{background:var(--accent);color:#1a1a1a}.key-tooltip{z-index:200;background:var(--surface);border:1px solid var(--border);pointer-events:none;border-radius:6px;min-width:100px;max-width:220px;padding:6px 10px;position:fixed;box-shadow:0 4px 20px #0009}.tooltip-row{flex-wrap:wrap;align-items:center;gap:4px;padding:2px 0;font-size:12px;display:flex}.tooltip-row-sep{border-top:1px solid var(--border);margin-top:4px;padding-top:6px}.tooltip-mod-tag{white-space:nowrap;border:1px solid;border-radius:3px;padding:0 4px;font-size:10px}.tooltip-arrow{color:var(--text-dim);font-size:11px}.tooltip-action{color:var(--text)}.cpk-panel{background:var(--surface);border:1px solid var(--border);border-radius:8px;flex-direction:column;width:252px;padding:16px;display:flex;box-shadow:0 8px 40px #000000b3}.cpk-panel-body{flex-direction:column;flex:1;gap:8px;padding-right:2px;display:flex}.color-current-swatch{border:1px solid #ffffff26;border-radius:4px;flex-shrink:0;width:24px;height:24px}@media (width<=680px){.modal-backdrop{flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:16px 8px;overflow-y:auto}.modal{order:1;width:calc(100vw - 16px);max-width:none;max-height:none;overflow-y:visible}.cpk-panel{order:2;width:calc(100vw - 16px);max-height:none;height:auto!important;position:relative!important;top:auto!important;bottom:auto!important;left:auto!important}}.cpk{-webkit-user-select:none;user-select:none;flex-direction:column;gap:8px;display:flex}.cpk-sv{cursor:crosshair;border-radius:4px;flex-shrink:0;width:100%;height:120px;position:relative;overflow:hidden}.cpk-sv-white{background:linear-gradient(90deg,#fff,#0000);position:absolute;inset:0}.cpk-sv-black{background:linear-gradient(#0000,#000);position:absolute;inset:0}.cpk-cursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:12px;height:12px;position:absolute;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.cpk-color-row{align-items:center;gap:8px;display:flex}.cpk-color-row .cpk-track-wrap{flex:1}.cpk-preview-wrap{border:1px solid var(--border);border-radius:4px;flex-shrink:0;width:24px;height:24px;position:relative;overflow:hidden}.cpk-checker{background:repeating-conic-gradient(#3a3a3a 0% 25%,#222 0% 50%) 0 0/8px 8px;position:absolute;inset:0}.cpk-preview{position:absolute;inset:0}.cpk-alpha-row{align-items:center;gap:8px;display:flex}.cpk-alpha-row .cpk-track-wrap{flex:1}.cpk-alpha-row .cpk-alpha-input{text-align:center;flex:0 0 40px;width:40px}.cpk-track-wrap{cursor:pointer;border-radius:7px;height:14px;position:relative}.cpk-range{appearance:none;cursor:pointer;background:0 0;width:100%;height:100%;margin:0;position:absolute;inset:0}.cpk-range:focus{outline:none}.cpk-range::-webkit-slider-thumb{-webkit-appearance:none;cursor:pointer;background:#fff;border:2px solid #0000004d;border-radius:50%;width:14px;height:14px;box-shadow:0 1px 4px #0006}.cpk-range::-moz-range-thumb{cursor:pointer;background:#fff;border:2px solid #0000004d;border-radius:50%;width:14px;height:14px;box-shadow:0 1px 4px #0006}.cpk-inputs{align-items:flex-end;gap:4px;display:flex}.cpk-field{flex-direction:column;flex:2;gap:3px;display:flex}.cpk-field-num{flex:1}.cpk-label{text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);text-align:center;font-size:9px}.cpk-input{background:var(--surface);border:1px solid var(--border);color:var(--text);font-family:var(--font);text-align:center;width:100%;transition:border-color var(--t-normal);border-radius:3px;padding:4px 5px;font-size:11px}.cpk-input:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 2px #e0a84b40}.cpk-input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none}.cpk-input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.cpk-input[type=number]{-moz-appearance:textfield}
