    :root {
      --ink:#503b43; --muted:#907b83; --pink:#ffcbd7; --peach:#ffdfc6;
      --yellow:#ffe89e; --mint:#d5f0df; --lilac:#e7dcff; --blue:#d9edff;
      --cream:#fffaf6; --line:#f0e0dc; --shadow:0 18px 48px rgba(95,62,75,.12);
    }
    *{box-sizing:border-box}
    html{scroll-behavior:smooth}
    body{margin:0;min-height:100vh;color:var(--ink);font-family:Nunito,system-ui,sans-serif;background:
      radial-gradient(circle at 0% 8%,#ffe2e9 0,transparent 22rem),
      radial-gradient(circle at 100% 18%,#fff0c5 0,transparent 22rem),#fffaf7}
    button,input,textarea,select{font:inherit}
    button{cursor:pointer}
    .page{width:min(100% - 26px,640px);margin:auto;padding:16px 0 48px}
    .hero{position:relative;overflow:hidden;min-height:440px;padding:24px 20px 28px;text-align:center;border-radius:32px;
      background:linear-gradient(145deg,#ffe5e7 0%,#fff0cf 48%,#e4efff 100%);box-shadow:var(--shadow);border:1px solid #fff}
    .hero:before,.hero:after{content:"";position:absolute;border-radius:50%;pointer-events:none}
    .hero:before{width:170px;height:170px;background:#fff8;left:-80px;bottom:-95px}
    .hero:after{width:130px;height:130px;background:#fff7;right:-55px;top:95px}
    .topline{font-size:.72rem;font-weight:1000;letter-spacing:.16em;text-transform:uppercase;color:#a57982}
    h1{font-size:clamp(2.5rem,11vw,4rem);line-height:.94;letter-spacing:-.045em;margin:10px 0 8px;font-weight:1000;color:#694c59}
    .hero-sub{max-width:340px;margin:0 auto;color:#886d76;font-weight:800}
    .noah-avatar{width:132px;height:132px;margin:20px auto 12px;border-radius:42% 58% 48% 52%;display:grid;place-items:center;
      background:linear-gradient(145deg,#fff,#ffe7c8);border:6px solid #fff;box-shadow:0 12px 26px #a9787130;position:relative;z-index:1;overflow:hidden}
    .noah-avatar img{width:100%;height:100%;object-fit:cover}
    .avatar-fallback{font-size:4.8rem}
    .age-badge{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:99px;background:#fff9;color:#8d6572;font-size:.8rem;font-weight:1000}
    .floaty{position:absolute;z-index:0;font-size:2rem;animation:float 4s ease-in-out infinite}
    .f1{left:8%;top:23%;animation-delay:-1s}.f2{right:9%;top:17%;animation-delay:-2s}.f3{left:16%;bottom:17%;animation-delay:-.5s}.f4{right:15%;bottom:15%;animation-delay:-2.7s}
    @keyframes float{0%,100%{transform:translateY(0) rotate(-5deg)}50%{transform:translateY(-13px) rotate(7deg)}}
    .tap-hint{font-size:.76rem;color:#a17c85;font-weight:900;margin:12px 0 0}
    .card{margin-top:17px;padding:21px;background:#ffffffed;border:1px solid var(--line);border-radius:25px;box-shadow:0 10px 32px #7a56600d}
    .section-head{display:flex;align-items:center;gap:11px;margin-bottom:5px}
    .section-icon{width:43px;height:43px;border-radius:15px;display:grid;place-items:center;font-size:1.45rem;background:#fff0d8}
    h2{margin:0;font-size:1.25rem;font-weight:1000}
    .sub{margin:0 0 16px 54px;color:var(--muted);font-size:.86rem;font-weight:700}
    label{display:block;margin:14px 0 7px;font-size:.9rem;font-weight:1000}
    input,textarea,select{width:100%;padding:14px 15px;border:1.5px solid #eddfdc;border-radius:15px;background:#fffdfa;color:var(--ink);outline:none}
    input:focus,textarea:focus,select:focus{border-color:#dc9cad;box-shadow:0 0 0 4px #faeaf0}
    textarea{min-height:105px;resize:vertical}
    .hint{display:flex;justify-content:space-between;gap:8px;margin-top:6px;color:#a48e94;font-size:.75rem;font-weight:800}
    .primary,.wa-button,.soft-button{display:flex;width:100%;justify-content:center;align-items:center;gap:9px;border:0;border-radius:16px;padding:15px 17px;font-weight:1000;text-decoration:none}
    .primary{margin-top:18px;color:#684a4d;background:linear-gradient(120deg,#ffdf9e,#ffcbd9);box-shadow:0 6px 0 #e9b5bb;transition:transform .15s}
    .primary:active{transform:translateY(3px);box-shadow:0 3px 0 #e9b5bb}
    .primary:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}
    .soft-button{background:#f7edf1;color:#805f6b}
    .error{display:none;margin-top:11px;padding:11px 13px;border-radius:13px;background:#fff0ef;color:#a34c55;font-size:.84rem;font-weight:900}
    .mission{display:flex;gap:9px;align-items:center;padding:12px 13px;border-radius:15px;background:#f2f8ff;color:#66809b;font-size:.8rem;font-weight:900;margin-top:13px}
    .game-intro{text-align:center}
    .game-emoji{font-size:3.7rem;display:block;animation:bob 2s ease-in-out infinite}
    @keyframes bob{0%,100%{transform:translateY(0) rotate(-5deg)}50%{transform:translateY(-8px) rotate(5deg)}}
    .gift-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:20px 0 8px}
    .gift{border:2px solid #f3d8ca;border-radius:20px;padding:13px 5px 12px;background:linear-gradient(160deg,#fff5e9,#ffe0d9);box-shadow:0 6px 0 #eac9c1;transition:transform .18s,filter .18s;min-width:0}
    .gift:nth-child(2){background:linear-gradient(160deg,#f8f0ff,#e9ddff);border-color:#dfd0f2;box-shadow:0 6px 0 #d4c4e9}
    .gift:nth-child(3){background:linear-gradient(160deg,#f0fff5,#d8f0df);border-color:#cce7d4;box-shadow:0 6px 0 #c0ddc9}
    .gift:hover{transform:translateY(-5px) rotate(-2deg)}
    .gift:active{transform:scale(.95)}
    .gift:disabled{cursor:default;filter:grayscale(.25);opacity:.75}
    .gift.selected{outline:4px solid #ffd16e;transform:translateY(-6px) scale(1.04)}
    .gift .emoji{display:block;font-size:clamp(2.6rem,13vw,3.7rem);line-height:1.2}
    .gift small{display:block;margin-top:5px;color:#8b6d76;font-weight:1000}
    .game-note{text-align:center;color:#9c858c;font-size:.77rem;font-weight:800}
    .result{text-align:center}
    .result .amount{font-size:clamp(2.7rem,13vw,4rem);font-weight:1000;color:#ad762b;line-height:1.1;margin:10px 0}
    .voucher{margin:17px 0 8px;padding:15px;border:2px dashed #e6bf79;border-radius:18px;background:#fff9e9}
    .voucher-code{font-size:1.3rem;letter-spacing:.13em;font-weight:1000;color:#805a2d;overflow-wrap:anywhere}
    .wa-button{margin-top:13px;color:#fff;background:#20b866}
    .wall-list{display:grid;gap:10px}
    .wish{padding:14px;border-radius:17px;background:#fff9f7;border:1px solid #f0e3e0}
    .wish-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start;margin-bottom:7px}
    .wish-name{font-weight:1000}
    .place{padding:5px 9px;border-radius:99px;background:#f3eafa;color:#8b6d9b;font-size:.67rem;font-weight:1000;white-space:nowrap}
    .wish p{margin:0;color:#806e75;font-size:.88rem;line-height:1.5;overflow-wrap:anywhere}
    .empty{text-align:center;padding:20px 8px;color:#a18c91}
    .gallery-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
    .photo-link{position:relative;display:block;overflow:hidden;border-radius:18px;aspect-ratio:4/3;background:linear-gradient(135deg,#ffe6e9,#e8e1ff);border:1px solid #f0e1e5;text-decoration:none;color:#886d76}
    .photo-link img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s}
    .photo-link:hover img{transform:scale(1.06)}
    .photo-placeholder{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;font-weight:1000;font-size:.8rem}
    .photo-placeholder b{font-size:2rem}
    .gallery-caption{margin-top:9px;text-align:center;color:#a18a91;font-size:.76rem;font-weight:800}
    .progress-dots{display:flex;justify-content:center;gap:7px;margin:18px 0 0}
    .progress-dots span{width:8px;height:8px;border-radius:99px;background:#e9d9db}
    .progress-dots span.active{width:22px;background:#e9aebc}
    .hidden{display:none!important}
    .footer{text-align:center;color:#b39ca2;font-size:.75rem;margin-top:23px}
    .toast{position:fixed;z-index:10;left:50%;bottom:18px;transform:translateX(-50%);max-width:calc(100% - 30px);padding:12px 16px;border-radius:99px;background:#604954;color:#fff;font-size:.83rem;font-weight:900;box-shadow:var(--shadow)}
    .confetti-piece{position:fixed;top:-20px;z-index:20;pointer-events:none;font-size:20px;animation:fall 2.4s linear forwards}
    @keyframes fall{to{transform:translateY(110vh) rotate(720deg);opacity:0}}
    @media(min-width:600px){.page{padding-top:28px}.hero{min-height:465px}.card{padding:25px}}
    @media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;scroll-behavior:auto!important}}
  
    /* Noah's sky-blue palette override */
    body { color:#344b70; background:
      radial-gradient(circle at 0% 8%,#d9edff 0,transparent 22rem),
      radial-gradient(circle at 100% 18%,#e4e7ff 0,transparent 22rem),
      linear-gradient(180deg,#f2f9ff 0%,#eaf4ff 48%,#f5f8ff 100%); }
    .hero { background:linear-gradient(145deg,#d9efff 0%,#cbdcff 48%,#e4e8ff 100%); }
    .noah-avatar { background:linear-gradient(145deg,#ffffff,#dceeff); box-shadow:0 12px 26px #648bb530; }
    .card { background:#fafdffed; border-color:#dceafa; }
    input,textarea,select { background:#f8fcff; border-color:#d8e7f6; color:#344b70; }
    input:focus,textarea:focus,select:focus { border-color:#83b9e8; box-shadow:0 0 0 4px #e5f2ff; }
    .section-icon { background:#e4f2ff; }
    .primary { color:#405d83; background:linear-gradient(120deg,#cceaff,#d9dfff); box-shadow:0 6px 0 #abc9e8; }
    .primary:active { box-shadow:0 3px 0 #abc9e8; }
    .mission { background:#eaf5ff; color:#587da6; }
    .gift { border-color:#c8e2f8; background:linear-gradient(160deg,#f3faff,#cfe7ff); box-shadow:0 6px 0 #b7d5ef; }
    .gift:nth-child(2) { background:linear-gradient(160deg,#f1f4ff,#d9e0ff); border-color:#d1daf5; box-shadow:0 6px 0 #c2cdef; }
    .gift:nth-child(3) { background:linear-gradient(160deg,#effaff,#d2edf5); border-color:#c6e4ee; box-shadow:0 6px 0 #b7dbe8; }
    .gift small { color:#58779e; }
    .gift.selected { outline-color:#8fc8f5; }
    .result .amount { color:#477db5; }
    .voucher { border-color:#91bee5; background:#edf7ff; }
    .voucher-code { color:#3f6f9f; }
    .wish { background:#f6fbff; border-color:#dceafa; }
    .place { background:#e8f2ff; color:#5e7fa9; }
    .wish p { color:#647f9f; }
    .photo-link { background:linear-gradient(135deg,#dceeff,#e4e7ff); border-color:#dceafa; color:#58779e; }
    .gallery-caption,.tap-hint,.game-note,.footer { color:#7893b3; }
    .wish-rain { position:fixed; inset:0; overflow:hidden; pointer-events:none; z-index:4; }
    
    .wish-float { position:absolute; top:-120px; width:clamp(68px,19vw,112px); min-height:94px;
      padding:8px 7px 9px; display:flex; flex-direction:column; align-items:center; justify-content:flex-start;
      border:1px solid #ffffffed; border-radius:18px; background:linear-gradient(145deg,#fffffffa,#dceefff2);
      box-shadow:0 8px 20px #638db526; color:#55769c; font-size:clamp(.56rem,2.2vw,.7rem);
      font-weight:800; line-height:1.25; text-align:center; overflow-wrap:anywhere;
      animation:wishFall var(--fall-time,17s) linear infinite; opacity:0; }
    .wish-float.left { left:2px; }
    .wish-float.right { right:2px; background:linear-gradient(145deg,#fffffffa,#e5e9fff2); color:#6875a3; }
    .wish-animal { width:34px;height:34px;display:grid;place-items:center;margin:0 auto 4px;
      border-radius:50%;background:linear-gradient(145deg,#fff,#d8ecff);border:2px solid #fff;
      box-shadow:0 2px 8px #648ab52b;font-size:1.25rem; }
    .wish-float strong { display:block; max-width:100%; font-size:.65rem; margin-bottom:3px; color:#3f628e; }
    .wish-snippet { display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden; }
    @keyframes wishFall {
      0%{transform:translateY(-8vh) rotate(-5deg);opacity:0}
      8%{opacity:.9}
      88%{opacity:.85}
      100%{transform:translateY(115vh) rotate(7deg);opacity:0}
    }
    @media(max-width:420px) {
      .wish-float { width:66px; min-height:82px; padding:6px 5px; font-size:.54rem; border-radius:13px; }
      .wish-float strong { font-size:.58rem; }
      .wish-animal { width:28px;height:28px;font-size:1.05rem; }
    }
    @media(min-width:600px) {
      .wish-float.left { left:max(8px,calc((100vw - 720px)/2)); }
      .wish-float.right { right:max(8px,calc((100vw - 720px)/2)); }
    }


    /* Auto-sliding Noah moments carousel */
    .moments-slider{position:relative;display:flex;align-items:center;gap:8px;margin:12px 0 0}
    .moments-window{overflow:hidden;flex:1;border-radius:22px}
    .moments-track{display:flex;transition:transform .65s cubic-bezier(.22,.75,.25,1);will-change:transform}
    .photo-link{flex:0 0 100%;width:100%;aspect-ratio:4/3;border-radius:22px;border:3px solid #fff;box-shadow:0 8px 22px #5b8dc526}
    .photo-link img{object-fit:cover}
    .slider-arrow{flex:0 0 34px;width:34px;height:34px;border:0;border-radius:50%;background:linear-gradient(145deg,#6ebaff,#4c8fe8);color:#fff;font-size:1.65rem;line-height:1;box-shadow:0 4px 10px #397cc633;cursor:pointer}
    .slider-dots{display:flex;justify-content:center;gap:7px;margin:13px 0 0}
    .slider-dots button{width:8px;height:8px;padding:0;border:0;border-radius:99px;background:#b9d8f7;transition:all .25s;cursor:pointer}
    .slider-dots button.active{width:22px;background:#438fe7}
    #heroPhoto{object-position:50% 82%;transform:none}
    @media(max-width:380px){.slider-arrow{flex-basis:30px;width:30px;height:30px}.moments-slider{gap:6px}}


    /* Bingkai bulat lucu seperti versi sebelumnya */
    .noah-avatar{width:156px;height:156px;border-radius:50%;overflow:hidden;background:#dceeff;padding:0}
    .noah-avatar img{width:100%;height:100%;object-fit:cover;object-position:center;transform:none;border-radius:50%}

/* Tambahan integrasi backend (menggantikan style inline & state baru) */
.sub-tight{margin:5px 0 0}
.result-emoji{font-size:2.2rem}
.voucher-label{font-size:.7rem;font-weight:1000;color:#a68b66;margin-bottom:5px}
.hero-title-line{display:block}
.event-date{margin:10px 0 0;font-size:.85rem;font-weight:900;color:#587da6}
.more-button{margin-top:12px}
.thanks{text-align:center}
.thanks .big{font-size:2.6rem}
.wa-note{margin-top:13px}
.notice{margin:0 0 4px;padding:11px 13px;border-radius:13px;background:#fff6e0;color:#8a6420;font-size:.84rem;font-weight:900;line-height:1.4}

/* Dock: tautan beranda + sisa voucher, selalu terlihat */
.page{padding-bottom:104px}
.toast{bottom:84px}
.dock{position:fixed;z-index:9;left:50%;bottom:12px;transform:translateX(-50%);display:flex;gap:8px;width:min(100% - 20px,480px)}
.dock-pill{display:flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:8px 13px;border-radius:99px;border:2px solid #fff;
  font-size:.78rem;font-weight:900;line-height:1.15;text-align:center;text-decoration:none;box-shadow:0 8px 22px #4f7fb838}
.dock-home{flex:0 0 auto;color:#405d83;background:linear-gradient(120deg,#cceaff,#d9dfff);transition:transform .15s}
.dock-home:hover{transform:translateY(-2px) rotate(-2deg)}
.dock-home:active{transform:scale(.96)}
.dock-stock{flex:1;min-width:0;color:#8a6420;background:linear-gradient(120deg,#fff6d8,#ffe9f0)}
.dock-stock[data-state="low"]{color:#9a4b2b;background:linear-gradient(120deg,#ffe9d6,#ffdfe6)}
.dock-stock[data-state="out"],.dock-stock[data-state="closed"]{color:#6c6a93;background:linear-gradient(120deg,#ecebfa,#e4efff)}
.dock-emoji{display:inline-block;font-size:1.2rem;animation:bob 2.2s ease-in-out infinite}
.dock-stock .dock-emoji{animation-delay:-.8s}
@media(max-width:380px){.dock-home span:last-child{display:none}.dock-pill{font-size:.72rem}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-iteration-count:1!important}}
