@font-face{font-family:Kartonka;src:url(/fonts/Ekartonka-Regular.otf) format("opentype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Caveat;src:url(/fonts/Caveat-Variable.ttf) format("truetype");font-weight:400 700;font-style:normal;font-display:swap}:root{--ink:#121212;--ink-soft:#6b6f76;--card:#c9ccd1;--page-top:#eef1f5;--page:#ffffff;--accent:#121212;--radius-card:24px;--radius-btn:20px;--safe:env(safe-area-inset-bottom,0px)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}body,html{margin:0;padding:0}body{min-height:100dvh;color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:linear-gradient(180deg,var(--page-top) 0,var(--page) 220px);background-attachment:fixed;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}button{font-family:inherit;cursor:pointer;border:none;background:none}.squircle{display:inline-flex;align-items:center;justify-content:center;background:var(--accent);color:#fff;border-radius:var(--radius-btn);box-shadow:0 6px 16px rgba(0,0,0,.22);transition:transform .12s ease,opacity .12s ease}.squircle:active{transform:scale(.94)}.squircle:disabled{opacity:.5;pointer-events:none}.app{height:100dvh;max-width:480px;margin:0 auto;padding:18px 16px calc(14px + var(--safe));display:flex;flex-direction:column;gap:14px;overflow:hidden}.header{flex:0 0 auto}.brand-row{display:flex;align-items:center;gap:12px}.brand-col{display:flex;flex-direction:column;min-width:0}.brand-name{margin:0;font-size:28px;font-weight:800;letter-spacing:-.025em;line-height:1.05}.slogan{margin:4px 0 0;color:var(--ink-soft);font-size:14px;font-weight:500;line-height:1.3}.main{flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center}.preview{position:relative;height:100%;aspect-ratio:1080/1920;max-width:100%;border-radius:var(--radius-card);overflow:hidden;background:var(--card);box-shadow:0 12px 34px rgba(0,0,0,.14)}.preview-img{width:100%;height:100%;object-fit:cover;display:block;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.caption-box{position:absolute;display:flex;align-items:center;justify-content:center;overflow:hidden;pointer-events:none}.caption-text{text-align:center;width:100%;word-break:break-word}.ctrl-cluster{position:absolute;top:3.2%;right:3.4%;display:flex;gap:10px}.ctrl{display:flex;flex-direction:column;align-items:center;gap:5px}.ctrl-label{font-size:11px;font-weight:600;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.55);letter-spacing:.01em}.ctrl .squircle{width:38px;height:38px;border-radius:50%}.ctrl-photo{position:absolute;left:3.4%;bottom:3%}.ctrl-photo .squircle{width:42px;height:42px;border-radius:50%}.save-row{flex:0 0 auto;display:flex;gap:10px}.save-btn{flex:1 1;min-width:0;background:var(--accent);color:#fff;border-radius:var(--radius-btn);padding:18px 12px;font-size:17px;font-weight:700;display:flex;align-items:center;justify-content:center;gap:9px;white-space:nowrap;box-shadow:0 8px 22px rgba(0,0,0,.2);transition:transform .12s ease,opacity .12s ease}.save-btn:active{transform:scale(.985)}.save-btn:disabled{opacity:.6;pointer-events:none}.save-btn--light{background:#fff;color:var(--ink);border:1.5px solid #e3e5e9;box-shadow:0 4px 14px rgba(0,0,0,.08)}.save-btn--light .spinner{border-color:#121212 rgba(18,18,18,.25) rgba(18,18,18,.25)}.spinner{width:20px;height:20px;border:2.5px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}.footer{flex:0 0 auto;text-align:center;color:var(--ink-soft);font-size:13px}.footer a{color:var(--ink);text-decoration:none;font-weight:600}.toast{left:50%;bottom:calc(24px + var(--safe));transform:translateX(-50%);background:#121212;color:#fff;padding:12px 18px;border-radius:14px;font-size:14px;font-weight:500;box-shadow:0 8px 24px rgba(0,0,0,.3);z-index:80}.sheet-backdrop,.toast{position:fixed;animation:fade .18s ease}.sheet-backdrop{inset:0;background:rgba(18,20,24,.55);display:flex;align-items:flex-end;justify-content:center;z-index:60}.sheet{width:100%;max-width:480px;background:#fff;border-radius:28px 28px 0 0;padding:10px 20px calc(24px + var(--safe));box-shadow:0 -10px 40px rgba(0,0,0,.22);animation:slideup .26s cubic-bezier(.22,1,.36,1);max-height:88dvh;overflow:auto}.sheet-handle{width:44px;height:5px;border-radius:3px;background:#d3d6db;margin:4px auto 14px}.sheet-title{font-size:24px;font-weight:800;letter-spacing:-.02em}.sheet-sub{color:var(--ink-soft);font-size:14px;margin:2px 0 18px}.photo-grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:14px;gap:14px}.photo-card{position:relative;aspect-ratio:1080/1920;border-radius:18px;overflow:hidden;border:3px solid transparent;background:#eef0f2;padding:0;transition:transform .12s ease}.photo-card:active{transform:scale(.97)}.photo-card.selected{border-color:#121212}.photo-card img{width:100%;height:100%;object-fit:cover;display:block}.photo-card .check{position:absolute;top:8px;right:8px;width:30px;height:30px;border-radius:50%;background:#121212;color:#fff;display:flex;align-items:center;justify-content:center;font-size:16px}.photo-card .cap{position:absolute;left:0;right:0;bottom:0;padding:22px 10px 9px;background:linear-gradient(transparent,rgba(0,0,0,.6));color:#fff;font-size:14px;font-weight:600;text-align:left}.editor{width:100%;min-height:130px;border-radius:16px;border:2px solid #e6e8eb;padding:14px 16px;font-family:Kartonka,Caveat,cursive;font-size:24px;line-height:1.15;color:#1a1512;resize:none;outline:none;transition:border-color .15s ease}.editor:focus{border-color:#121212}.editor-actions{display:flex;gap:10px;margin-top:16px}.btn{flex:1 1;border-radius:16px;padding:16px;font-size:16px;font-weight:700;transition:transform .12s ease}.btn:active{transform:scale(.98)}.btn-primary{background:#121212;color:#fff}.btn-dice,.btn-ghost{background:#f0f1f3;color:#121212}.btn-dice{flex:0 0 auto;width:56px;font-size:22px}@keyframes spin{to{transform:rotate(1turn)}}@keyframes fade{0%{opacity:0}}@keyframes slideup{0%{transform:translateY(100%)}}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}