:root{--red:#e52a2f;--red-d:#b3121a;--teal:#35b5ae;--teal-d:#1f8f89;--yellow:#ffd23f;--pink:#ff4fa3;--purple:#6b2bd9;--night:#1b0b3f;--ink:#24163f;--muted:#6a5f80;--paper:#fffaf3;--font-fun:'Fredoka','Rubik',system-ui,sans-serif;--font:'Rubik',system-ui,sans-serif}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{overflow-x:clip}
body{margin:0;font-family:var(--font);color:var(--ink);background:radial-gradient(600px 400px at 90% 0,rgba(53,181,174,.12),transparent 70%),radial-gradient(600px 400px at 0 10%,rgba(255,79,163,.1),transparent 70%),var(--paper);min-height:100svh;-webkit-font-smoothing:antialiased}
button{font:inherit;cursor:pointer}
:focus-visible{outline:3px solid var(--yellow);outline-offset:3px;border-radius:10px}
.t-top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;position:sticky;top:0;z-index:10;background:rgba(255,250,243,.9);backdrop-filter:blur(10px)}
.t-logo{height:44px;width:auto;display:block}
.t-back{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:#fff;box-shadow:0 4px 14px rgba(40,15,90,.1);text-decoration:none;color:var(--night);font-size:1.3rem}
.t-step{min-width:40px;text-align:center;font-weight:700;color:var(--muted)}
main{width:min(1100px,100% - 32px);margin:0 auto;padding-bottom:40px}
h1{font-family:var(--font-fun);font-size:clamp(1.6rem,4vw,2.3rem);color:var(--night);margin:10px 0 4px;text-align:center}
h2{font-family:var(--font-fun);font-size:1.3rem;margin:22px 0 10px;color:var(--night)}
.hint{text-align:center;color:var(--muted);margin:0 0 14px;font-size:1.05rem}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:999px;padding:13px 22px;font-family:var(--font-fun);font-weight:600;font-size:1.05rem;text-decoration:none;transition:transform .15s;white-space:nowrap;color:var(--ink)}
.btn:active{transform:scale(.97)}
.btn[disabled]{opacity:.5;cursor:not-allowed}
.btn-red{background:linear-gradient(180deg,#ff4a4f,var(--red));color:#fff;box-shadow:0 5px 0 var(--red-d)}
.btn-green{background:linear-gradient(180deg,#3ee07a,#1fb85a);color:#fff;box-shadow:0 5px 0 #138a41}
.btn-ghost{background:#fff;border:2px solid #e8def7;color:var(--night)}
.btn-big{padding:16px 30px;font-size:1.2rem}
.full{width:100%;margin-top:16px}
.btns{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:16px 0}
.privacy{text-align:center;font-size:.92rem;color:var(--muted)}

/* camera */
.cam{position:relative;width:min(420px,100%);aspect-ratio:3/4;margin:0 auto;border-radius:28px;overflow:hidden;background:#1b0b3f;box-shadow:0 18px 40px rgba(40,15,90,.22);touch-action:none}
.cam video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}
.cam img{position:absolute;left:50%;top:50%;max-width:none;transform-origin:0 0;user-select:none;-webkit-user-drag:none;cursor:grab}
.oval{position:absolute;left:50%;top:44%;width:62%;aspect-ratio:1/1.32;transform:translate(-50%,-50%);border-radius:50%;box-shadow:0 0 0 2000px rgba(27,11,63,.55);outline:4px dashed rgba(255,255,255,.9);outline-offset:2px;pointer-events:none}
.oval::after{content:"";position:absolute;inset:-14px;border-radius:50%;border:3px solid var(--yellow);opacity:.0;animation:ring 2s ease-in-out infinite}
@keyframes ring{50%{opacity:.8;transform:scale(1.03)}}
.cam-msg{position:absolute;inset-inline:12px;bottom:14px;text-align:center;color:#fff;font-weight:600;text-shadow:0 2px 6px rgba(0,0,0,.6);pointer-events:none}
.zoom-row{display:flex;align-items:center;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:12px}
.zoom-row input{width:200px}
.small{font-size:.85rem;color:var(--muted)}
.desk-qr{display:flex;gap:16px;align-items:center;justify-content:center;margin:24px auto 0;background:#fff;border-radius:22px;padding:14px 18px;width:max-content;max-width:100%;box-shadow:0 8px 24px rgba(40,15,90,.08)}
.desk-qr .qr{width:110px}
.qr svg{width:100%;height:auto;display:block}

/* result */
.result-wrap{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:28px;align-items:start;margin-top:12px}
.stage{position:sticky;top:76px;text-align:center}
#out{width:100%;max-width:480px;height:auto;aspect-ratio:1000/1450;object-fit:contain;border-radius:26px;background:#fff;box-shadow:0 18px 40px rgba(40,15,90,.18);touch-action:none;cursor:grab}
.stage-hint{color:var(--muted);font-size:.88rem;margin-top:8px}
.panel h1{text-align:start}
.tune{background:#fff;border-radius:20px;padding:14px 16px;box-shadow:0 8px 24px rgba(40,15,90,.07);display:grid;gap:10px}
.tune label{display:flex;align-items:center;gap:12px;font-weight:600}
.tune label span{width:60px}
.tune input[type=range]{flex:1;accent-color:var(--red)}
.tune-btns{display:flex;gap:8px;flex-wrap:wrap}
.panel .btns{justify-content:flex-start}
.chips{display:flex;gap:8px;overflow-x:auto;padding-bottom:6px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;border:2px solid #ece4ff;background:#fff;color:var(--ink);padding:7px 14px;border-radius:999px;font-weight:500;font-size:.95rem}
.chip[aria-pressed="true"]{background:var(--purple);border-color:var(--purple);color:#fff}
.search{width:100%;margin:8px 0 12px;border:2px solid #ece4ff;border-radius:999px;padding:11px 18px;font:inherit;background:#fff}
.picker{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:10px;max-height:460px;overflow:auto;padding:4px}
.picker{scrollbar-gutter:stable}
.pick{border:3px solid transparent;padding:0;border-radius:16px;background:radial-gradient(circle at 50% 35%,#fff,hsl(var(--h) 90% 88%));aspect-ratio:3/4;overflow:hidden;transition:transform .15s}
.pick img{width:100%;height:100%;object-fit:contain;mix-blend-mode:multiply;padding:6%}
.pick:hover{transform:translateY(-3px)}
.pick.on{border-color:var(--red);box-shadow:0 6px 16px rgba(229,42,47,.3)}
.more{grid-column:1/-1;border:0;background:none;color:var(--purple);font-weight:700;padding:10px}
.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%,120px);z-index:40;background:var(--night);color:#fff;padding:12px 22px;border-radius:999px;font-weight:500;transition:transform .35s}
.toast.on{transform:translate(-50%,0)}
@media (max-width:820px){
  .result-wrap{grid-template-columns:1fr}
  .stage{position:static}
  #out{max-width:100%}
  .panel h1{text-align:center}
  .panel .btns{justify-content:center}
  .picker{max-height:none}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
