:root{color:#1d1d1f;background:#f5f5f7;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,PingFang SC,Microsoft YaHei,system-ui,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;letter-spacing:0;--page: #f5f5f7;--surface: rgba(255, 255, 255, .82);--surface-solid: #ffffff;--surface-muted: #f2f2f7;--surface-raised: #fafafa;--separator: rgba(60, 60, 67, .18);--separator-strong: rgba(60, 60, 67, .3);--text: #1d1d1f;--secondary: #6e6e73;--tertiary: #8e8e93;--blue: #0071e3;--blue-pressed: #0062c4;--blue-tint: #e8f3ff;--green: #248a3d;--orange: #c93400;--red: #d70015;--shadow: 0 18px 48px rgba(0, 0, 0, .08), 0 2px 8px rgba(0, 0, 0, .04)}*{box-sizing:border-box}html{min-width:320px;background:var(--page)}body{min-width:320px;min-height:100vh;margin:0;overflow:hidden;background:var(--page)}#root{min-height:100vh}button,input,select{font:inherit;letter-spacing:0}button,select,input[type=range],input[type=checkbox],input[type=radio],input[type=color]{cursor:pointer}button{-webkit-tap-highlight-color:transparent;transition:transform .1s ease-out,background-color .14s ease-out,border-color .14s ease-out,color .14s ease-out,box-shadow .14s ease-out}button:active:not(:disabled){transform:scale(.97)}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid rgba(0,113,227,.28);outline-offset:2px}button:disabled,select:disabled,input:disabled{cursor:not-allowed;opacity:.42}.app-shell{width:min(calc(100% - 32px),1760px);height:100dvh;margin:0 auto;display:grid;grid-template-rows:68px minmax(0,1fr) 28px}.app-header{position:sticky;top:0;z-index:20;min-height:68px;display:flex;align-items:center;justify-content:space-between;gap:20px;background:#f5f5f7c7;backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%)}.brand-lockup{min-width:0;display:flex;align-items:center;gap:10px}.brand-mark{width:36px;height:36px;display:grid;grid-template-columns:repeat(2,8px);grid-template-rows:repeat(2,8px);gap:3px;flex:0 0 auto;place-items:center;place-content:center;border:1px solid rgba(60,60,67,.14);border-radius:8px;background:#ffffffc7;box-shadow:0 1px 2px #0000000d}.brand-bead{width:8px;height:8px;border:1px solid rgba(0,0,0,.14);border-radius:50%;box-shadow:inset 0 0 0 2px #ffffff57}.brand-bead-red{background:#ff3b30}.brand-bead-yellow{background:#fc0}.brand-bead-blue{background:#0a84ff}.brand-bead-green{background:#30d158}.app-header h1{margin:0;color:var(--text);font-size:17px;font-weight:650;line-height:1.2}.app-header p{margin:2px 0 0;color:var(--tertiary);font-size:11px;line-height:1.2}.privacy-badge{display:inline-flex;align-items:center;gap:6px;color:var(--green);font-size:12px;font-weight:600;white-space:nowrap}.app-layout{display:grid;grid-template-columns:318px minmax(560px,1fr) 338px;align-items:stretch;min-height:0;height:100%;overflow:clip;border:1px solid var(--separator);border-radius:8px;background:var(--surface);box-shadow:var(--shadow);backdrop-filter:blur(28px) saturate(160%);-webkit-backdrop-filter:blur(28px) saturate(160%)}.panel{min-width:0}.settings-panel,.stats-panel{min-height:0;height:100%;overflow-y:auto;padding:18px;background:#ffffffb8;scrollbar-color:rgba(60,60,67,.3) transparent;scrollbar-width:thin}.settings-panel{border-right:1px solid var(--separator)}.stats-panel{border-left:1px solid var(--separator)}.preview-panel{min-height:0;display:flex;overflow:hidden;flex-direction:column;padding:18px;background:#fafafaa8}.panel-titlebar,.panel-heading-row,.control-heading-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.panel-titlebar,.panel-heading-row{min-height:30px;margin-bottom:12px}.panel h2{margin:0;color:var(--text);font-size:15px;font-weight:650;line-height:1.25}.status-pill{flex:0 0 auto;padding:5px 9px;border-radius:999px;background:#248a3d1a;color:var(--green);font-size:11px;font-weight:650;font-variant-numeric:tabular-nums}.upload-box{padding:10px;border:1px solid var(--separator);border-radius:8px;background:#f2f2f7b8;transition:background-color .14s ease-out,border-color .14s ease-out,box-shadow .14s ease-out}.upload-box.is-dragging{border-color:var(--blue);background:var(--blue-tint);box-shadow:0 0 0 3px #0071e31f}.upload-actions{display:grid;gap:7px}.primary-button{min-height:38px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 13px;border:1px solid var(--blue);border-radius:8px;background:var(--blue);color:#fff;font-size:13px;font-weight:650}.primary-button:hover:not(:disabled){background:var(--blue-pressed);border-color:var(--blue-pressed)}.upload-actions p,.muted,.control-help{margin:0;color:var(--secondary);font-size:11px;line-height:1.45}.source-preview{margin:10px 0 0}.source-preview img{display:block;width:100%;max-height:164px;object-fit:contain;border:1px solid var(--separator);border-radius:8px;background:var(--surface-solid)}.source-preview figcaption{margin-top:7px;overflow-wrap:anywhere;color:var(--tertiary);font-size:10px;line-height:1.35}.settings-stack{display:grid;margin-top:4px}.control-group{display:grid;gap:10px;padding:16px 0;border-top:1px solid var(--separator)}.control-group h3{margin:0;color:var(--text);font-size:13px;font-weight:600;line-height:1.25}.control-heading-row strong{color:var(--blue);font-size:12px;font-weight:650;font-variant-numeric:tabular-nums}.range-field{display:grid;grid-template-columns:minmax(0,1fr) 44px;gap:7px 10px;align-items:center;color:var(--secondary);font-size:11px}.range-field>span{grid-column:1 / -1}.range-field input[type=range]{width:100%;margin:0;accent-color:var(--blue)}.range-field output{min-width:42px;padding:4px 6px;border-radius:6px;background:var(--surface-muted);color:var(--text);text-align:center;font-size:11px;font-weight:650;font-variant-numeric:tabular-nums}.compact-range>span{grid-column:1;grid-row:1}.compact-range input{grid-column:1;grid-row:2}.compact-range output{grid-column:2;grid-row:1 / 3}.preset-grid,.field-grid,.choice-grid{display:grid;gap:7px}.preset-grid,.field-grid,.two-up{grid-template-columns:repeat(2,minmax(0,1fr))}.three-up{grid-template-columns:repeat(3,minmax(0,1fr))}.preset-grid button,.choice-grid button{min-width:0;min-height:52px;display:grid;place-content:center;gap:3px;padding:7px;border:1px solid var(--separator);border-radius:8px;background:#ffffffb3;color:var(--text);text-align:center}.preset-grid button:hover:not(:disabled),.choice-grid button:hover:not(:disabled){border-color:#0071e36b;background:var(--surface-solid)}.preset-grid button.selected,.choice-grid button.selected{border-color:var(--blue);background:var(--blue-tint);color:#0055a6;box-shadow:inset 0 0 0 1px #0071e314}.preset-grid span,.choice-grid strong{font-size:12px;font-weight:650}.preset-grid small,.choice-grid small{display:block;color:var(--secondary);font-size:9px;line-height:1.3}.field-grid label,.color-field,.replace-panel label{display:grid;gap:6px;color:var(--secondary);font-size:11px}.field-grid input,.replace-panel select{width:100%;min-width:0;height:36px;padding:0 10px;border:1px solid var(--separator-strong);border-radius:8px;background:#ffffffe0;color:var(--text);font-variant-numeric:tabular-nums}.quick-stats,.summary-grid{display:grid;gap:7px;margin:0}.quick-stats{grid-template-columns:repeat(3,minmax(0,1fr))}.quick-stats div,.summary-grid div{min-width:0;padding:9px;border:1px solid var(--separator);border-radius:8px;background:#f2f2f79e}.quick-stats dt,.summary-grid dt{color:var(--secondary);font-size:10px}.quick-stats dd,.summary-grid dd{margin:4px 0 0;overflow-wrap:anywhere;color:var(--text);font-size:14px;font-weight:650;font-variant-numeric:tabular-nums}.segmented-control,.tabs{display:grid;padding:2px;border-radius:8px;background:#7676801f}.segmented-control{grid-template-columns:repeat(3,minmax(0,1fr))}.board-size-control{grid-template-columns:repeat(4,minmax(0,1fr))}.segmented-control button,.tabs button{min-width:0;border:0;border-radius:6px;background:transparent;color:var(--secondary);font-size:11px;font-weight:600}.segmented-control button{min-height:32px;padding:6px 4px}.segmented-control button:hover:not(:disabled),.tabs button:hover:not(:disabled){color:var(--text)}.segmented-control button.selected,.tabs button.selected{background:var(--surface-solid);color:var(--text);box-shadow:0 1px 3px #0000001f,0 0 0 .5px #0000000d}.color-field{grid-template-columns:1fr 44px;align-items:center}.color-field input[type=color]{width:44px;height:32px;padding:3px;border:1px solid var(--separator-strong);border-radius:8px;background:var(--surface-solid)}.advanced-settings{border-top:1px solid var(--separator)}.advanced-settings summary{padding:15px 0;color:var(--text);font-size:12px;font-weight:600;cursor:pointer}.advanced-settings-body{padding-bottom:4px}.advanced-settings-body .control-group:first-child{padding-top:4px;border-top:0}.option-list{display:grid;gap:9px}.option-list label,.toggle-row{display:flex;align-items:center;gap:8px;color:var(--secondary);font-size:11px}.option-list input[type=radio]{width:16px;height:16px;margin:0;accent-color:var(--blue)}.toggle-row{justify-content:space-between}.toggle-row input[type=checkbox]{position:relative;width:34px;height:20px;flex:0 0 auto;order:2;margin:0;appearance:none;border:0;border-radius:999px;background:#d1d1d6;transition:background-color .16s ease-out}.toggle-row input[type=checkbox]:after{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0000003d;content:"";transition:transform .18s ease-out}.toggle-row input[type=checkbox]:checked{background:var(--green)}.toggle-row input[type=checkbox]:checked:after{transform:translate(14px)}.processing-status{min-height:32px;display:flex;align-items:center;gap:7px;margin-top:10px;color:var(--secondary);font-size:11px}.processing-status.active{color:var(--orange)}.processing-dot{width:7px;height:7px;flex:0 0 auto;border-radius:50%;background:var(--tertiary)}.processing-status.active .processing-dot{background:#ff9f0a;animation:pulse .9s ease-in-out infinite alternate}@keyframes pulse{to{opacity:.35}}.inline-warning,.error-message{border:1px solid rgba(215,0,21,.2);border-radius:8px;background:#d7001512;color:var(--red);font-size:11px;line-height:1.45}.inline-warning{margin:10px 0 0;padding:10px}.error-message{display:flex;align-items:flex-start;gap:7px;margin-bottom:10px;padding:10px 11px}.error-message svg{flex:0 0 auto;margin-top:1px}.pattern-preview{min-width:0;min-height:0;flex:1;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr);gap:10px}.pattern-preview.view-source{grid-template-rows:auto minmax(0,1fr)}.preview-panel>.empty-state{flex:1}.preview-toolbar,.tool-panel{display:flex;align-items:center;justify-content:space-between;gap:12px}.tabs{grid-template-columns:repeat(3,minmax(82px,1fr));min-width:276px}.tabs button{min-height:32px;padding:6px 10px}.zoom-control{display:grid;grid-template-columns:auto minmax(90px,144px) 42px;align-items:center;gap:8px;color:var(--secondary);font-size:11px}.zoom-control input{width:100%;margin:0;accent-color:var(--blue)}.zoom-control output{text-align:right;font-variant-numeric:tabular-nums}.tool-panel{min-height:48px;padding:6px 8px;border:1px solid var(--separator);border-radius:8px;background:#ffffffb3;backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%)}.tool-buttons{display:flex;align-items:center;gap:4px;min-width:0}.tool-buttons button,.replace-button{position:relative;width:34px;height:34px;display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;padding:0;border:0;border-radius:7px;background:transparent;color:var(--secondary)}.tool-buttons button:hover:not(:disabled),.replace-button:hover:not(:disabled){background:#7676801a;color:var(--text)}.tool-buttons button.selected{background:var(--blue);color:#fff;box-shadow:0 2px 5px #0071e33d}.tool-divider{width:1px;height:22px;margin:0 3px;background:var(--separator)}.active-brush{display:flex;align-items:center;gap:7px;min-width:0;color:var(--secondary);font-size:11px;font-weight:600}.active-brush-label{color:var(--tertiary);font-weight:500}.color-swatch{width:26px;height:26px;flex:0 0 auto;border:1px solid var(--separator-strong);border-radius:7px;box-shadow:inset 0 0 0 .5px #ffffff61}.filter-note{padding:3px 6px;border-radius:5px;background:#ff9f0a1f;color:#a35400;font-size:9px}.canvas-stage{position:relative;min-width:0;min-height:0;height:100%;overflow:hidden;border:1px solid var(--separator);border-radius:8px;background:#e9e9ee}.canvas-scroll{width:100%;min-width:0;height:100%;min-height:0;overflow:auto;display:flex;align-items:flex-start;justify-content:flex-start;padding:20px;scrollbar-color:rgba(60,60,67,.32) transparent;scrollbar-width:thin}.pattern-canvas{display:block;max-width:none;flex:0 0 auto;margin:auto;border:1px solid rgba(60,60,67,.18);background:#fff;box-shadow:0 12px 34px #0000001f,0 1px 3px #00000014;image-rendering:auto;touch-action:none}.pattern-canvas.mode-overview{max-width:100%;height:auto!important}.pattern-canvas.tool-paint,.pattern-canvas.tool-erase,.pattern-canvas.tool-magic,.pattern-canvas.tool-pick{cursor:crosshair}.source-stage{display:grid;place-items:center;padding:24px}.source-stage-image{display:block;max-width:100%;max-height:100%;object-fit:contain;border-radius:8px;box-shadow:0 12px 34px #0000001f}.canvas-processing{position:absolute;top:10px;right:10px;padding:6px 9px;border:1px solid rgba(255,255,255,.34);border-radius:7px;background:#1d1d1fbd;color:#fff;font-size:10px;font-weight:600;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}.processing-spinner{flex:0 0 auto;animation:spin .72s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{min-height:0;height:100%;display:grid;place-content:center;justify-items:center;gap:7px;padding:24px;border:1px solid var(--separator);border-radius:8px;background:#e9e9ee;color:var(--text);text-align:center}.empty-state-icon{width:48px;height:48px;display:grid;place-items:center;margin-bottom:4px;border-radius:8px;background:#ffffffb8;color:var(--blue);box-shadow:0 3px 12px #0000000f}.empty-state strong{font-size:15px;font-weight:650}.empty-state>span:last-child{color:var(--secondary);font-size:12px}.stats-stack{display:grid;gap:12px}.stats-empty{min-height:180px;display:grid;place-content:center;justify-items:center;gap:6px;padding:24px;color:var(--secondary);text-align:center}.stats-empty svg{margin-bottom:3px;color:var(--tertiary)}.stats-empty strong{color:var(--text);font-size:12px;font-weight:650}.stats-empty span{font-size:10px;line-height:1.45}.summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.color-list{max-height:calc(100vh - 316px);overflow-x:hidden;overflow-y:auto;border:1px solid var(--separator);border-radius:8px;background:#ffffffb3;scrollbar-color:rgba(60,60,67,.3) transparent;scrollbar-width:thin}.color-list-header,.color-list-row{display:grid;grid-template-columns:minmax(106px,1fr) 52px 48px 34px;gap:5px;align-items:center}.color-list-header{position:sticky;top:0;z-index:2;min-height:34px;padding:0 8px;background:#f2f2f7f0;color:var(--secondary);font-size:10px;font-weight:600;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}.color-list-item{border-top:1px solid var(--separator);background:#ffffff8f}.color-list-item:first-of-type{border-top:0}.color-list-item.selected-color-row{background:#0071e314;box-shadow:inset 3px 0 var(--blue)}.color-list-item.brush-color-row .color-identity strong{color:var(--blue)}.color-list-row{min-height:56px;padding:6px 8px}.color-detail-button{min-width:0;display:flex;align-items:center;gap:8px;padding:0;border:0;background:transparent;color:var(--text);text-align:left}.color-identity{min-width:0;display:grid;gap:2px}.color-identity strong{font-size:12px;font-weight:650}.color-identity small{overflow:hidden;color:var(--tertiary);font-size:9px;text-overflow:ellipsis}.color-count,.color-ratio{color:var(--secondary);font-size:10px;font-variant-numeric:tabular-nums;text-align:right}.replace-button{width:30px;height:30px}.replace-panel{padding:0 8px 10px 42px}.replace-panel label{grid-template-columns:48px minmax(0,1fr);align-items:center}.export-actions{position:sticky;bottom:-18px;z-index:3;display:grid;gap:8px;margin-top:14px;padding:12px 0 18px;background:#ffffffe0;backdrop-filter:blur(18px) saturate(170%);-webkit-backdrop-filter:blur(18px) saturate(170%)}.export-actions button{min-height:42px;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:9px 12px;border:1px solid transparent;border-radius:8px;font-size:12px;font-weight:650}.export-actions button:first-child{background:var(--blue);color:#fff;box-shadow:0 4px 12px #0071e333}.export-actions button:first-child:hover:not(:disabled){background:var(--blue-pressed)}.export-actions button:last-child{background:#7676801f;color:var(--text)}.export-actions button:last-child:hover:not(:disabled){background:#7676802e}.app-footer{display:grid;place-items:center;padding:0 2px;color:var(--tertiary);font-size:10px;text-align:center}@media(hover:hover)and (pointer:fine){.tool-buttons button[data-tooltip]:after,.replace-button[data-tooltip]:after{position:absolute;top:calc(100% + 7px);left:50%;z-index:30;width:max-content;max-width:132px;padding:5px 7px;border-radius:6px;background:#1d1d1fe0;color:#fff;content:attr(data-tooltip);font-size:10px;font-weight:500;line-height:1.2;opacity:0;pointer-events:none;transform:translate(-50%,-3px);transition:opacity .12s cubic-bezier(.23,1,.32,1),transform .12s cubic-bezier(.23,1,.32,1)}.tool-buttons button[data-tooltip]:hover:after,.tool-buttons button[data-tooltip]:focus-visible:after,.replace-button[data-tooltip]:hover:after,.replace-button[data-tooltip]:focus-visible:after{opacity:1;transform:translate(-50%);transition-delay:.26s}}.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}@media(max-width:1320px){body{overflow-y:auto}.app-shell{height:auto;min-height:100dvh;grid-template-rows:68px auto 28px}.app-layout{grid-template-columns:304px minmax(0,1fr);min-height:calc(100dvh - 96px);height:auto;overflow:visible}.settings-panel{position:sticky;top:68px;align-self:start;max-height:calc(100dvh - 68px);height:auto}.stats-panel{position:static;grid-column:1 / -1;max-height:none;height:auto;border-top:1px solid var(--separator);border-left:0}.preview-panel{min-height:calc(100dvh - 96px);overflow:visible}.pattern-preview{min-height:0}.canvas-stage,.canvas-scroll,.empty-state{min-height:590px;height:auto}.color-list{max-height:420px}}@media(max-width:860px){.app-shell{width:min(calc(100% - 16px),760px)}.app-header{min-height:60px}.app-layout{grid-template-columns:minmax(0,1fr);min-height:0}.settings-panel,.stats-panel{position:static;max-height:none;height:auto;border:0}.preview-panel{min-height:0;border-top:1px solid var(--separator)}.stats-panel{grid-column:auto;border-top:1px solid var(--separator)}.canvas-stage,.canvas-scroll,.empty-state{min-height:440px;height:auto}.canvas-scroll{max-height:72vh;justify-content:flex-start}}@media(max-width:580px){.app-header p{display:none}.brand-mark{width:32px;height:32px}.privacy-badge{font-size:0}.privacy-badge svg{width:19px;height:19px}.settings-panel,.preview-panel,.stats-panel{padding:14px}.preview-toolbar,.tool-panel{align-items:stretch;flex-direction:column}.tabs{width:100%;min-width:0}.tabs button{padding-inline:4px}.zoom-control{grid-template-columns:auto minmax(0,1fr) 42px}.tool-panel{gap:8px}.tool-buttons{width:100%;overflow-x:auto;padding-bottom:2px}.active-brush{min-height:28px}.canvas-stage,.canvas-scroll,.empty-state{min-height:360px}.canvas-scroll{padding:10px}.source-stage{padding:12px}.three-up{grid-template-columns:repeat(3,minmax(0,1fr))}.color-list-header,.color-list-row{grid-template-columns:minmax(96px,1fr) 48px 44px 32px;gap:3px}}@media(max-width:360px){.tool-buttons{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:2px;overflow-x:visible}.tool-buttons button{width:100%}.tool-divider{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}button:active:not(:disabled){transform:none}}@media(prefers-reduced-transparency:reduce){.app-header,.app-layout,.settings-panel,.stats-panel,.tool-panel,.color-list-header,.canvas-processing{backdrop-filter:none;-webkit-backdrop-filter:none}.app-header{background:var(--page)}.app-layout,.settings-panel,.stats-panel,.tool-panel{background:var(--surface-solid)}}@media(prefers-contrast:more){:root{--separator: rgba(0, 0, 0, .42);--separator-strong: rgba(0, 0, 0, .62)}.app-layout,.tool-panel,.upload-box,.color-list{background:#fff}}
