:root{font-family:Segoe UI,sans-serif;color:var(--ink);background:#f5f6f3;font-synthesis:none;font-variant-numeric:tabular-nums;line-height:1.5;--ink: #26372d;--muted: #626961;--line: #dce0d9;--green: #b3efce;--dark: #101916}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,.button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:10px 16px;color:var(--ink);font-size:14px;font-weight:500;cursor:pointer;text-decoration:none;transition:background-color .16s cubic-bezier(.22,1,.36,1),border-color .16s cubic-bezier(.22,1,.36,1)}button:hover,.button:hover{background:#eef0eb}button:active{transform:translateY(1px)}button:disabled{opacity:.43;cursor:not-allowed;transform:none}button.primary{background:var(--ink);color:#fff;border-color:var(--ink)}button.primary:hover{background:#345940}button.small{padding:8px 12px;margin-left:16px;font-size:12px}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,pre:focus-visible,.keyboard-scroll:focus-visible{outline:3px solid #3e9670;outline-offset:3px}.app{display:flex;min-height:100vh}.sidebar{width:240px;flex-shrink:0;background:var(--dark);color:#edf1ec;padding:32px 16px;display:flex;flex-direction:column;position:fixed;height:100vh;overflow-y:auto}.wordmark{display:flex;align-items:center;gap:12px;color:inherit;text-decoration:none;font-weight:600;font-size:20px;letter-spacing:0;margin:0 8px 40px}.nav{min-height:36px;font-size:14px;width:100%;display:flex;align-items:center;gap:12px;text-align:left;background:transparent;border:none;color:#c0c9c1;margin:4px 0;padding:8px 12px;font-weight:400}.nav:hover{background:#202d25}.nav.active{background:#293a30;color:#d4f5df}.nav-number{font-size:12px;color:#a6afa7}.nav-dot{width:5px;height:5px;background:var(--green);border-radius:50%;margin-left:auto}.sidebar-bottom{display:grid;gap:12px;margin-top:20px;border-top:1px solid #ffffff18;padding:20px 8px 0;font-size:12px}.sidebar-bottom p{margin:0;font-size:12px;line-height:1.6;color:#c0c9c1}.sidebar-bottom a{width:fit-content;color:#c0c9c1;text-underline-offset:3px}.sidebar-bottom a:hover{color:var(--green)}.sidebar-bottom small{font-size:12px;color:#a6afa7}.sidebar{color:#b9dbc3}main{margin-left:240px;width:calc(100% - 240px)}.connection{display:grid;gap:12px;margin-top:auto;padding:24px 8px 0;font-size:12px;color:#c0c9c1}.connection-status{display:flex;align-items:center}.connection button.small{margin:0;color:#173527;background:#edf1ec;border-color:#edf1ec}.connection button.small:hover{background:#d4e5d8}.dot{width:6px;height:6px;background:#b8bdb2;border-radius:50%;margin-right:8px}.dot.online{background:#3b9b68}.page{max-width:1504px;margin:auto;padding:32px 32px 0}.heading{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:24px}h1{font-size:clamp(28px,3vw,36px);font-weight:500;letter-spacing:-.5px;margin:0}p{font-size:14px;line-height:1.6;color:var(--muted);text-wrap:pretty;margin:12px 0 20px}.heading p{font-size:13px;margin:0}.status{font-size:12px;color:var(--muted);margin-bottom:16px;min-height:16px}.keyboard-panel{background:#ecefe8;border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:24px}.muted{font-size:12px;margin-left:12px;letter-spacing:0;color:var(--muted);display:none}.keyboard-scroll{overflow-x:auto;padding:24px 32px 16px}.keyboard{display:block;width:100%;min-width:510px;max-height:300px;filter:drop-shadow(0 8px 8px #26372d14)}.keyboard text{font-family:Segoe UI,sans-serif}.preview-footer{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--line);padding:12px 24px;font-size:12px;color:var(--muted);gap:12px}.preview-footer>div{display:flex;flex-wrap:wrap;gap:12px}.preview-footer label{display:flex;align-items:center;gap:8px}.preview-footer select{padding:4px 6px;font-size:12px;background:transparent;border-color:#b6beb2}.grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;align-items:start}.card{background:#fff;border:1px solid var(--line);border-radius:10px;padding:24px;min-width:0}h2{font-size:24px;line-height:1.3;font-weight:500;letter-spacing:0;margin:12px 0 16px}h3{font-size:15px;font-weight:600;margin:12px 0}.fine{font-size:12px;line-height:1.8;color:var(--muted);margin-top:16px}.steps{padding-left:20px;font-size:12px;color:var(--muted);line-height:1.7;margin-bottom:24px}dl{display:grid;grid-template-columns:1fr 1.4fr;font-size:12px;line-height:1.7;margin:16px 0}dt,dd{border-bottom:1px solid var(--line);padding:12px 0;margin:0}dt{color:var(--muted)}dd{text-align:right;color:var(--ink)}.notice{font-size:12px;line-height:1.8;background:#f2f4ee;border:1px solid var(--line);border-radius:8px;padding:12px 16px;color:var(--muted);margin:16px 0}.notice.error{background:#fbebe5;border-color:#e7c7bc;color:#983e28}.error-text{color:#983e28}.field{display:flex;flex-direction:column;gap:8px;font-size:12px;color:var(--ink);margin-bottom:20px}.field>label{font-weight:600}.field input:not([type=range]),.field select{width:100%;border:1px solid var(--line);border-radius:8px;padding:12px;background:#fafbf8;color:var(--ink);min-width:0}.field input[type=color]{height:44px;padding:4px}.field input[type=range]{width:100%;accent-color:#3f6e48}.two{display:grid;grid-template-columns:1fr 1fr;gap:20px}.check{display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.7;color:var(--muted);margin:16px 0}.check input{accent-color:#3f6e48;margin-top:3px}hr{border:none;border-top:1px solid var(--line);margin:24px 0}.button-row{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin:12px 0 20px}.button-row .field{margin-bottom:0;flex:1;min-width:160px}.file-drop{position:relative;cursor:pointer;display:flex;flex-direction:column;gap:12px;align-items:center;justify-content:center;min-height:140px;border:1px dashed #a2aea0;border-radius:12px;background:#f5f6f2;font-size:14px;padding:16px;text-align:center}.file-drop small{font-size:12px;color:var(--muted)}.file-drop:hover{background:#eef0eb}.file-drop:focus-within{outline:3px solid #3e9670;outline-offset:3px}.file-drop input{position:absolute;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip-path:inset(50%)}.display-preview{display:flex;flex-direction:column;align-items:center}.screen-bezel{width:224px;height:224px;background:#17241c;border:16px solid #2c3d2f;border-radius:16px;box-shadow:0 8px 24px #17241c12;margin:32px 0 24px;position:relative;display:grid;place-items:center}.screen-bezel canvas{width:192px;height:192px;image-rendering:pixelated;border-radius:3px}.screen-bezel span{position:absolute;color:#a6cba7;font-size:12px;text-align:center;letter-spacing:0;line-height:2.4}.display-preview h3,.display-preview p{text-align:center;overflow-wrap:anywhere}.display-preview .notice,.display-preview .check{align-self:stretch}.display-preview progress{width:100%;height:6px;accent-color:#3d6b43;margin:12px 0}.history{margin-top:24px}.empty{border:1px dashed var(--line);border-radius:12px;padding:32px;text-align:center;color:var(--muted);font-size:12px;margin-top:24px}.saved-row{display:flex;align-items:center;gap:12px;border-top:1px solid var(--line);padding:16px 0}.saved-row>div{flex:1;min-width:0;overflow-wrap:anywhere}.saved-row b{font-size:13px}.saved-row small{display:block;font-size:12px;color:var(--muted);margin-top:4px}.saved-row button{padding:8px 12px;font-size:12px}.import{display:block;font-size:12px;margin-top:4px;width:160px}.logs{background:#17231b;color:#c0ddbf;font-size:12px;line-height:1.9;white-space:pre-wrap;overflow-wrap:anywhere;max-height:460px;overflow:auto;padding:16px;border-radius:8px;min-height:180px}@media(min-width:1500px){.page{padding-top:40px}.keyboard{max-height:335px}}@media(max-width:1100px){.sidebar{width:180px;padding:28px 12px}main{margin-left:180px;width:calc(100% - 180px)}.page{padding:32px 24px 0}.keyboard-scroll{padding:20px 24px 16px}.card{padding:24px}.grid{gap:16px}.heading h1{letter-spacing:0}}@media(max-width:780px){.sidebar{position:static;width:100%;height:auto;padding:16px}.app{display:block}.wordmark{margin:0 0 16px;font-size:18px}.mark{font-size:24px}.sidebar-bottom{display:none}nav{display:flex;overflow:auto;gap:4px}.nav{width:auto;white-space:nowrap;font-size:12px;padding:12px}.nav-number,.nav-dot{display:none}main{margin:0;width:100%}.connection{display:flex;align-items:center;justify-content:space-between;margin-top:12px;padding:0}.page{padding:24px 16px 0}.grid{grid-template-columns:1fr}.preview-footer{align-items:flex-start;flex-direction:column}.keyboard-scroll{padding:16px}.heading{margin-bottom:16px}h1{font-size:32px}.saved-row{flex-wrap:wrap}.saved-row>div{min-width:100%}.two{gap:12px}.card{padding:24px}}.system-controls>select{width:100%;border:1px solid var(--line);border-radius:8px;padding:12px;background:#fafbf8;color:var(--ink);margin-bottom:20px}.system-controls>.field{margin-bottom:8px;margin-top:16px}.keyboard-scroll>.vendor-keyboard{max-width:800px;margin-inline:auto}.steps li+li{margin-top:8px}.vendor-keyboard{position:relative;width:100%;min-width:710px;aspect-ratio:800/280;isolation:isolate}.effect-board{overflow-x:auto;border-radius:8px}.effect-board:focus-visible{outline:3px solid #3e9670;outline-offset:3px}.effect-caption{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:16px 24px}.effect-copy{flex:1;min-width:0}.effect-copy p{margin:0;font-size:12px;line-height:1.8;color:var(--muted)}.effect-copy .fine{margin-top:8px}.effect-caption>button{flex:0 0 auto}.effect-schematic{position:relative;min-width:710px;width:100%;aspect-ratio:16.5/6.4;background:#cdd6c7;border:10px solid #cdd6c7;border-radius:9px}.effect-schematic>.vendor-key{background:#f1f4ed;border:1px solid #92a48b;font-size:10px}.vendor-keyboard>img{display:block;width:100%;height:auto;-webkit-user-select:none;user-select:none}@media(max-width:640px){.effect-caption{align-items:stretch;flex-direction:column;gap:12px;padding:16px}.effect-caption>button{align-self:flex-start}}.vendor-key{isolation:isolate;position:absolute;display:flex;align-items:center;justify-content:center;gap:2px;border:0;border-radius:4px;padding:0;font-size:clamp(8px,.8vw,11px);font-weight:600;color:#28384b;background:transparent;box-shadow:none;text-shadow:0 1px 2px #fff;line-height:1}.vendor-key:before{content:"";position:absolute;inset:-3px;border:2px solid var(--led);border-radius:4px;background:var(--led);opacity:calc(var(--led-strength) * .28);box-shadow:0 0 8px 3px var(--led);z-index:-1;pointer-events:none}button.vendor-key:hover{background:#fff4;transform:none}.vendor-key[aria-pressed=true]{outline:2px solid #245c43;outline-offset:2px;background:#fff8;z-index:2}.vendor-key:focus-visible{outline:3px solid #c17b17;outline-offset:3px;z-index:3}.vendor-key .key-selection-mark{position:absolute;right:0;top:0;font-size:8px}.paint-scroll{overflow-x:auto;padding:16px 8px;margin:12px -8px 24px;background:#ecefe8;border:1px solid var(--line);border-radius:9px}.paint-keyboard{position:relative;min-width:710px;width:100%;aspect-ratio:16.5/6.4;background:#27312c;border:12px solid #27312c;border-radius:10px}.paint-key{position:absolute;padding:7px 4px;border:1px solid #728473;border-radius:8px;font-size:11px;font-weight:500;text-align:left;display:flex;justify-content:space-between;align-items:flex-start;box-shadow:0 3px #101916}.paint-key:hover{filter:brightness(1.25);transform:none}.paint-key[aria-pressed=true]{outline:3px solid #48b77a;outline-offset:1px;z-index:1}.paint-key:focus-visible{outline:3px solid #e8b84e;outline-offset:2px;z-index:2}.key-selection-mark{font-size:10px;line-height:1}.selection-count{font-size:12px}.paint-controls>div:first-child{display:grid;grid-template-columns:110px minmax(140px,220px);gap:16px}.per-key-editor .grid{margin:24px 0}@media(prefers-reduced-motion:reduce){*{transition:none!important}}.lighting-switch{display:flex;gap:4px;margin-bottom:20px;padding:4px;width:fit-content;border:1px solid var(--line);border-radius:12px;background:#ecefe8}.lighting-switch button{border-color:transparent;background:transparent}.lighting-switch button[aria-pressed=true]{border-color:var(--line);background:#fff}.card>h2:first-child{margin-top:0}.page{padding-bottom:32px}[data-sonner-toaster] .app-toast{font-family:Segoe UI,sans-serif;color:var(--ink);background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 24px #10191614;font-size:13px;line-height:1.5}[data-sonner-toaster] .app-toast[data-type=error]{border-color:#d8a99b}[data-sonner-toaster] .app-toast [data-icon]{color:#3f6e48}[data-sonner-toaster] .app-toast[data-type=error] [data-icon]{color:#983e28}.preset-actions{align-items:flex-end}.preset-actions>button,.preset-import{min-height:44px;display:inline-flex;align-items:center;white-space:nowrap}.preset-import{position:relative}.preset-import .import{position:absolute;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip-path:inset(50%)}.preset-import:focus-within{outline:3px solid #3e9670;outline-offset:3px}@media(max-width:600px){.preset-actions .field{flex-basis:100%}}.timing-table-wrap{max-width:100%;overflow-x:auto;margin:8px 0 12px}.timing-table{width:100%;border-collapse:collapse;font-size:13px;text-align:left}.timing-table caption{padding:0 0 8px;color:var(--muted);text-align:left}.timing-table th,.timing-table td{padding:7px 10px;border-bottom:1px solid var(--line);white-space:nowrap}.timing-table thead th{color:var(--muted);font-weight:500}.timing-table tbody th{font-weight:600}
