:root{--bg: #0f1412;--panel: #171e1b;--panel-edge: #2a3531;--ink: #e8ece9;--muted: #9aa89f;--accent: #d4784a;--accent-deep: #a85328;--ok: #7cb089;--danger: #e07474;--radius: 10px;font-family:DM Sans,system-ui,sans-serif;color:var(--ink);background:var(--bg);line-height:1.45;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body,#root{margin:0;height:100%}body{background:radial-gradient(1200px 700px at 80% 10%,#24332c 0%,transparent 55%),radial-gradient(900px 500px at 10% 90%,#2a2118 0%,transparent 50%),var(--bg)}.app{height:100%;min-height:100vh}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.app.hero{position:relative;display:flex;align-items:center;justify-content:center;padding:1.5rem;overflow:hidden}.contour-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;overflow:hidden}.contour-bg *{pointer-events:none}.contour-svg{position:absolute;top:-8%;right:-8%;bottom:-8%;left:-8%;width:116%;height:116%;opacity:.9}.contour-line{fill:none;stroke:url(#contourFade);stroke-width:1.15;stroke-linecap:round;stroke-linejoin:round;opacity:.55}.contour-ring{stroke-width:1.05;opacity:.65}.contour-route{fill:none;stroke:var(--accent);stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round;opacity:.55;stroke-dasharray:14 18;animation:contour-dash 28s linear infinite}.contour-layer-a{animation:contour-drift-a 48s ease-in-out infinite alternate}.contour-layer-b{animation:contour-drift-b 36s ease-in-out infinite alternate}.contour-layer-c{animation:contour-breathe 14s ease-in-out infinite;transform-origin:780px 300px}.contour-layer-d{animation:contour-breathe 18s ease-in-out infinite reverse;transform-origin:300px 620px}.contour-veil{position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse 70% 55% at 50% 45%,transparent 0%,#0f1412 72%),linear-gradient(180deg,color-mix(in srgb,var(--bg) 35%,transparent) 0%,transparent 35%,transparent 65%,color-mix(in srgb,var(--bg) 55%,transparent) 100%)}@keyframes contour-dash{to{stroke-dashoffset:-640}}@keyframes contour-drift-a{0%{transform:translate3d(-1.5%,1%,0)}to{transform:translate3d(2%,-1.5%,0)}}@keyframes contour-drift-b{0%{transform:translate3d(1.5%,-1%,0)}to{transform:translate3d(-2%,1.2%,0)}}@keyframes contour-breathe{0%,to{transform:scale(1);opacity:.85}50%{transform:scale(1.035);opacity:1}}@media (prefers-reduced-motion: reduce){.contour-route,.contour-layer-a,.contour-layer-b,.contour-layer-c,.contour-layer-d{animation:none}}.hero-drop{position:relative;z-index:1;width:100%;max-width:560px;text-align:center;animation:fade-in-up .4s ease-out}.hero-drop .brand-mark{font-size:3.2rem}.hero-drop .brand-sub{margin-bottom:1.75rem}.app.has-track{display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;padding:.85rem 1.25rem;border-bottom:1px solid var(--panel-edge);background:color-mix(in srgb,var(--panel) 92%,transparent);animation:fade-in .3s ease-out}.link-btn{border:none;background:none;color:var(--muted);font:inherit;font-size:.82rem;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.link-btn:hover{color:var(--ink)}.body-row{flex:1;display:grid;grid-template-columns:1fr minmax(300px,430px);min-height:0}.panel{display:flex;flex-direction:column;gap:1rem;padding:1.25rem 1.1rem 1.5rem;background:color-mix(in srgb,var(--panel) 92%,transparent);border-left:1px solid var(--panel-edge);overflow-y:auto;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);animation:fade-in .35s ease-out}.generate-btn{border:none;border-radius:10px;padding:.95rem;font:inherit;font-size:1.05rem;font-weight:700;cursor:pointer;background:linear-gradient(180deg,var(--accent),var(--accent-deep));color:#1a100c}.generate-btn:disabled{opacity:.45;cursor:not-allowed}.generate-btn.pending{opacity:0;pointer-events:none}.generate-btn.pop-in{animation:fade-in .35s ease-out}.free-badge{display:inline-block;margin:0 0 .65rem;padding:.28rem .65rem;border-radius:6px;background:color-mix(in srgb,var(--ok) 22%,#121816);color:#b6e0c0;font-size:.75rem;font-weight:600;letter-spacing:.02em}.app-dialog{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:1.25rem}.app-dialog-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;border:none;background:#080c0ac7;cursor:pointer}.app-dialog-card{position:relative;z-index:1;width:min(100%,360px);padding:1.15rem 1.15rem 1rem;border:1px solid var(--panel-edge);border-radius:12px;background:var(--panel);box-shadow:0 16px 40px #00000073}.app-dialog-title{margin:0 0 .45rem;font-size:1rem;font-weight:700;color:var(--ink)}.app-dialog-body{margin:0 0 1rem;font-size:.88rem;color:var(--muted);line-height:1.4}.app-dialog-actions{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.app-dialog-actions.single{grid-template-columns:1fr}.app-dialog-cancel,.app-dialog-confirm{border-radius:8px;padding:.7rem .5rem;font:inherit;font-size:.85rem;font-weight:600;cursor:pointer}.app-dialog-cancel{border:1px solid var(--panel-edge);background:#1a2220;color:var(--ink)}.app-dialog-confirm{border:1px solid var(--accent);background:color-mix(in srgb,var(--accent) 22%,#1a2220);color:#f3d8c6}@media (max-width: 860px){.app-dialog{padding:0;align-items:stretch}.app-dialog-card{width:100%;min-height:100%;max-width:none;border-radius:0;border:none;display:flex;flex-direction:column;justify-content:center;padding:1.75rem 1.35rem;box-shadow:none}.app-dialog-actions{margin-top:.5rem}}.checkout{display:flex;flex-direction:column;gap:.75rem}.checkout-preview{margin:-.25rem -.15rem .15rem;border-radius:12px;overflow:hidden;background:#121816;aspect-ratio:16 / 10}.checkout-preview img{display:block;width:100%;height:100%;object-fit:cover}.checkout-title{margin:0;font-family:"Instrument Serif",Georgia,serif;font-size:1.65rem;font-weight:400;line-height:1.15}.field-label{display:flex;flex-direction:column;align-items:stretch;gap:.35rem;margin-top:0;font-size:.82rem;color:var(--ink)}.field-input{width:100%;border:1px solid var(--panel-edge);border-radius:8px;padding:.65rem .75rem;font:inherit;font-size:.92rem;color:var(--ink);background:#121816}.field-input:focus{outline:2px solid color-mix(in srgb,var(--accent) 55%,transparent);outline-offset:1px;border-color:var(--accent)}.field-input::placeholder{color:color-mix(in srgb,var(--muted) 75%,transparent)}.field-hint{font-size:.72rem;color:var(--muted);line-height:1.3}.toggle-row{display:flex;align-items:center;gap:.55rem;font-size:.9rem;color:var(--ink);cursor:pointer}.toggle-row input{width:1.05rem;height:1.05rem;accent-color:var(--accent);cursor:pointer}.sub-legend{display:flex;align-items:baseline;justify-content:space-between;gap:.5rem;margin:.85rem 0 .4rem;font-size:.78rem;font-weight:600;color:var(--ink)}.sub-legend-count{font-weight:500;color:var(--muted)}.engrave-pick{margin-top:.85rem}.engrave-pick-head{display:flex;align-items:baseline;justify-content:space-between;gap:.5rem;margin:0 0 .35rem}.engrave-pick-head-spaced{margin-top:1rem}.engrave-pick-title{margin:0;font-size:.78rem;font-weight:600;color:var(--ink)}.engrave-pick-count{font-size:.72rem;color:var(--muted)}.engrave-pick-list{display:flex;flex-direction:column;gap:.35rem;margin-top:.55rem}button.engrave-pick-item{display:flex;align-items:flex-start;gap:.7rem;width:100%;margin:0;padding:.7rem .8rem;border:1px solid var(--panel-edge);border-radius:8px;background:#1a2220;color:var(--ink);font:inherit;text-align:left;cursor:pointer;transition:border-color .12s,background .12s}button.engrave-pick-item:hover:not(:disabled){border-color:color-mix(in srgb,var(--accent) 55%,var(--panel-edge))}button.engrave-pick-item.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,#1a2220)}button.engrave-pick-item:disabled:not(.active){opacity:.4;cursor:not-allowed}.engrave-pick-check{flex-shrink:0;width:1.1rem;height:1.1rem;margin-top:.12rem;border:1.5px solid var(--panel-edge);border-radius:4px;background:#121816}button.engrave-pick-item.active .engrave-pick-check{border-color:var(--accent);background:var(--accent);box-shadow:inset 0 0 0 2px #1a2220}.engrave-pick-meta{display:flex;flex-direction:column;gap:.15rem;min-width:0;flex:1}.engrave-pick-label{font-size:.82rem;font-weight:600;color:var(--ink)}button.engrave-pick-item.active .engrave-pick-label{color:#f3d8c6}.engrave-pick-value{font-size:.78rem;color:var(--muted);line-height:1.3;overflow-wrap:anywhere}button.engrave-pick-item.active .engrave-pick-value{color:color-mix(in srgb,#f3d8c6 75%,var(--muted))}.engrave-fields{display:flex;flex-direction:column;gap:.65rem;margin-top:.55rem}.engrave-field{display:flex;flex-direction:column;gap:.3rem}.engrave-field-label{font-size:.78rem;color:var(--ink)}.field-inline-error{font-size:.68rem;font-weight:600;color:var(--danger);white-space:nowrap;flex-shrink:0}.engrave-field.invalid .field-input{border-color:var(--danger)}.engrave-field.invalid .field-input:focus{outline-color:color-mix(in srgb,var(--danger) 55%,transparent);border-color:var(--danger)}.personalise-next{margin-top:.85rem;width:100%;border:1px solid var(--accent);background:color-mix(in srgb,var(--accent) 18%,#1a2220);color:#f3d8c6;border-radius:8px;padding:.65rem .75rem;font:inherit;font-size:.9rem;font-weight:600;cursor:pointer}.personalise-next:hover:not(:disabled){background:color-mix(in srgb,var(--accent) 28%,#1a2220)}.personalise-next:disabled{opacity:.4;cursor:not-allowed}.personalise-back{margin-top:.75rem;align-self:flex-start;padding:0}.personalise-summary{margin-top:.85rem}.personalise-summary-head{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem;margin-bottom:.45rem}.personalise-summary-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}.personalise-summary-item{display:flex;flex-direction:column;gap:.15rem;padding:.7rem .85rem;border:1px solid color-mix(in srgb,var(--accent) 40%,var(--panel-edge));border-radius:8px;background:color-mix(in srgb,var(--accent) 10%,#1a2220)}.personalise-summary-label{font-size:.7rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:color-mix(in srgb,#f3d8c6 70%,var(--muted))}.personalise-summary-value{font-size:.95rem;font-weight:500;color:#f3d8c6;line-height:1.3;overflow-wrap:anywhere}.personalise-edit{flex-shrink:0;padding:0}.label-heading{display:flex;align-items:center;justify-content:space-between;gap:.4rem;min-height:1.1rem}.char-count{font-size:.68rem;color:var(--muted);white-space:nowrap;flex-shrink:0}.char-count.at-limit{color:var(--danger)}.checkout-back{align-self:flex-start;padding:0}.check-label.big{font-size:.95rem}details.advanced{border:1px solid var(--panel-edge);border-radius:var(--radius);background:#121816}details.advanced summary{padding:.65rem .85rem;cursor:pointer;color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.08em}details.advanced .controls{padding:0 .75rem .85rem}details.advanced>button.secondary{display:block;width:calc(100% - 1.5rem);margin:0 .75rem .85rem}.brand-mark{margin:0;font-family:"Instrument Serif",Georgia,serif;font-size:2.35rem;font-weight:400;letter-spacing:-.02em;line-height:1}.brand-mark.small{font-size:1.4rem}.brand-sub{margin:.45rem 0 0;color:var(--muted);font-size:.9rem}.dropzone{border:1.5px dashed color-mix(in srgb,var(--muted) 55%,transparent);border-radius:var(--radius);padding:1.1rem;text-align:center;background:color-mix(in srgb,var(--panel) 70%,#0a0e0c);transition:border-color .15s,background .15s}.dropzone.big{padding:3rem 1.5rem;border-radius:calc(var(--radius) * 2)}.dropzone.big p{font-size:1.1rem;margin-bottom:1.25rem}.dropzone.over{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--panel))}.dropzone p{margin:0 0 .7rem;color:var(--muted);font-size:.92rem}.file-btn{display:inline-block;cursor:pointer;padding:.45rem .9rem;border:none;border-radius:999px;background:var(--accent);color:#1a100c;font:inherit;font-weight:600;font-size:.85rem}.file-btn:hover{background:color-mix(in srgb,var(--accent) 85%,white)}.file-input-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;opacity:0;pointer-events:none}.controls{display:flex;flex-direction:column;gap:.65rem}.design-section{border:1px solid var(--panel-edge);border-radius:10px;background:#151c1a;transition:opacity .2s,border-color .2s}.design-section.locked{opacity:.38;pointer-events:none}.design-section.current{opacity:1;border-color:color-mix(in srgb,var(--accent) 45%,var(--panel-edge))}.design-section.done{opacity:.92}.design-section-head{display:flex;align-items:center;gap:.65rem;width:100%;padding:.7rem .75rem;border:0;background:transparent;color:var(--ink);font:inherit;font-size:.88rem;font-weight:600;text-align:left;cursor:pointer}.design-section.locked .design-section-head{cursor:default}.design-num{display:inline-flex;align-items:center;justify-content:center;width:1.45rem;height:1.45rem;border-radius:999px;background:color-mix(in srgb,var(--accent) 22%,#1a2220);color:#f3d8c6;font-size:.75rem;font-weight:700;flex-shrink:0}.design-section.locked .design-num{background:#1a2220;color:var(--muted)}.design-title{line-height:1.2}.design-section-body{padding:0 .75rem .85rem}.nfc-url-reveal{display:grid;grid-template-rows:0fr;transition:grid-template-rows .35s ease}.nfc-url-reveal.open{grid-template-rows:1fr}.nfc-url-inner{overflow:hidden;min-height:0}.nfc-url-reveal.open .nfc-url-inner{padding-top:.75rem}fieldset{margin:0;border:1px solid var(--panel-edge);border-radius:var(--radius);padding:.65rem .75rem .85rem;background:#121816}legend{padding:0 .35rem;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em}.hint{margin:.55rem 0 0;font-size:.72rem;line-height:1.35;color:var(--muted)}.hint.tight{margin:.15rem 0 .65rem}label{display:grid;grid-template-columns:1fr auto;gap:.25rem .5rem;align-items:center;margin-top:.55rem;font-size:.82rem;color:var(--ink)}label input[type=range]{grid-column:1 / -1;width:100%;accent-color:var(--accent)}label span{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.78rem}.choice-row{display:grid;grid-template-columns:repeat(3,1fr);gap:.4rem}.choice-row.two{grid-template-columns:repeat(2,1fr)}button.choice{border:1px solid var(--panel-edge);background:#1a2220;color:var(--ink);border-radius:8px;padding:.85rem .3rem;min-height:2.85rem;font:inherit;font-size:.82rem;font-weight:500;cursor:pointer;transition:border-color .12s,background .12s,color .12s}button.choice:hover:not(:disabled){border-color:color-mix(in srgb,var(--accent) 55%,var(--panel-edge))}button.choice.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 18%,#1a2220);color:#f3d8c6}.swatch-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(3.6rem,1fr));gap:.4rem}button.swatch{display:flex;flex-direction:column;align-items:center;gap:.4rem;border:1px solid var(--panel-edge);background:#1a2220;color:var(--ink);border-radius:8px;padding:.5rem .25rem .45rem;font:inherit;cursor:pointer;transition:border-color .12s,background .12s}button.swatch:hover:not(:disabled){border-color:color-mix(in srgb,var(--accent) 55%,var(--panel-edge))}button.swatch.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,#1a2220)}.swatch-chip{width:1.55rem;height:1.55rem;border-radius:999px;background:var(--swatch);box-shadow:inset 0 0 0 1px color-mix(in srgb,#000 22%,transparent),0 0 0 1px color-mix(in srgb,#fff 8%,transparent)}.swatch-chip.glow{box-shadow:inset 0 0 0 1px color-mix(in srgb,#000 18%,transparent),0 0 10px color-mix(in srgb,var(--swatch) 70%,transparent)}.swatch-label{font-size:.68rem;color:var(--muted);line-height:1.1}button.swatch.active .swatch-label{color:#f3d8c6}button.swatch.sold-out{cursor:not-allowed;position:relative}button.swatch.sold-out:hover:not(:disabled),button.swatch.sold-out:disabled{border-color:var(--panel-edge);background:#1a2220}button.swatch.sold-out .swatch-chip{filter:grayscale(.6);opacity:.45;box-shadow:none}button.swatch.sold-out .swatch-label{opacity:.45}.sold-out-tag{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;transform:rotate(-24deg);font-size:.62rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--danger);white-space:nowrap;pointer-events:none;text-shadow:0 1px 2px rgba(0,0,0,.55)}.shape-row{display:grid;grid-template-columns:repeat(3,1fr);gap:.4rem}button.shape{border:1px solid var(--panel-edge);background:#1a2220;color:var(--ink);border-radius:8px;padding:.45rem .3rem;font:inherit;font-size:.8rem;cursor:pointer}button.shape.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 18%,#1a2220);color:#f3d8c6}.color-label{grid-template-columns:1fr auto}.check-label{display:flex;align-items:center;gap:.55rem;margin-top:.45rem;font-size:.82rem;cursor:pointer}.check-label input{width:1rem;height:1rem;accent-color:var(--accent);cursor:pointer}.color-label input[type=color]{width:2rem;height:1.6rem;border:none;background:transparent;padding:0;cursor:pointer}button.secondary{border:1px solid var(--panel-edge);border-radius:9px;padding:.7rem .9rem;font:inherit;font-weight:600;cursor:pointer;background:#24302b;color:var(--ink)}button.secondary:disabled{opacity:.45;cursor:not-allowed}.status{margin:0;font-size:.8rem;color:var(--ok)}.error{margin:0;font-size:.8rem;color:var(--danger)}.stage{position:relative;min-width:0;min-height:320px}.viewer{position:absolute;top:0;right:0;bottom:0;left:0}.viewer canvas{display:block;width:100%!important;height:100%!important}@media (max-width: 860px){.body-row{grid-template-columns:1fr;grid-template-rows:minmax(42vh,1fr) auto}.panel{border-left:none;border-top:1px solid var(--panel-edge);max-height:48vh}}.sheet-root{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:flex-end;justify-content:center}.sheet-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;border:none;padding:0;margin:0;background:color-mix(in srgb,#050807 62%,transparent);cursor:pointer;animation:fade-in .2s ease-out}.sheet-panel{position:relative;z-index:1;width:100%;max-width:440px;max-height:min(92vh,820px);overflow-y:auto;padding:.55rem 1.1rem 1.35rem;border-radius:18px 18px 0 0;background:color-mix(in srgb,var(--panel) 96%,#0a0e0c);border:1px solid var(--panel-edge);border-bottom:none;box-shadow:0 -12px 40px color-mix(in srgb,#000 45%,transparent);animation:sheet-up .32s cubic-bezier(.2,.85,.25,1)}.sheet-handle{width:2.4rem;height:.28rem;margin:.15rem auto .85rem;border-radius:999px;background:color-mix(in srgb,var(--muted) 45%,transparent)}@keyframes sheet-up{0%{opacity:.4;transform:translateY(100%)}to{opacity:1;transform:none}}@media (min-width: 861px){.sheet-root{align-items:center;padding:1.5rem}.sheet-panel{border-radius:16px;border-bottom:1px solid var(--panel-edge);max-height:min(88vh,760px);animation:fade-in-up .28s ease-out}.sheet-handle{display:none}}
