:root{--bg: #0b0b0f;--surface: #141419;--surface-2: #1b1b22;--surface-3: #23232b;--border: #2a2a33;--border-strong: #3a3a45;--text: #ececf1;--text-dim: #9b9ba8;--text-faint: #6c6c78;--accent: #8b8bf5;--accent-strong: #a3a3ff;--danger: #e5484d;--disabled-opacity: .4;--radius: 10px;--radius-sm: 8px;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased}body.static-page{background:var(--surface)}.seo-shell{background:var(--surface);padding:32px 20px 48px;font-size:13px;color:var(--text-dim)}.seo-header,.seo-main,.seo-footer{max-width:820px;margin:0 auto}.seo-header{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:10px;padding-bottom:16px}.seo-brand{font-size:15px;font-weight:600;color:var(--text);text-decoration:none}.seo-nav{display:flex;gap:14px}@media(max-width:600px){.seo-nav{flex-wrap:wrap;gap:6px 10px;justify-content:flex-end}}.seo-shell a{color:var(--accent-strong)}.seo-main h1{font-size:18px;color:var(--text)}.seo-main h2{font-size:15px;color:var(--text);margin-top:28px}.seo-main h3{font-size:13px;color:var(--text);margin-bottom:4px}.seo-updated{font-size:12px;color:var(--text-faint);font-family:var(--mono)}.seo-footer span{margin:0}.seo-footer{display:flex;flex-wrap:wrap;row-gap:4px;justify-content:space-between;margin-top:32px;padding-top:16px;border-top:1px solid var(--border);color:var(--text-faint);font-size:13px}@media(max-width:600px){.seo-header{flex-wrap:wrap;gap:8px;padding-bottom:14px}.seo-nav{flex-wrap:wrap;gap:6px 10px;justify-content:space-between}.seo-brand{font-size:14px}}@media(max-width:480px){.seo-footer{font-size:11px;margin-top:22px}}html,body,#root{height:100%}body{overscroll-behavior:none}body.no-scroll{overflow:hidden}.app{height:100dvh;display:flex;flex-direction:column}.app-header{display:flex;align-items:center;justify-content:space-between;padding:0 20px;height:52px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg) 82%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);position:sticky;top:0;z-index:20}.brand{display:flex;align-items:center;gap:10px}.logo{color:var(--text)}.brand-text{display:flex;align-items:baseline;gap:8px}.brand-name{font-size:16px;font-weight:700;letter-spacing:.2px}.brand-sub{font-size:12px;color:var(--text-dim)}.app-main{flex:1;display:flex;min-height:0}.workspace{flex:1;min-width:0;display:flex;flex-direction:column;padding:16px;overflow:hidden}.panel-wrap{display:flex;flex-direction:column;flex-shrink:0;min-height:0}.drawer-mask,.fab,.panel-topbar{display:none}.dropzone-wrap{flex:1;display:flex;align-items:center;justify-content:center;padding:40px 20px}.dropzone{width:100%;max-width:620px;border:1.5px dashed var(--border-strong);border-radius:16px;padding:56px 32px;text-align:center;background:var(--surface);cursor:pointer;transition:border-color .15s,background .15s}.dropzone.drag{border-color:var(--accent);background:var(--surface-2)}.dz-icon{color:var(--text-dim);margin-bottom:16px;display:flex;justify-content:center}.dropzone .dz-title{font-size:21px;font-weight:650;color:var(--text);margin:0 0 10px;letter-spacing:.1px}.dropzone p{color:var(--text-dim);margin:0 0 22px}.dz-actions{display:flex;justify-content:center;gap:10px}.dz-types{font-size:12px;color:var(--text-faint);margin:18px 0 0}.canvas-card{position:relative;flex:1;min-width:0;min-height:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;line-height:0;touch-action:none;-webkit-user-select:none;user-select:none}.pattern-canvas{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:100%;height:100%}.canvas-card.tool-paint,.canvas-card.tool-eraser{cursor:crosshair}.canvas-card.tool-magnify{cursor:zoom-in}@media(hover:none){.canvas-card.tool-magnify:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:transparent;z-index:2}}.canvas-card.pan-ready{cursor:grab}.canvas-card.grabbing{cursor:grabbing}.cell-hover{position:absolute;border:2px solid var(--accent);border-radius:2px;box-shadow:0 0 0 1px #ffffffa6;pointer-events:none;z-index:5}.cell-hover.key-cursor{border-style:dashed}.canvas-card:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.canvas-card:active{transition:transform .1s ease-out}.canvas-toolbar{display:flex;align-items:center;gap:10px;padding:0 0 10px;flex-wrap:wrap}.segmented.tools button{display:inline-flex;align-items:center;gap:5px;padding:7px 10px}.segmented.tools button:disabled{opacity:var(--disabled-opacity);cursor:not-allowed}.segmented.tools button:active:not(:disabled){transform:scale(.96)}.hist-btns{display:flex;gap:6px}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid var(--border);background:var(--surface-2);color:var(--text-dim);border-radius:7px;cursor:pointer;transition:background .12s,color .12s,border-color .12s,transform .08s ease-out;padding:0;outline:none}.icon-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.icon-btn:active{transform:scale(.92)}.icon-btn:hover:not(:disabled){background:var(--surface-3);color:var(--text)}.icon-btn:disabled{opacity:var(--disabled-opacity);cursor:not-allowed}.zoom-controls{display:flex;align-items:center;gap:6px;margin-left:auto;padding-left:8px;border-left:1px solid var(--border)}.zoom-pct{min-width:44px;text-align:center;font-family:var(--mono);font-size:12px;color:var(--text-dim)}.lens{position:absolute;z-index:15;pointer-events:none;background:#16161d;border:1px solid var(--border-strong);border-radius:10px;padding:8px;box-shadow:0 12px 36px #000000b3;line-height:1.2;transition:opacity .12s ease-out}.lens-canvas{display:block;border-radius:6px;image-rendering:pixelated}.lens-info{margin-top:6px;font-size:11px;color:var(--text-dim);font-family:var(--mono);text-align:center;white-space:nowrap}.canvas-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--text-faint);line-height:1.4}.inline-working{display:inline-flex;align-items:center;gap:10px;color:var(--text-dim)}.overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;gap:10px;background:#fafaf8b8;color:#333;font-size:13px;line-height:1.4;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.spinner{width:18px;height:18px;border-radius:50%;border:2px solid rgba(0,0,0,.15);border-top-color:#333;animation:spin .8s linear infinite;display:inline-block;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.canvas-info{margin-top:10px;text-align:center;font-size:12px;color:var(--text-dim);font-family:var(--mono)}.control-panel{width:320px;flex:1;min-height:0;border-left:1px solid var(--border);background:var(--surface);overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:12px;overscroll-behavior:contain;scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}.panel-section{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);padding:12px}.panel-section h3{margin:0 0 10px;font-size:12px;font-weight:600;color:var(--text-dim);letter-spacing:.3px}.panel-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}.panel-row:last-child{margin-bottom:0}.panel-col{display:flex;flex-direction:column;gap:8px}.size-readout{font-size:13px;color:var(--text-dim);margin-top:8px}.mono{font-family:var(--mono);color:var(--text)}.hint{font-size:11px;color:var(--text-faint);margin:8px 0 0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--border-strong);background:var(--surface-3);color:var(--text);border-radius:var(--radius-sm);padding:7px 12px;font-size:13px;font-weight:500;cursor:pointer;transition:background .12s,border-color .12s,color .12s,opacity .12s,transform .08s ease-out;font-family:var(--font)}.btn:active{transform:scale(.97)}.btn:hover{background:#2b2b35}.btn:disabled{opacity:var(--disabled-opacity);cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#0b0b0f;font-weight:600}.btn-primary:hover{background:var(--accent-strong)}.btn-primary:disabled:hover{background:var(--accent)}.btn-ghost{background:transparent;border-color:var(--border);color:var(--text-dim);outline:none}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn-ghost:hover{color:var(--text);border-color:var(--border-strong);background:var(--surface-2)}.btn-sm{padding:5px 9px;font-size:12px}.btn-block{width:100%}input[type=range]{width:100%;accent-color:var(--accent)}.adjust-row input[type=range]{flex:1;min-width:0}.adjust-label{font-size:13px;color:var(--text-dim);white-space:nowrap}.cost-input{width:90px;padding:4px 8px;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border, rgba(128, 128, 140, .35));border-radius:6px}.stats .segmented{margin-bottom:8px}.segmented{display:flex;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:2px}.segmented button{flex:1;border:0;background:transparent;color:var(--text-dim);font-size:12px;padding:5px 0;border-radius:6px;cursor:pointer;font-family:var(--font);white-space:nowrap;transition:background .12s,color .12s,transform .08s ease-out;outline:none}.segmented button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.segmented button:active{transform:scale(.97)}.segmented button.active{background:var(--surface-3);color:var(--text);font-weight:600}.toggle{display:flex;align-items:center;gap:8px;background:none;border:0;padding:0;cursor:pointer;color:var(--text);font-size:13px;font-family:var(--font)}.toggle-track{width:32px;height:18px;border-radius:999px;background:var(--border-strong);position:relative;transition:background .15s;flex-shrink:0}.toggle-thumb{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .15s}.toggle.on .toggle-track{background:var(--accent)}.toggle.on .toggle-track .toggle-thumb{transform:translate(14px)}select{width:100%;background:var(--surface-3);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--radius-sm);padding:7px 10px;font-size:13px;font-family:var(--font);transition:border-color .12s ease-out,transform .08s ease-out}select:active{transform:scale(.98)}.origin-row{display:flex;align-items:center;gap:10px}.origin-thumb{width:44px;height:44px;border-radius:8px;object-fit:cover;border:1px solid var(--border);background:var(--bg)}.origin-thumb.placeholder{background:linear-gradient(135deg,#2a2a33 25%,transparent 25%) -8px 0 / 16px 16px,linear-gradient(225deg,#2a2a33 25%,transparent 25%) -8px 0 / 16px 16px,linear-gradient(315deg,#2a2a33 25%,transparent 25%) 0 0 / 16px 16px,linear-gradient(45deg,#2a2a33 25%,#1b1b22 25%) 0 0 / 16px 16px}.origin-meta{flex:1;min-width:0}.origin-name{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.origin-size{font-size:11px;color:var(--text-faint);font-family:var(--mono)}.color-strip{display:flex;flex-wrap:wrap;gap:6px;max-height:128px;overflow-y:auto;padding:2px;margin-top:10px}.color-chip{width:20px;height:20px;border-radius:5px;border:2px solid transparent;cursor:pointer;padding:0;flex-shrink:0;transition:transform .1s ease-out,border-color .1s ease-out;outline:none}.color-chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.color-chip:active{transform:scale(1.15)}.color-chip.selected{border-color:var(--accent);outline:2px solid color-mix(in srgb,var(--accent) 35%,transparent);outline-offset:1px}.stats{display:flex;flex-direction:column;gap:2px;max-height:260px;overflow-y:auto}.stats-row{display:grid;grid-template-columns:24px 18px 52px 1fr auto auto;align-items:center;gap:8px;width:100%;padding:4px;border:0;background:transparent;color:inherit;text-align:left;font-family:var(--font);border-radius:6px;font-size:12px;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none}.stats-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.stats-row.hl{background:color-mix(in srgb,var(--accent) 18%,transparent);outline:1px solid var(--accent)}.hl-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.hl-label{font-size:12px;color:var(--text-dim)}.icon-btn.active{color:var(--text);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 15%,transparent)}.stats-row:hover{background:var(--surface-3)}.stats-row:active{background:color-mix(in srgb,var(--accent) 12%,var(--surface-3))}.stats-no{color:var(--text-faint);font-family:var(--mono);text-align:right}.swatch{width:16px;height:16px;border-radius:4px;border:1px solid rgba(255,255,255,.12)}.stats-code{font-family:var(--mono);color:var(--text-dim)}.stats-name{color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stats-count{font-family:var(--mono);color:var(--text)}.stats-pct{font-family:var(--mono);color:var(--text-faint)}.stats-total{margin-top:8px;padding-top:8px;border-top:1px solid var(--border);font-size:12px;color:var(--text-dim);font-family:var(--mono)}.error-box{background:#e5484d1f;border:1px solid rgba(229,72,77,.4);color:#ffb3b6;border-radius:var(--radius-sm);padding:8px 10px;font-size:12px}.dz-error{margin:18px auto 0;max-width:360px}.error-banner{margin:0 0 10px;font-size:13px}#root+.seo-shell{border-top:1px solid var(--border)}.print-sheet{display:none}@media print{body{background:#fff!important}body.printing-sheet .app-header,body.printing-sheet .app-main,body.printing-sheet .seo-shell,body.printing-sheet .fab{display:none!important}.print-sheet{display:block}.print-canvas{display:block;width:100%;height:auto}}@media(max-width:860px){.workspace{padding:10px}.canvas-toolbar{padding:0 0 8px;gap:6px}.segmented.tools{flex:1 0 100%}.segmented.tools button{padding:8px 6px;font-size:13px}.icon-btn{width:38px;height:38px}.zoom-controls{border-left:none;padding-left:0}.canvas-card{border-radius:8px}.fab{display:inline-flex;position:fixed;right:14px;bottom:calc(16px + env(safe-area-inset-bottom));z-index:30;width:52px;height:52px;border-radius:50%;align-items:center;justify-content:center;background:var(--accent);color:#0b0b0f;border:none;box-shadow:0 6px 18px #00000073;cursor:pointer}.fab:hover{background:var(--accent-strong)}.panel-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:none;flex-direction:row;align-items:flex-end;justify-content:center}.panel-wrap.open{display:flex}.drawer-mask{display:block;position:absolute;top:0;right:0;bottom:0;left:0;background:#0000008c}.control-panel{position:relative;width:100%;max-height:85dvh;border-radius:16px 16px 0 0;border-left:none;border-top:1px solid var(--border);background:var(--surface);padding:4px 14px calc(24px + env(safe-area-inset-bottom));overflow-y:auto;overscroll-behavior:contain;box-shadow:0 -8px 30px #00000080;transition:transform .18s ease-out}.panel-topbar{display:flex;align-items:center;justify-content:center;position:relative;padding:12px 8px 10px;background:var(--surface);border-bottom:1px solid var(--border);cursor:grab;gap:8px}.panel-grip{width:40px;height:4px;border-radius:999px;background:var(--border-strong);cursor:grab;touch-action:none}.panel-grip:active{cursor:grabbing}.panel-close{cursor:pointer}.panel-nav{display:flex;align-items:center;gap:10px;padding:8px 2px 2px}.panel-nav .panel-close{margin-left:auto}.panel-nav .btn{flex:1}.stats,.color-strip{max-height:none;overflow:visible}.segmented button{padding:8px 0;touch-action:manipulation}.color-chip,.stats-row{touch-action:manipulation}.panel-nav .btn{justify-content:center}.color-chip{width:28px;height:28px}.stats-row{padding:8px 4px;font-size:13px}.color-strip-mobile{display:flex;flex-wrap:nowrap;flex-direction:row;gap:6px;padding:8px env(safe-area-inset-right) calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--border);margin-top:8px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity;touch-action:pan-x;scroll-padding:4px;scroll-behavior:smooth}.color-strip-mobile::-webkit-scrollbar{display:none}.color-strip-mobile .color-chip{width:24px;height:24px;flex-shrink:0;border-radius:6px;border-width:2px;scroll-snap-align:start;touch-action:manipulation}.canvas-info{margin-top:8px;margin-bottom:4px}}@media(max-width:420px){.icon-btn{width:34px;height:34px}.canvas-toolbar{gap:4px}.zoom-controls{gap:4px;padding-left:6px}.hist-btns{gap:4px}.segmented.tools button{padding:7px 4px;font-size:12px}.zoom-pct{min-width:32px;font-size:11px}}@media(max-width:360px){.icon-btn{width:32px;height:32px}.canvas-toolbar{gap:3px}.zoom-controls{gap:3px;padding-left:4px}.hist-btns{gap:3px}.zoom-pct{min-width:28px;font-size:10px}.canvas-info{font-size:11px}}
