/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.fixed{position:fixed}.sticky{position:sticky}.start{inset-inline-start:var(--spacing)}.row-2{grid-row:2}.row-3{grid-row:3}.row-4{grid-row:4}}:root{--paper:#f5e7d4;--cream:#fff4df;--grape:#403050;--plum:#705060;--sage:#8d9b7d;--gold:#ddb347;--night:#071624;--terracotta:#a26149;--blush:#d6a09b;--shadow-soft:0 4px 10px #4030501a, 0 1px 2px #07162414;--shadow-raised:0 9px 20px #40305029, 0 2px 5px #0716241a;--shadow-deep:0 18px 34px #40305040, 0 4px 9px #07162429;--shadow-pressed:0 3px 7px #40305029, inset 0 2px 4px #0716241f}*{box-sizing:border-box}html{background:var(--paper)}body{color:var(--grape);background:radial-gradient(circle at 18% 10%,#fff4dfb8 0 2px,#0000 3px) 0 0/62px 62px,radial-gradient(circle at 84% 28%,#7050601c 0 1px,#0000 2px) 0 0/46px 46px,linear-gradient(135deg,#f7ead8,#f2dfca);margin:0;font-family:Microsoft YaHei,PingFang SC,Noto Sans SC,Arial,sans-serif}button,input{font:inherit}button{color:inherit}.site-shell{min-height:100vh;padding:0 24px 64px}.site-header{border-bottom:1px dashed #70506042;justify-content:space-between;align-items:center;width:min(1160px,100%);min-height:112px;margin:0 auto;display:flex}.brand-lockup{align-items:center;width:220px;height:104px;display:flex}.brand-logo{object-fit:contain;object-position:left center;width:100%;height:100%;display:block}.header-note{color:var(--plum);letter-spacing:.04em;margin:0;font-size:13px}.intro{width:min(1160px,100%);margin:54px auto 34px}.eyebrow,.step-kicker{color:var(--terracotta);letter-spacing:.18em;font-size:11px;font-weight:800}.intro h1{letter-spacing:-.04em;max-width:770px;margin:8px 0 12px;font-family:Georgia,Songti SC,serif;font-size:clamp(34px,5vw,64px);line-height:1.12}.intro>p:last-child{color:#403050b8;margin:0;font-size:16px}.studio-grid{grid-template-columns:minmax(0,1.08fr) minmax(360px,.92fr);align-items:start;gap:24px;width:min(1160px,100%);min-width:0;margin:0 auto;display:grid}.preview-panel,.editor-panel{background:#fff9edd1;border:1px solid #7050602e;border-radius:28px;min-width:0;padding:26px;box-shadow:0 24px 70px #40305017}.section-heading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.section-heading h2{margin:5px 0 0;font-family:Georgia,Songti SC,serif;font-size:25px}.layout-badge{color:#526249;white-space:nowrap;background:#8d9b7d1f;border:1px solid #8d9b7d57;border-radius:999px;padding:9px 12px;font-size:12px}.preview-stage{background-color:#8d9b7d;background-image:linear-gradient(90deg,#fff4df75 50%,#0000 50%),linear-gradient(#fff4df75 50%,#0000 50%),none;background-position:0 0,0 0,0 0;background-repeat:repeat,repeat,repeat;background-size:46px 46px;background-attachment:scroll,scroll,scroll;background-origin:padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box;border-radius:22px;place-items:center;min-height:410px;margin-top:20px;display:grid;position:relative;overflow:hidden}.preview-stage:after{content:"";pointer-events:none;background:radial-gradient(circle at 50% 45%,#0000 20%,#07162417 100%);position:absolute;inset:0}.star{color:var(--cream);opacity:.75;position:absolute}.star-one{font-size:28px;top:18%;right:13%}.star-two{font-size:54px;bottom:18%;left:12%}.chain{z-index:0;pointer-events:none;width:68px;height:88px;position:absolute;bottom:calc(100% - 5px);left:50%;transform:translate(-50%)}.chain-ring{border:6px solid #b9a88b;border-radius:50%;width:40px;height:40px;position:absolute;top:0;left:14px;box-shadow:inset 2px 2px #fff1cd,2px 4px 6px #07162433}.chain-link{border:3px solid #b9a88b;border-radius:999px;position:absolute;box-shadow:inset 1px 1px #fff1cd,1px 2px 3px #0716242b}.chain-link-one{width:12px;height:27px;top:33px;left:28px}.chain-link-two{width:24px;height:12px;top:53px;left:22px}.chain-clasp{background:#fff4df1f;border:4px solid #b9a88b;border-radius:999px;width:16px;height:27px;position:absolute;top:61px;left:26px;box-shadow:inset 1px 1px #fff1cd,1px 3px 4px #0716242e}.clear-base{z-index:1;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#ffffff4a;border:2px solid #ffffffc7;border-radius:22px;margin-top:60px;padding:18px;position:relative;box-shadow:inset 0 0 0 5px #ffffff2e,0 20px 35px #07162433}.base-lug{z-index:1;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);pointer-events:none;background:#ffffff4f;border:2px solid #ffffffc7;border-radius:13px 13px 8px 8px;width:31px;height:19px;position:absolute;top:-10px;left:50%;transform:translate(-50%);box-shadow:inset 0 0 0 3px #ffffff21,0 3px 6px #07162429}.key-grid{z-index:2;position:relative}.key-row{gap:10px;display:flex}.keycap{--key-color:var(--cream);aspect-ratio:1;background:linear-gradient(145deg, #ffffffc7 0 11%, transparent 31%), linear-gradient(180deg, #ffffff3d 0 58%, #4030502b 100%), var(--key-color);cursor:pointer;border:2px solid #ffffffb8;border-radius:18px;width:clamp(66px,8vw,86px);transition:transform .17s,box-shadow .17s,outline-color .17s;position:relative;overflow:visible;box-shadow:inset 2px 2px 2px #ffffff8c,inset -2px -3px 3px #4030501a,0 4px #40305021,0 10px 15px #07162436}.keycap:hover,.keycap.is-active{transform:translateY(-4px)}.keycap.is-active{outline:3px solid var(--gold);outline-offset:3px}.keycap:active{box-shadow:var(--shadow-pressed);transform:translateY(0)}.keycap:focus-within{outline:3px solid var(--plum);outline-offset:3px}.keycap.is-active:focus-within{outline-color:var(--gold)}.keycap-hit-area{z-index:7;border-radius:inherit;cursor:pointer;background:0 0;border:0;position:absolute;inset:-2px}.keycap-hit-area:focus{outline:none}.keycap-face{z-index:1;background:var(--key-color);border-radius:12px;position:absolute;inset:5px 5px 11px;overflow:hidden;box-shadow:inset 0 1px #ffffff59,inset 0 -3px 5px #4030501a}.keycap-pattern{--key-color:transparent;background:0 0}.keycap-pattern-art{z-index:1;border-radius:inherit;background:var(--cream);position:absolute;inset:0;overflow:hidden}.keycap-pattern-art:after{content:"";border-radius:inherit;pointer-events:none;background:radial-gradient(at 24% 8%,#ffffff73 0 5%,#0000 28%),linear-gradient(145deg,#ffffff2e 0 12%,#0000 31% 72%,#07162426 100%);position:absolute;inset:0;box-shadow:inset 2px 2px 2px #ffffff52,inset -3px -4px 5px #07162421}.keycap-pattern .keycap-face{z-index:2;-webkit-backdrop-filter:brightness(1.035)saturate(.98);backdrop-filter:brightness(1.035)saturate(.98);background:#ffffff08;border:1px solid #ffffff4d;border-radius:12px;inset:5px 5px 11px;overflow:visible;box-shadow:inset 2px 2px 3px #fff3,inset -2px -3px 4px #0716241a,0 5px 5px #07162438}.keycap-upload{--upload-base:#ecf4f17a;border-color:#ffffffd1}.keycap-upload .keycap-face{background:var(--upload-base)}.keycap-art{object-fit:cover;object-position:50% 47%;width:100%;height:100%;display:block}.upload-sticker{z-index:1;background:var(--cream);border:2px solid #fffaf0eb;border-radius:18%;position:absolute;inset:14% 14% 17%;overflow:hidden;box-shadow:0 2px 5px #40305042,inset 0 0 0 1px #40305017}.upload-sticker .keycap-art{object-position:center}.upload-lid{z-index:3;border-radius:inherit;pointer-events:none;background:linear-gradient(145deg,#ffffff9e 0 8%,#0000 27% 72%,#40305014 100%),linear-gradient(90deg,#ffffff29,#0000 18% 84%,#07162412);position:absolute;inset:0;box-shadow:inset 0 2px #ffffff54}.letter{z-index:1;height:100%;color:var(--ink-color,var(--grape));text-shadow:0 2px #ffffff4d;place-items:center;font-family:Georgia,serif;font-size:clamp(29px,4vw,40px);font-weight:800;display:grid;position:relative}.keycap-gloss{z-index:4;border-radius:inherit;pointer-events:none;background:radial-gradient(at 24% 9%,#ffffff7a 0 6%,#0000 31%),linear-gradient(145deg,#ffffff38 0 13%,#0000 34% 76%,#4030501a 100%);position:absolute;inset:0}.keycap-loading{z-index:5;color:var(--grape);text-align:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#fff4dfad;flex-direction:column;justify-content:center;align-items:center;gap:4px;font-size:7px;display:flex;position:absolute;inset:0}.keycap-loading i{border:2px solid #4030502e;border-top-color:var(--plum);border-radius:50%;width:16px;height:16px;animation:.75s linear infinite keycap-spin}.keycap-load-error{z-index:9;color:#944b46;cursor:pointer;background:#fff4dfe8;border:0;font-size:7px;line-height:1.45;position:absolute;inset:0}.keycap-load-error b{color:var(--grape)}.slot-number{z-index:6;color:#40305099;pointer-events:none;font-size:9px;font-weight:800;position:absolute;top:8px;left:10px}@keyframes keycap-spin{to{transform:rotate(360deg)}}.preview-caption{text-align:center;color:#40305099;margin:15px 0 0;font-size:12px}.tiny-orbit{color:var(--gold);font-size:25px}.control-group{margin-top:24px}.control-group label,.control-label{margin-bottom:9px;font-size:13px;font-weight:800;display:block}.name-control{gap:8px;display:flex}.name-control input{min-width:0;height:50px;color:var(--grape);letter-spacing:.18em;background:#fffaf0;border:1px solid #70506038;border-radius:14px;outline:none;flex:1;padding:0 15px;font-size:19px;font-weight:800}.name-control input:focus{border-color:var(--plum);box-shadow:0 0 0 3px #70506021}.name-control button{background:var(--grape);min-height:50px;color:var(--cream);cursor:pointer;border:0;border-radius:14px;padding:0 15px}.field-hint{color:#4030508f;margin-top:8px;font-size:11px;display:block}.swatches{grid-template-columns:repeat(3,1fr);gap:9px;display:grid}.swatch{cursor:pointer;background:#fffaf0;border:1px solid #70506026;border-radius:12px;align-items:center;gap:8px;min-height:48px;padding:7px 9px;font-size:11px;display:flex}.swatch span{background:var(--swatch);border:2px solid #fff;border-radius:8px;flex:none;width:25px;height:25px;box-shadow:0 0 0 1px #40305024}.pattern-option{text-align:left;cursor:pointer;background:#fffaf0;border:1px solid #70506029;border-radius:16px;grid-template-columns:58px 1fr auto;align-items:center;gap:12px;width:100%;min-height:76px;padding:8px;display:grid}.pattern-option img{object-fit:cover;border-radius:12px;width:58px;height:58px}.pattern-option strong,.pattern-option small{display:block}.pattern-option small{color:#40305091;margin-top:4px}.pattern-option b{color:var(--terracotta);font-size:12px}.complete-button{background:var(--grape);width:fit-content;min-width:238px;min-height:52px;color:var(--cream);cursor:pointer;border:0;border-radius:14px;justify-content:center;align-items:center;gap:18px;margin:24px 0 0 auto;padding:0 20px 0 22px;font-weight:800;transition:transform .17s,box-shadow .17s,filter .17s;display:flex;position:relative;overflow:hidden;box-shadow:inset 0 1px #ffffff24,0 9px 20px #40305033}.complete-button:before{content:"";pointer-events:none;background:linear-gradient(#ffffff14,#0000 43%);position:absolute;inset:0}.complete-button span{z-index:1;font-size:15px;line-height:1;position:relative}.complete-button b{z-index:1;background:0 0;border:0;flex:none;font-size:19px;font-weight:400;line-height:1;transition:transform .17s;position:relative}.complete-button:hover{filter:saturate(1.02);transform:translateY(-1px);box-shadow:inset 0 1px #ffffff29,0 13px 25px #4030503d}.complete-button:hover b{transform:translate(4px)}.complete-button:active{transform:translateY(1px);box-shadow:inset 0 2px 5px #07162430,0 5px 11px #40305029}.complete-button:active b{transform:translate(2px)}.complete-button:focus-visible{outline:3px solid var(--gold);outline-offset:4px}@media (max-width:860px){.site-shell{padding:0 14px 100px}.site-header{min-height:92px}.brand-lockup{width:174px;height:84px}.header-note{display:none}.intro{margin:34px auto 24px}.intro h1{font-size:clamp(34px,10vw,46px)}.studio-grid{grid-template-columns:minmax(0,1fr)}.preview-panel,.editor-panel{border-radius:22px;padding:18px}.preview-stage{min-height:330px}.clear-base{padding:12px}.key-row{gap:6px}.keycap{border-radius:15px;width:min(18vw,72px)}.complete-button{z-index:20;right:14px;bottom:max(12px, env(safe-area-inset-bottom));width:auto;min-width:0;min-height:56px;margin:0;position:fixed;left:14px}}@media (max-width:380px){.section-heading{flex-direction:column;align-items:flex-start}.preview-stage{min-height:300px}.name-control{flex-direction:column}.swatches{grid-template-columns:repeat(2,1fr)}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}a{color:inherit;text-decoration:none}:is(button:focus-visible,input:focus-visible){outline:3px solid var(--gold);outline-offset:3px}button:disabled{cursor:not-allowed;opacity:.5}.header-status{color:#526249;background:#fff4df85;border:1px solid #8d9b7d4d;border-radius:999px;align-items:center;gap:8px;padding:9px 13px;font-size:12px;font-weight:700;display:flex}.status-dot{background:var(--sage);border-radius:50%;width:8px;height:8px;box-shadow:0 0 0 4px #8d9b7d26}.intro{grid-template-columns:minmax(0,1fr) minmax(260px,370px);align-items:end;gap:48px;display:grid}.intro-copy{color:#403050b8;margin:0 0 8px;font-size:15px;line-height:1.9}.preview-panel{position:sticky;top:16px}.layout-picker{grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin:12px -6px 4px;padding:8px 6px 14px;display:grid}.layout-option{cursor:pointer;background:#fffaf0;border:1px solid #70506024;border-radius:14px;flex-direction:column;justify-content:center;align-items:center;min-width:0;min-height:78px;padding:8px 4px;transition:transform .15s,border-color .15s,background .15s;display:flex}.layout-option:hover{border-color:#70506057;transform:translateY(-2px)}.layout-option.is-selected{border-color:var(--plum);box-shadow:inset 0 0 0 1px var(--plum);background:#a58eaf29}.layout-option strong{white-space:nowrap;margin-top:7px;font-size:11px}.layout-option small{color:#40305073;white-space:nowrap;margin-top:2px;font-size:8px}.layout-icon{place-content:center;gap:2px;min-height:17px;display:grid}.layout-icon i{background:#fff9;border:1px solid #4030507a;border-radius:3px;width:8px;height:8px;display:block}.icon-one,.icon-row-2,.icon-row-3,.icon-row-4{grid-template-columns:8px}.icon-grid-4{grid-template-columns:repeat(2,8px)}.icon-grid-9{grid-template-columns:repeat(3,8px)}.preview-stage{min-height:430px;margin-top:0}.preview-stage.layout-row-2{min-height:430px}.preview-stage.layout-row-3{min-height:510px}.preview-stage.layout-row-4{min-height:570px}.preview-stage .clear-base{width:fit-content}.key-grid{grid-template-columns:repeat(var(--layout-columns), auto);gap:clamp(5px,1vw,10px);display:grid}.preview-stage .keycap{width:clamp(68px,7.1vw,88px)}.preview-stage.layout-one .keycap{width:clamp(104px,12vw,126px)}.preview-stage.layout-grid-9 .keycap{border-width:3px;border-radius:15px;width:clamp(55px,5.9vw,70px)}.preview-stage.layout-grid-9 .keycap-face,.preview-stage.layout-grid-9 .keycap-pattern .keycap-face{border-radius:8px}.preview-stage.layout-grid-9 .upload-lid{border-radius:inherit}.preview-stage.layout-grid-9 .letter{font-size:clamp(24px,3vw,33px)}.image-placeholder{color:#4030508c;place-items:center;height:100%;font-size:11px;display:grid}.stage-doodle{z-index:1;color:#fff4dfbf;-webkit-user-select:none;user-select:none;position:absolute}.stage-doodle-one{font-size:27px;top:15%;right:12%}.stage-doodle-two{font-size:30px;bottom:11%;left:10%;transform:rotate(-14deg)}.stage-doodle-three{font-size:50px;top:29%;left:8%}.preview-footer{color:#40305094;justify-content:space-between;gap:16px;margin-top:13px;font-size:11px;display:flex}.preview-footer strong{color:var(--plum)}.editor-heading{border-bottom:1px dashed #70506033;padding-bottom:18px}.slot-nav-heading{justify-content:space-between;align-items:center;gap:12px;margin-top:17px;display:flex}.slot-nav-heading>span{color:var(--grape);font-size:11px;font-weight:800}.slot-nav-heading strong{color:var(--plum);background:#7050600f;border:1px solid #7050601c;border-radius:999px;padding:5px 9px;font-size:9px;font-weight:750}.slot-strip{scrollbar-width:thin;background:#7050600a;border:1px solid #70506021;border-radius:14px;gap:4px;width:100%;margin-top:8px;padding:4px;display:flex;overflow:auto hidden}.slot-chip{color:#40305094;text-align:left;cursor:pointer;min-width:98px;min-height:52px;box-shadow:none;background:0 0;border:1px solid #0000;border-radius:10px;flex-direction:column;flex:none;justify-content:center;align-items:flex-start;gap:4px;padding:7px 12px;transition:color .15s,background-color .15s,border-color .15s,box-shadow .15s;display:flex}.slot-chip span{color:#70506078;font-size:9px;font-weight:700}.slot-chip b{white-space:nowrap;font-size:11px;font-weight:800}.slot-chip:hover{color:var(--grape);background:#7050600a}.slot-chip.is-selected{color:var(--grape);background:#fffaf0;border-color:#70506029;box-shadow:0 3px 9px #4030501a}.slot-chip.is-selected span{color:var(--terracotta)}.quick-name{margin-top:18px}.name-control{position:relative}.name-control input{padding-right:55px}.name-control>span{color:#40305073;font-size:11px;font-weight:700;position:absolute;top:50%;right:15px;transform:translateY(-50%)}.editor-tabs{background:#fff4df8c;border:1px solid #70506026;border-radius:14px;grid-template-columns:repeat(3,1fr);margin-top:22px;padding:4px;display:grid}.editor-tabs button{cursor:pointer;background:0 0;border:0;border-radius:10px;min-height:44px;font-size:12px;font-weight:800}.editor-tabs button.is-selected{background:var(--grape);color:var(--cream);box-shadow:0 6px 14px #40305029}.tab-panel{padding-top:2px}.control-label{color:var(--grape)}.swatch{text-align:left;grid-template-rows:auto auto;grid-template-columns:28px 1fr;align-items:center;display:grid;position:relative}.swatch span{grid-row:1/span 2}.swatch b{font-size:11px}.swatch small{color:#40305073;font-size:8px}.swatch.is-selected{border-color:var(--plum);box-shadow:inset 0 0 0 1px var(--plum)}.swatch.is-selected:after{content:"✓";color:var(--plum);font-size:10px;font-weight:900;position:absolute;top:5px;right:7px}.character-grid{grid-template-columns:repeat(9,1fr);gap:7px;display:grid}.character-grid button{cursor:pointer;background:#fffaf0;border:1px solid #70506024;border-radius:11px;min-width:0;min-height:44px;font-family:Georgia,serif;font-size:16px;font-weight:800}.character-grid button:hover{border-color:var(--plum)}.character-grid button.is-selected{border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold);background:#ddb3472b}.category-tabs{scrollbar-width:thin;gap:7px;margin:11px -12px -1px;padding:8px 12px 15px;display:flex;overflow-x:auto}.category-tabs button{cursor:pointer;background:#fffaf0;border:1px solid #70506026;border-radius:999px;flex:none;min-height:44px;padding:0 13px;font-size:11px;font-weight:800}.category-tabs button.is-selected{border-color:var(--sage);background:var(--sage);color:var(--cream)}.pattern-grid{scrollbar-width:thin;grid-template-columns:repeat(3,1fr);gap:12px;max-height:560px;margin:0 -10px -8px;padding:10px 14px 18px 10px;display:grid;overflow:hidden auto}.pattern-card{text-align:left;cursor:pointer;background:#fffaf0;border:2px solid #0000;border-radius:15px;min-width:0;padding:5px;position:relative;overflow:hidden}.pattern-thumb{aspect-ratio:1;background:linear-gradient(110deg,#eee0cc 22%,#fff5e4 42%,#eee0cc 62%) 0 0/220% 100%;border-radius:11px;animation:1.3s ease-in-out infinite thumb-shimmer;display:block;position:relative;overflow:hidden;padding:0!important}.pattern-thumb img{z-index:1;border-radius:inherit;object-fit:cover;opacity:0;width:100%;height:100%;transition:opacity .18s;display:block;position:relative}.pattern-thumb img.is-loaded{opacity:1}.pattern-thumb:has(img.is-loaded){background:var(--cream);animation:none}.pattern-thumb i{border-radius:inherit;pointer-events:none;border:1px solid #70506014;position:absolute;inset:0}@keyframes thumb-shimmer{to{background-position:-220% 0}}.pattern-card span{padding:7px 3px 4px;display:block}.pattern-card strong,.pattern-card small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.pattern-card strong{font-size:11px}.pattern-card small{color:#4030507a;margin-top:3px;font-size:8px}.pattern-card:hover{border-color:#70506059}.pattern-card.is-selected{border-color:var(--gold);box-shadow:0 0 0 2px #ddb34721}.pattern-card.is-selected:after{content:"✓";background:var(--gold);width:24px;height:24px;color:var(--grape);border-radius:50%;place-items:center;font-size:12px;font-weight:900;display:grid;position:absolute;top:10px;right:10px}.layout-option,.swatch,.character-grid button,.category-tabs button,.pattern-card,.upload-base,.upload-card,.primary-button,.secondary-button,.modal-close{box-shadow:var(--shadow-soft);transition:transform .15s,box-shadow .15s,border-color .15s,background .15s}.layout-option:hover,.swatch:hover,.character-grid button:hover,.category-tabs button:hover,.pattern-card:hover,.upload-base:hover,.upload-card:hover,.primary-button:hover,.secondary-button:hover,.modal-close:hover{box-shadow:var(--shadow-raised);transform:translateY(-2px)}.layout-option:hover,.category-tabs button:hover,.pattern-card:hover{box-shadow:0 8px 14px #40305026,0 2px 4px #07162417}.layout-option:active,.swatch:active,.character-grid button:active,.category-tabs button:active,.pattern-card:active,.upload-base:active,.upload-card:active,.primary-button:active,.secondary-button:active,.modal-close:active{box-shadow:var(--shadow-pressed);transform:translateY(1px)}button:not(.keycap-hit-area):focus-visible{outline:3px solid var(--plum);outline-offset:3px}.privacy-callout{background:#8d9b7d1c;border:1px solid #8d9b7d3d;border-radius:15px;gap:12px;margin:20px 0 15px;padding:14px;display:flex}.privacy-callout>span{border:1px dashed var(--sage);width:34px;height:34px;color:var(--sage);border-radius:50%;flex:none;place-items:center;font-size:20px;display:grid}.privacy-callout strong{font-size:12px}.privacy-callout p{color:#403050a6;margin:5px 0 0;font-size:11px;line-height:1.6}.upload-base-group{margin-top:0}.upload-base-picker{grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:18px;display:grid}.upload-base{text-align:left;cursor:pointer;background:#fffaf0;border:1px solid #70506026;border-radius:14px;grid-template-rows:auto auto;grid-template-columns:42px 1fr;align-items:center;min-height:92px;padding:9px;display:grid;position:relative}.upload-base>span{--base-color:transparent;background:var(--base-color);border:2px solid #fff;border-radius:9px;grid-row:1/span 2;width:34px;height:34px;position:relative;box-shadow:inset 0 -5px #4030501a,0 3px 5px #07162426,0 0 0 1px #4030501f}.upload-base>span i{background:#ffffff61;border:1px solid #70506038;border-radius:3px;position:absolute;inset:8px}.upload-base b{align-self:end;font-size:11px}.upload-base small{color:#40305073;align-self:start;margin-top:2px;font-size:8px}.upload-base.is-selected{border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold);background:#ddb3471f}.upload-base.is-selected:after{content:"✓";color:var(--terracotta);font-size:10px;font-weight:900;position:absolute;top:7px;right:8px}.upload-image-label{justify-content:space-between;align-items:center;gap:12px;margin:0 0 9px;display:flex}.upload-image-label small{color:#4030507a;font-size:10px}.upload-target{box-shadow:var(--shadow-soft);background:#ddb3471a;border:1px solid #ddb3476b;border-radius:15px;align-items:center;gap:11px;margin:0 0 11px;padding:10px 12px;display:flex}.upload-target-key{background:var(--target-color);width:46px;height:46px;color:var(--target-ink);border:3px solid #fffc;border-radius:12px;flex:none;place-items:center;font-family:Georgia,serif;font-size:22px;display:grid;position:relative;overflow:hidden;box-shadow:inset 0 -5px #4030501f,0 5px 8px #0716242b}.upload-target-key img{object-fit:cover;object-position:50% 47%;width:100%;height:100%}.upload-target div{min-width:0}.upload-target strong,.upload-target div span{display:block}.upload-target strong{font-size:12px}.upload-target div span{color:#40305094;margin-top:3px;font-size:9px}.upload-card{cursor:pointer;background:#fffaf0b3;border:2px dashed #70506042;border-radius:18px;flex-direction:column;justify-content:center;align-items:center;width:100%;min-height:170px;display:flex}.upload-card>span{background:var(--grape);width:46px;height:46px;color:var(--cream);border-radius:50%;place-items:center;margin-bottom:9px;font-size:25px;display:grid}.upload-card strong{font-size:13px}.upload-card small{color:#4030507d;margin-top:5px;font-size:10px}.uploaded-list{gap:9px;display:grid}.uploaded-theme{box-shadow:var(--shadow-soft);background:#fffaf0;border:1px solid #70506029;border-radius:18px;grid-template-columns:90px minmax(0,1fr) auto;align-items:center;gap:13px;padding:10px;transition:transform .15s,border-color .15s,box-shadow .15s;display:grid;position:relative}.uploaded-theme:hover{box-shadow:var(--shadow-raised);border-color:#70506052;transform:translateY(-2px)}.uploaded-theme.is-selected{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold), var(--shadow-raised);background:#ddb34714}.uploaded-theme-select{z-index:1;border-radius:inherit;cursor:pointer;background:0 0;border:0;position:absolute;inset:0}.uploaded-theme-select:focus-visible{outline:3px solid var(--plum);outline-offset:3px}.uploaded-theme img{z-index:1;object-fit:cover;pointer-events:none;border-radius:14px;width:90px;height:90px;position:relative}.uploaded-theme strong,.uploaded-theme span{display:block}.uploaded-theme>div{z-index:1;pointer-events:none;position:relative}.uploaded-theme strong{font-size:13px}.uploaded-theme span{color:#40305085;margin-top:4px;font-size:10px}.uploaded-theme .upload-usage{color:#526249;margin-top:7px;font-weight:800}.uploaded-theme .upload-usage.is-current{color:var(--terracotta)}.uploaded-theme-actions{flex-wrap:wrap;gap:7px;display:flex}.uploaded-theme div button{background:var(--sage);color:#fff;cursor:pointer;pointer-events:auto;min-height:44px;box-shadow:var(--shadow-soft);border:0;border-radius:9px;margin-top:9px;padding:0 11px;font-size:10px;font-weight:800}.uploaded-theme div button.edit-upload{color:var(--grape);background:0 0;border:1px solid #7050602e}.text-danger{z-index:2;color:#944b46;cursor:pointer;background:0 0;border:0;min-height:44px;font-size:10px;position:relative}.complete-button span{display:inline-block}.site-footer{color:#40305099;border-top:1px dashed #7050603d;justify-content:space-between;gap:20px;width:min(1160px,100%);margin:58px auto 0;padding-top:24px;font-size:11px;display:flex}.site-footer div{flex-direction:column;gap:5px;display:flex}.site-footer strong{color:var(--grape);font-family:Georgia,serif;font-size:17px}.site-footer p{margin:0}.toast{z-index:70;background:var(--night);max-width:calc(100% - 32px);color:var(--cream);text-align:center;border:1px solid #fff4df59;border-radius:999px;padding:11px 17px;font-size:12px;position:fixed;bottom:25px;left:50%;transform:translate(-50%);box-shadow:0 12px 30px #0716244d}.modal-backdrop{z-index:100;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);background:#0716248c;place-items:center;padding:22px;display:grid;position:fixed;inset:0;overflow-y:auto}.modal-card{scrollbar-width:thin;background:#fffaf0;border:1px solid #ffffff73;border-radius:26px;width:min(620px,100%);max-height:calc(100vh - 44px);padding:30px;position:relative;overflow-y:auto;box-shadow:0 30px 90px #07162459}.modal-card h2{margin:7px 42px 7px 0;font-family:Georgia,Songti SC,serif;font-size:clamp(25px,5vw,34px)}.modal-lead{color:#4030509e;margin:0;font-size:12px;line-height:1.6}.modal-close{z-index:2;cursor:pointer;background:#fff4df;border:1px solid #70506026;border-radius:50%;width:44px;height:44px;font-size:23px;position:absolute;top:17px;right:17px}.modal-actions,.completion-actions{flex-wrap:wrap;gap:9px;margin-top:22px;display:flex}.primary-button,.secondary-button{cursor:pointer;border-radius:12px;min-height:46px;padding:0 16px;font-size:12px;font-weight:800}.primary-button{border:1px solid var(--grape);background:var(--grape);color:var(--cream)}.secondary-button{color:var(--grape);background:#fffaf0;border:1px solid #70506033}.secondary-button.wide{width:100%;margin-top:10px}.form-error{color:#944b46;margin:12px 0 0;font-size:11px}.upload-dropzone{background:var(--paper);cursor:pointer;border:2px dashed #70506040;border-radius:20px;flex-direction:column;justify-content:center;align-items:center;min-height:250px;margin-top:20px;display:flex}.upload-dropzone input{opacity:0;width:1px;height:1px;position:absolute}.upload-icon{background:var(--grape);width:52px;height:52px;color:var(--cream);border-radius:50%;place-items:center;margin-bottom:11px;font-size:28px;display:grid}.upload-dropzone strong{font-size:14px}.upload-dropzone small{color:#40305080;margin-top:6px;font-size:10px}.crop-frame{aspect-ratio:1;background:var(--paper);border-radius:18px;width:min(320px,100%);margin:20px auto;position:relative;overflow:hidden}.crop-frame.is-interactive{touch-action:none;overscroll-behavior:contain;cursor:grab;-webkit-user-select:none;user-select:none}.crop-frame.is-interactive:active{cursor:grabbing}.crop-frame img{object-fit:fill;pointer-events:none;max-width:none;transition:none;display:block;position:absolute}.crop-safe-line{pointer-events:none;border:2px dashed #fff4dfcc;border-radius:15%;position:absolute;inset:9%;box-shadow:0 0 0 999px #07162429}.crop-gesture-hint{z-index:2;color:var(--cream);text-align:center;pointer-events:none;background:#0716249e;border:1px solid #ffffff3d;border-radius:999px;padding:8px 10px;font-size:10px;font-weight:700;position:absolute;bottom:12px;left:12px;right:12px}.crop-zoom-actions{justify-content:center;align-items:center;gap:8px;display:flex}.crop-zoom-actions button{min-width:44px;min-height:44px;color:var(--grape);cursor:pointer;background:#fffaf0;border:1px solid #7050602e;border-radius:12px;font-size:18px;font-weight:800}.crop-zoom-actions>span{color:#4030509e;text-align:center;min-width:56px;font-size:11px;font-weight:800}.crop-zoom-actions .crop-reset{min-width:88px;padding:0 12px;font-size:11px}.completion-dialog{width:min(760px,100%)}.completion-preview .preview-stage{min-height:330px;margin-top:20px}.completion-preview .preview-stage.layout-row-2{min-height:350px}.completion-preview .preview-stage.layout-row-3{min-height:420px}.completion-preview .preview-stage.layout-row-4{min-height:490px}.completion-preview .keycap{width:clamp(50px,8vw,72px)}.completion-preview .layout-one .keycap{width:95px}.completion-preview .layout-grid-9 .keycap{width:clamp(43px,6vw,57px)}.completion-preview .chain{transform-origin:bottom;top:auto;bottom:calc(100% - 5px);transform:translate(-50%)scale(.78)}.completion-preview .clear-base{margin-top:55px}.design-code-block{background:var(--paper);border:1px solid #70506026;border-radius:16px;grid-template-columns:1fr auto;align-items:center;gap:4px 14px;margin-top:16px;padding:14px 16px;display:grid}.design-code-block span{color:var(--terracotta);letter-spacing:.15em;font-size:8px;font-weight:900}.design-code-block strong{letter-spacing:.05em;grid-column:1;font-family:ui-monospace,monospace;font-size:20px}.design-code-block button{background:var(--grape);min-height:44px;color:var(--cream);cursor:pointer;border:0;border-radius:10px;grid-area:1/2/span 2;padding:0 12px;font-size:10px;font-weight:800}.privacy-notice{border-left:4px solid var(--gold);background:#ddb3471f;border-radius:8px;flex-direction:column;gap:4px;margin-top:13px;padding:11px 13px;display:flex}.privacy-notice strong{font-size:11px}.privacy-notice span{color:#4030509e;font-size:10px;line-height:1.5}.completion-actions .primary-button,.completion-actions .secondary-button{flex:150px}.action-notice{color:#526249;background:#8d9b7d1f;border-radius:10px;margin:12px 0 0;padding:10px 12px;font-size:10px;line-height:1.5}.generated-card{margin-top:15px}.generated-card span{color:#4030508c;text-align:center;margin-bottom:7px;font-size:10px;display:block}.generated-card img{border:1px solid #70506026;border-radius:16px;width:100%;display:block}@media (max-width:1020px) and (min-width:861px){.studio-grid{grid-template-columns:minmax(0,1fr) minmax(340px,.82fr)}.layout-picker{grid-template-columns:repeat(3,1fr)}.preview-stage .keycap{width:clamp(62px,7vw,74px)}.pattern-grid{grid-template-columns:repeat(2,1fr)}.character-grid{grid-template-columns:repeat(7,1fr)}}@media (max-width:860px){.intro{grid-template-columns:1fr;gap:12px}.intro-copy{max-width:550px}.preview-panel{position:static}.layout-picker,.slot-strip,.editor-tabs,.pattern-grid{min-width:0;max-width:100%}.layout-picker{scrollbar-width:thin;margin:10px -18px 2px -8px;padding:8px 18px 16px 8px;display:flex;overflow-x:auto}.layout-option{min-width:84px}.preview-stage{min-height:360px}.preview-stage.layout-row-2{min-height:390px}.preview-stage.layout-row-3{min-height:455px}.preview-stage.layout-row-4{min-height:520px}.preview-stage .keycap{width:min(18.5vw,76px)}.preview-stage.layout-one .keycap{width:112px}.preview-stage.layout-grid-9 .keycap{width:min(17vw,62px)}.clear-base{max-width:calc(100% - 22px)}.editor-panel{overflow:visible}.complete-button{margin-top:28px}.site-footer{flex-direction:column;padding-bottom:70px}.toast{bottom:84px}}@media (max-width:560px){.header-status{padding:8px 10px;font-size:9px}.intro h1{letter-spacing:-.055em}.layout-badge{display:none}.preview-stage{min-height:330px}.preview-stage.layout-row-2{min-height:370px}.preview-stage.layout-row-3{min-height:440px}.preview-stage.layout-row-4{min-height:505px}.preview-stage .keycap{border-width:3px;border-radius:14px;width:min(18vw,70px)}.preview-stage.layout-grid-9 .keycap{border-radius:12px;width:min(16.5vw,57px)}.preview-stage .clear-base{border-radius:18px;padding:10px}.character-grid{grid-template-columns:repeat(7,1fr)}.pattern-grid{grid-template-columns:repeat(2,1fr);max-height:none}.swatches{grid-template-columns:repeat(2,1fr)}.editor-tabs{grid-template-columns:repeat(3,minmax(105px,1fr));overflow-x:auto}.uploaded-theme{grid-template-columns:74px 1fr}.uploaded-theme img{width:74px;height:74px}.uploaded-theme>.text-danger{grid-column:2;justify-self:start}.modal-backdrop{align-items:end;padding:0}.modal-card{max-height:92vh;padding:24px 18px max(24px, env(safe-area-inset-bottom));border-radius:24px 24px 0 0}.completion-preview .preview-stage{min-height:300px}.completion-preview .preview-stage.layout-row-2{min-height:320px}.completion-preview .preview-stage.layout-row-3{min-height:370px}.completion-preview .preview-stage.layout-row-4{min-height:430px}.completion-preview .keycap{width:min(16vw,58px)}.completion-preview .layout-grid-9 .keycap{width:min(13vw,48px)}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (max-width:360px){.header-status{display:none}.preview-stage{min-height:300px}.preview-stage.layout-row-2{min-height:350px}.preview-stage.layout-row-3{min-height:415px}.preview-stage.layout-row-4{min-height:475px}.preview-stage .keycap{width:min(17.5vw,61px)}.preview-stage.layout-grid-9 .keycap{width:min(15.4vw,49px)}.character-grid{grid-template-columns:repeat(6,1fr)}}
