:root{--bg: #F6F7F9;--panel: #FFFFFF;--line: #E4E7EC;--input: #D5D9E0;--ink: #101828;--muted: #5B6474;--faint: #8B95A4;--accent: #0B2F6B;--accent-hi: #123F8C;--gold: #F5B527;--ok: #1B7F4B;--ok-bg: #E3F4EA;--warn: #8A4B08;--warn-bg: #FFF4E5;--err: #B91C1C;--err-bg: #FDE8E8;--chip: #EEF0F4;--r-card: 16px;--r-input: 10px;--r-pill: 999px;--shadow: 0 20px 50px rgba(16, 24, 40, .08);--font: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "IBM Plex Mono", ui-monospace, Menlo, monospace}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hi)}button,input,select,textarea{font:inherit;color:inherit}.top{height:60px;padding:0 40px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);background:var(--panel)}.brand{display:flex;align-items:center;gap:10px;font-weight:600;font-size:18px;color:var(--ink)}.brand .host{font-size:13px;color:var(--muted);margin-left:6px;font-weight:400}.top nav{display:flex;align-items:center;gap:22px;font-size:14px}.top nav a{color:var(--muted)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:46px;padding:0 22px;border-radius:11px;border:1px solid var(--accent);background:var(--accent);color:#fff;font-weight:600;font-size:15px;cursor:pointer;white-space:nowrap}.btn:hover{background:var(--accent-hi);border-color:var(--accent-hi);color:#fff}.btn.secondary{background:var(--panel);color:var(--accent)}.btn.secondary:hover{background:#f3f6fb}.btn.small{height:36px;padding:0 14px;font-size:13.5px;border-radius:9px}.btn.quiet{border-color:var(--input);background:var(--panel);color:var(--ink);font-weight:500}.btn:disabled{opacity:.5;cursor:default}main.gen{padding:28px 40px 32px;display:grid;grid-template-columns:440px minmax(0,1fr);gap:32px;align-items:start;max-width:1280px;margin:0 auto}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);padding:22px;display:flex;flex-direction:column;gap:18px}.step{display:flex;flex-direction:column;gap:10px}.label{font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-weight:500}label.field{display:block;font-size:13px;color:var(--muted);margin:0 0 6px}.hint{font-size:12.5px;color:var(--muted);line-height:1.45}.row{display:flex;gap:10px;align-items:flex-end}.row>*{flex:1 1 auto}input[type=text],input[type=url],input[type=search],textarea,select{width:100%;height:44px;padding:0 12px;border:1px solid var(--input);border-radius:var(--r-input);background:var(--panel);font-size:14px}textarea{height:auto;padding:10px 12px;resize:vertical}input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #0b2f6b1f}input[type=range]{width:100%;accent-color:var(--accent)}input[type=color]{width:36px;height:36px;padding:0;border:1px solid var(--input);border-radius:8px;background:none;cursor:pointer}.pills{display:flex;flex-wrap:wrap;gap:6px}.pills button{height:34px;padding:0 14px;border-radius:var(--r-pill);border:1px solid var(--input);background:var(--panel);color:var(--ink);font-size:13px;cursor:pointer}.pills button.on{border-color:var(--accent);background:var(--accent);color:#fff;font-weight:500}.pills button:disabled{opacity:.45;cursor:not-allowed}.drop{min-height:92px;border:2px dashed var(--input);border-radius:12px;display:flex;align-items:center;justify-content:center;gap:14px;padding:12px;color:var(--muted);font-size:13.5px;cursor:pointer;text-align:center}.drop.has{border-style:solid;color:var(--ink)}.drop.active{border-color:var(--accent)}.drop img{max-height:64px;max-width:64px}.swatches{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.swatch{padding:6px 4px;border:1px solid var(--input);border-radius:10px;background:var(--panel);display:flex;flex-direction:column;align-items:center;gap:6px;font-size:11.5px;color:var(--muted);cursor:pointer}.swatch img{width:56px;height:56px;border-radius:6px;image-rendering:pixelated}.swatch.on{border:2px solid var(--accent);color:var(--ink);font-weight:500;padding:5px 3px}.swatch:disabled{opacity:.45;cursor:not-allowed}details{border-top:1px solid var(--line);padding-top:12px}summary{cursor:pointer;font-size:14px;font-weight:600;list-style:none;display:flex;justify-content:space-between;align-items:center}summary::-webkit-details-marker{display:none}summary:after{content:"";width:8px;height:8px;border-right:1.8px solid var(--muted);border-bottom:1.8px solid var(--muted);transform:rotate(-45deg);transition:transform .15s}details[open] summary:after{transform:rotate(45deg)}.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:10px}.check{display:flex;align-items:flex-start;gap:10px;font-size:13.5px;margin-top:10px}.check input{margin-top:3px}.check .hint{margin-top:2px}.preview{display:flex;flex-direction:column;align-items:center;gap:16px}.plate{width:min(520px,100%);aspect-ratio:1;padding:20px;background:var(--panel);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);display:flex;align-items:center;justify-content:center}.plate img{width:100%;height:100%;object-fit:contain;image-rendering:pixelated}.plate.empty{color:var(--muted);font-size:14px;text-align:center;padding:40px}.plate.busy img{opacity:.55;transition:opacity .2s}.badges{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;font-size:12.5px}.badge{height:28px;padding:0 10px;border-radius:7px;background:var(--chip);display:inline-flex;align-items:center}.badge.ok{background:var(--ok-bg);color:var(--ok)}.badge.bad{background:var(--err-bg);color:var(--err)}.toggle-line{font-size:13px;color:var(--muted);display:flex;gap:8px;align-items:center}.actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.msgs{width:min(520px,100%);display:flex;flex-direction:column;gap:6px;margin:0;padding:0;list-style:none}.msgs li{padding:9px 12px;border-radius:9px;background:var(--chip);font-size:13px;display:flex;gap:10px;align-items:flex-start}.msgs li:before{content:"";margin-top:5px;width:8px;height:8px;border-radius:50%;background:var(--muted);flex:0 0 auto}.msgs li.warning{background:var(--warn-bg);color:var(--warn)}.msgs li.warning:before{background:#b45309}.msgs li.error{background:var(--err-bg);color:var(--err)}.msgs li.error:before{background:var(--err)}.msgs small{display:block;color:var(--muted);margin-top:2px}.status{color:var(--muted);font-size:13px;min-height:18px;text-align:center}.error{color:var(--err);font-size:13px}.picker{border:1px solid var(--line);border-radius:10px;padding:10px;background:var(--panel)}.picker .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:6px;max-height:260px;overflow:auto;margin-top:10px}.picker .icon{border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:6px 2px;display:flex;flex-direction:column;align-items:center;gap:4px;font-size:10.5px;color:var(--muted);cursor:pointer}.picker .icon img{width:44px;height:44px}.picker .icon span{max-width:68px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker .icon.on{border:2px solid var(--accent);color:var(--ink)}@media (max-width: 900px){.top{padding:0 16px;height:52px}.top nav a:not(.keep){display:none}main.gen{grid-template-columns:1fr;padding:0 0 96px;gap:0}.preview{order:-1;position:sticky;top:0;z-index:2;background:var(--bg);padding:14px 16px 10px;border-bottom:1px solid var(--line);gap:8px}.plate{width:236px;padding:10px;border-radius:14px}.badges{font-size:11.5px}.badge{height:24px;padding:0 8px}.preview .actions,.preview .toggle-line,.preview .msgs,.preview .status,.preview .hint{display:none}.panel{border:0;border-radius:0;padding:14px 16px}.swatches{gap:6px}.swatch img{width:44px;height:44px}.bar{position:fixed;left:0;right:0;bottom:0;height:76px;padding:12px 16px;background:var(--panel);border-top:1px solid var(--line);display:flex;gap:10px;z-index:3}.bar .btn{flex:1 1 auto;height:52px;border-radius:12px}.bar .btn.icon-only{flex:0 0 52px;padding:0}}@media (min-width: 901px){.bar{display:none}}
