:root{color-scheme:light;--bg: #fbfafa;--card: #ffffff;--ink: #1e1a1b;--ink-2: #3d3638;--muted: #776e70;--line: rgba(30, 26, 27, .07);--dark: #2a2526;--dark-press: #161314;--danger: #c0283f;--font: "Plus Jakarta Sans", ui-sans-serif, system-ui, sans-serif;--r-xs: 8px;--r-sm: 14px;--r-md: 20px;--r-lg: 28px;--r-pill: 999px;--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 20px;--s6: 28px;--s7: 40px;--rim: 0 0 0 5px rgba(255, 255, 255, .85);--shadow: 0 1px 2px rgba(30, 26, 27, .04), 0 10px 30px -8px rgba(30, 26, 27, .1);--shadow-sm: 0 1px 2px rgba(30, 26, 27, .05), 0 4px 12px -4px rgba(30, 26, 27, .08);--ease: cubic-bezier(.2, .8, .2, 1);--t-fast: .12s;--t-med: .22s;--tabbar-h: 66px}.tone-pink{--ring: #f08aa6;--tone: #d23f69;--tone-soft: #ffe3ea;--wash-a: #ffd2dd;--wash-b: #fff0f3}.tone-blue{--ring: #7dbbea;--tone: #1b74b4;--tone-soft: #e1f0fc;--wash-a: #cfe7fb;--wash-b: #eef7fe}.tone-peach{--ring: #f6ac7a;--tone: #b0561a;--tone-soft: #ffeadb;--wash-a: #ffdcc4;--wash-b: #fff4ec}.tone-lilac{--ring: #f3a4a4;--tone: #b2414f;--tone-soft: #ffe6e4;--wash-a: #ffd9d6;--wash-b: #fff3f1}.tone-mint{--ring: #78cda4;--tone: #17744d;--tone-soft: #ddf3e8;--wash-a: #c9ecdb;--wash-b: #eef9f3}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html{-webkit-text-size-adjust:100%;overflow-y:scroll;scrollbar-gutter:stable}body{margin:0;background:var(--bg);color:var(--ink);font:500 1rem/1.5 var(--font);letter-spacing:0;word-spacing:.03em;min-height:100dvh;overscroll-behavior-y:none;-webkit-font-smoothing:antialiased}[hidden]{display:none!important}img{display:block;max-width:100%}h1,h2,h3,h4{margin:0;line-height:1.2;letter-spacing:-.01em}p{margin:0}button,input,textarea,select{font:inherit;color:inherit;letter-spacing:inherit}button{cursor:pointer;background:none;border:0;padding:0;text-align:inherit}button:disabled{cursor:not-allowed;opacity:.45}:focus-visible{outline:2.5px solid var(--ink);outline-offset:3px;border-radius:10px}code{background:#f1eeee;padding:1px 6px;border-radius:6px;font-size:.88em}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.app{max-width:520px;margin:0 auto;min-height:100dvh;position:relative}main{padding:env(safe-area-inset-top) var(--s5) calc(var(--tabbar-h) + env(safe-area-inset-bottom) + var(--s7))}main.no-tabbar{padding-bottom:calc(env(safe-area-inset-bottom) + var(--s4))}.screen{padding-top:var(--s4)}.page-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);margin:var(--s3) 0 var(--s5)}.page-head h1{font-size:1.6rem;font-weight:800}.sub{color:var(--muted);font-size:.88rem;font-weight:600;margin-top:2px}.row{display:flex;align-items:center}.gap{gap:var(--s3)}.gap-s{gap:var(--s2)}.grow{flex:1;min-width:0}.center{display:grid;place-items:center}.pad{padding:var(--s6)}.muted{color:var(--muted)}.list{display:grid;gap:var(--s3)}.section-head{display:flex;align-items:baseline;justify-content:space-between;margin:var(--s6) 2px var(--s3)}.section-head h2,.section-head h3{font-size:1.05rem;font-weight:700}.see-all{color:var(--muted);font-weight:600;font-size:.9rem;min-height:44px;padding:0 var(--s1)}.see-all:active{color:var(--ink)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);min-height:50px;padding:0 var(--s5);border-radius:var(--r-pill);background:var(--card);color:var(--ink);font-weight:700;font-size:.95rem;box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);transition:transform var(--t-fast) var(--ease),background var(--t-fast)}.btn:active:not(:disabled){transform:scale(.97);background:#f6f3f3}.btn.dark{background:var(--dark);color:#fff;box-shadow:0 1px #ffffff14 inset,0 6px 16px -6px #1e1a1b80}.btn.dark:active:not(:disabled){background:var(--dark-press)}.btn.block,.btn.big{width:100%}.btn.big{min-height:54px;font-size:1rem}.btn.small{min-height:44px;padding:0 var(--s4);font-size:.88rem}.btn.ghost{background:transparent;box-shadow:none;color:var(--ink-2)}.btn.danger{color:var(--danger);padding:0 var(--s4)}.icon-btn{display:inline-grid;place-items:center;width:44px;height:44px;border-radius:50%;color:var(--ink);transition:background var(--t-fast);flex:none}.icon-btn:active{background:#1e1a1b0f}.icon-btn.light{color:#fff}.icon-btn.light:active{background:#ffffff26}.link{color:var(--ink);font-weight:700;text-decoration:underline;text-underline-offset:3px;min-height:44px;padding:0 var(--s1)}.chip{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:0 14px;border-radius:var(--r-pill);background:var(--card);font-weight:600;font-size:.88rem;color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);white-space:nowrap;transition:transform var(--t-fast) var(--ease),background var(--t-fast)}.chip:active{transform:scale(.96)}.chip.on{background:var(--dark);color:#fff;box-shadow:none}.chip.dark{background:var(--dark);color:#fff;box-shadow:none;min-height:44px}.chip.success{background:#ddf3e8;color:#17744d;box-shadow:none;min-height:44px}.chips{display:flex;flex-wrap:wrap;gap:var(--s2)}.soft{position:relative;display:block;text-align:left;border-radius:var(--r-lg);padding:var(--s5);background:radial-gradient(110% 95% at 80% 85%,var(--wash-a, #ffd2dd) 0%,transparent 65%),radial-gradient(80% 70% at 15% 95%,var(--wash-b, #fff0f3) 0%,transparent 80%),var(--card);box-shadow:inset 0 0 0 5px #ffffffd9,inset 0 0 0 6px #1e1a1b08,var(--shadow);margin:0;width:100%;transition:transform var(--t-fast) var(--ease)}button.soft:active{transform:scale(.985)}.card{display:block;width:100%;text-align:left;background:var(--card);border-radius:var(--r-md);padding:var(--s4);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm)}button.card{transition:transform var(--t-fast) var(--ease)}button.card:active{transform:scale(.985)}.card-title{font-weight:700;font-size:1rem;overflow-wrap:anywhere;letter-spacing:-.01em}.meta{display:flex;flex-wrap:wrap;gap:2px 12px;color:var(--muted);font-size:.84rem;font-weight:600}.meta span{display:inline-flex;align-items:center;gap:4px}.meta.big{font-size:.92rem;flex-direction:column;gap:4px;margin-bottom:var(--s4)}.clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--ink-2);margin-top:2px;font-size:.94rem;font-weight:500}.prose{white-space:pre-wrap;margin-bottom:var(--s4);color:var(--ink-2)}.label{display:inline-flex;align-items:center;gap:6px;color:var(--tone);font-size:.74rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.label.pill{background:#ffffffd9;padding:6px 12px;border-radius:var(--r-pill);box-shadow:inset 0 0 0 1px var(--tone-soft)}.badge{display:inline-grid;place-items:center;flex:none;border-radius:50%;background:var(--card);color:var(--ink);box-shadow:0 0 0 4px #fff9,var(--shadow-sm)}.badge[class*=tone-]{color:var(--tone)}.tile{display:grid;place-items:center;width:46px;height:46px;flex:none;border-radius:var(--r-sm);background:var(--tone-soft);color:var(--tone)}.seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;background:#f1eeee;padding:4px;border-radius:var(--r-pill);margin-bottom:var(--s5)}.seg button{min-height:42px;border-radius:var(--r-pill);font-weight:700;font-size:.9rem;color:var(--muted);text-align:center;transition:background var(--t-med) var(--ease),color var(--t-med)}.seg button.on{background:var(--card);color:var(--ink);box-shadow:var(--shadow-sm)}.empty{text-align:center;padding:var(--s7) var(--s4);display:grid;justify-items:center;gap:var(--s3)}.empty-icon{display:grid;place-items:center;width:72px;height:72px;border-radius:50%;color:var(--tone);background:radial-gradient(circle at 70% 80%,var(--wash-a),var(--wash-b) 70%);box-shadow:0 0 0 6px #fff,var(--shadow);margin-bottom:var(--s2)}.empty h3{font-size:1.2rem;font-weight:800}.empty p{color:var(--muted);max-width:30ch}.empty .btn.big{max-width:320px}.empty .row{flex-wrap:wrap;justify-content:center}.note{background:#f4f1f1;border-radius:var(--r-sm);padding:var(--s3) var(--s4);font-size:.9rem;max-width:36ch}.error{color:var(--danger);font-weight:600;font-size:.9rem;max-width:36ch;overflow-wrap:anywhere}.disclaimer{color:var(--muted);font-size:.8rem;text-align:center;margin:var(--s6) 0}.spin{width:26px;height:26px;border-radius:50%;border:2.5px solid #ebe6e6;border-top-color:var(--ink);animation:spin .8s linear infinite;display:inline-block}.spin.small{width:18px;height:18px;border-width:2px}@keyframes spin{to{transform:rotate(360deg)}}.ph{position:relative;display:block;width:100%;aspect-ratio:1;overflow:hidden;background:#f1eeee;border-radius:var(--r-sm)}.ph img{width:100%;height:100%;object-fit:cover}button.ph{transition:transform var(--t-fast) var(--ease)}button.ph:active{transform:scale(.97)}.ph-gone{display:grid;place-items:center;font-size:.72rem;color:var(--muted);padding:var(--s2);text-align:center}.ph.more{display:grid;place-items:center;font-weight:800;color:var(--ink-2)}.ph.add{display:grid;place-items:center;color:var(--ink-2);background:#f6f3f3;box-shadow:inset 0 0 0 1.5px var(--line)}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.grid .ph{border-radius:var(--r-xs)}.grid.two{grid-template-columns:repeat(2,1fr);gap:var(--s2)}.grid.three{grid-template-columns:repeat(3,1fr);gap:var(--s2)}.ph-wrap{position:relative}.ph-x{position:absolute;top:-6px;right:-6px;width:28px;height:28px;border-radius:50%;background:var(--dark);color:#fff;display:grid;place-items:center}.ph-x:after{content:"";position:absolute;top:-8px;right:-8px;bottom:-8px;left:-8px}.home-top{display:flex;align-items:center;justify-content:space-between;margin:var(--s2) 0 var(--s5)}.pair{display:flex;min-height:44px;align-items:center}.pair .avatar+.avatar{margin-left:-10px}.avatar{display:grid;place-items:center;flex:none;border-radius:50%;overflow:hidden;background:var(--tone-soft);color:var(--tone);font-weight:800;font-size:.95rem;box-shadow:0 0 0 2.5px var(--bg)}.avatar img{width:100%;height:100%;object-fit:cover}.together{display:inline-flex;align-items:center;gap:var(--s2);min-height:44px;padding:5px 16px 5px 5px;background:var(--card);border-radius:var(--r-pill);font-weight:600;font-size:.9rem;box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm)}.together:active{transform:scale(.97)}.together-icon{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:#ffe3ea;color:#e2557c}.hero{padding:var(--s5) var(--s5) var(--s5)}.hero-top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s3)}.hero-q{font-size:1.4rem;font-weight:700;line-height:1.32;letter-spacing:-.015em;margin:var(--s4) 0 var(--s6);max-width:18ch;text-wrap:balance}.hl{font-style:normal;color:var(--tone)}.hero-note{display:flex;align-items:center;gap:6px;color:var(--ink-2);font-size:.88rem;font-weight:600;margin:calc(var(--s3) * -1) 0 var(--s4)}.answers{display:grid;gap:var(--s2);margin:calc(var(--s3) * -1) 0 var(--s4)}.answer{background:#fffc;border-radius:var(--r-sm);padding:10px 14px;font-size:.94rem;color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line)}.answer-who{display:block;font-size:.72rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-bottom:2px}.answer-wait{color:var(--muted);font-size:.88rem;font-weight:600;display:flex;align-items:center;gap:6px;padding-left:4px}.rec{display:flex;align-items:center;gap:var(--s4);padding:var(--s4) var(--s4) var(--s4) var(--s5);border-radius:var(--r-md)}.rec-body{flex:1;min-width:0;display:grid;gap:6px}.rec-text{font-weight:500;font-size:.95rem;line-height:1.4;color:var(--ink);text-wrap:pretty}.rec-meta{color:var(--muted);font-size:.82rem;font-weight:600}.rec-photo{width:56px;height:56px;flex:none;border-radius:50%;box-shadow:0 0 0 4px #ffffffb3}.sheet-q{font-size:1.15rem;font-weight:700;line-height:1.35;margin-bottom:var(--s4);letter-spacing:-.015em}.hist{display:grid;gap:var(--s2)}.hist-q{font-weight:700}.swipe-screen{display:flex;flex-direction:column;min-height:calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom) - var(--s4))}.swipe-screen .page-head{justify-content:flex-start;margin-left:-10px}.deck{position:relative;flex:1;min-height:360px;max-height:62dvh;margin:var(--s2) var(--s2) 0}.swipe-card{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;border-radius:var(--r-lg);padding:8px;box-shadow:0 1px 2px #1e1a1b0d,0 18px 40px -12px #1e1a1b40;touch-action:none;user-select:none;-webkit-user-select:none;will-change:transform}.swipe-card img{width:100%;height:100%;object-fit:cover;border-radius:22px;pointer-events:none;background:#f1eeee}.stamp{position:absolute;top:24px;padding:8px 16px;border-radius:var(--r-pill);font-weight:800;font-size:.85rem;letter-spacing:.08em;text-transform:uppercase;background:#fffffff2;box-shadow:var(--shadow-sm);pointer-events:none}.stamp-save{left:24px;color:#17744d}.stamp-skip{right:24px;color:var(--danger)}.stamp-fav{left:50%;top:auto;bottom:32px;transform:translate(-50%);color:#b0561a}.deck-count{text-align:center;color:var(--muted);font-weight:700;font-size:.84rem;margin:var(--s4) 0 var(--s3);font-variant-numeric:tabular-nums}.deck-actions{display:flex;justify-content:center;align-items:center;gap:var(--s4);padding-bottom:var(--s2)}.round{display:grid;place-items:center;width:62px;height:62px;border-radius:50%;background:#fff;box-shadow:inset 0 0 0 1px var(--line),var(--shadow);transition:transform var(--t-fast) var(--ease)}.round:active:not(:disabled){transform:scale(.9)}.round.undo,.round.fav{width:50px;height:50px}.round.skip{color:var(--danger)}.round.undo{color:var(--muted)}.round.fav{color:#b0561a}.round.save{color:#fff;background:var(--dark);box-shadow:0 8px 20px -6px #1e1a1b80}.upbar{background:var(--card);border-radius:var(--r-sm);padding:10px var(--s4);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);margin-bottom:var(--s2)}.upbar-text{display:flex;justify-content:space-between;align-items:center;font-weight:700;font-size:.88rem;min-height:28px}.progress{height:5px;background:#f1eeee;border-radius:3px;overflow:hidden;margin-top:6px}.progress span{display:block;height:100%;background:var(--dark);transition:width var(--t-med) var(--ease)}.viewer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#141112;display:flex;flex-direction:column;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}.viewer-top{display:flex;align-items:center;justify-content:space-between;padding:var(--s2);color:#fff}.viewer-date{font-weight:600;font-size:.88rem;opacity:.8}.viewer-img{flex:1;aspect-ratio:auto;background:transparent;border-radius:0}.viewer-img img{object-fit:contain}.viewer-nav{position:absolute;top:50%;width:44px;height:64px;display:grid;place-items:center;color:#fff;background:#ffffff14}.viewer-nav.l{left:0;border-radius:0 12px 12px 0}.viewer-nav.r{right:0;border-radius:12px 0 0 12px}.viewer-actions{display:flex;justify-content:space-around;padding:var(--s3) var(--s2)}.viewer-actions>*{display:grid;justify-items:center;gap:2px;color:#fff;font-size:.76rem;font-weight:600;min-width:64px;min-height:48px;text-decoration:none}.viewer-actions>*:active{opacity:.6}.date-card{display:flex;align-items:center;gap:var(--s2);padding:6px var(--s3) 6px 6px}.card-main{flex:1;min-width:0;display:flex;align-items:center;gap:var(--s3);padding:8px;border-radius:var(--r-sm);min-height:60px}.card-main:active{background:#f8f6f6}.hearts{display:flex;gap:2px;color:#ecd9de;margin-top:4px}.hearts button{display:grid;place-items:center}.hearts button:not(:disabled){min-width:44px;min-height:44px}.hearts button:disabled{opacity:1;cursor:default}.hearts .on{color:#e2557c}.picked{text-align:center;display:grid;justify-items:center;gap:var(--s2);padding:var(--s3) 0}.picked h3{font-size:1.35rem;font-weight:800;margin-top:var(--s2)}.fab{position:fixed;z-index:30;right:max(var(--s5),calc(50% - 260px + var(--s5)));bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + var(--s4));display:inline-flex;align-items:center;gap:6px;min-height:50px;padding:0 20px 0 16px;border-radius:var(--r-pill);background:var(--dark);color:#fff;font-weight:700;font-size:.95rem;box-shadow:0 10px 24px -8px #1e1a1b8c;transition:transform var(--t-fast) var(--ease)}.fab:active{transform:scale(.95);background:var(--dark-press)}.timeline{position:relative}.tl-month{font-size:.74rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:var(--s5) 0 var(--s3) 46px}.tl-item{position:relative;display:flex;gap:var(--s3);margin-bottom:var(--s3)}.tl-item:before{content:"";position:absolute;left:17px;top:40px;bottom:-14px;width:1.5px;background:#ebe5e6}.tl-dot{flex:none;width:36px;height:36px;border-radius:50%;background:var(--tone-soft);color:var(--tone);display:grid;place-items:center;z-index:1;box-shadow:0 0 0 4px var(--bg)}.tl-card{flex:1;min-width:0;display:grid;gap:4px}.strip{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:var(--s2)}.strip .ph{border-radius:var(--r-xs)}.cycle-hero{display:flex;align-items:center;gap:var(--s5)}.ring{position:relative;width:124px;height:124px;flex:none;color:var(--ring)}.ring circle:last-child{transition:stroke-dashoffset .6s var(--ease)}.ring-in{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;text-align:center;line-height:1.1}.ring-in small{color:var(--muted);font-size:.72rem;font-weight:700}.ring-in strong{font-size:2.3rem;font-weight:800;letter-spacing:-.04em;color:var(--ink);font-variant-numeric:tabular-nums}.cycle-text{display:grid;gap:var(--s2);justify-items:start;min-width:0;font-size:.94rem}.tip{display:flex;gap:var(--s3);align-items:center;padding:var(--s4);border-radius:var(--r-md);margin-top:var(--s3);font-weight:500;color:var(--ink-2);font-size:.94rem}.cal{margin-top:var(--s4);padding:var(--s4) var(--s3)}.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--s2)}.cal-head strong{font-size:1rem;font-weight:700;text-transform:capitalize}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;text-align:center}.cal-w{font-size:.7rem;font-weight:700;color:var(--muted);padding:4px 0}.cal-d{aspect-ratio:1;display:grid;place-items:center;border-radius:50%;font-weight:600;font-size:.86rem;font-variant-numeric:tabular-nums}.cal-d.period{background:#e2557c;color:#fff}.cal-d.predicted{box-shadow:inset 0 0 0 1.5px #e2557c;color:#d23f69}.cal-d.fertile{background:#ffe8d9;color:#8a4012}.cal-d.ovulation{background:#ffcfae;color:#7a370d;font-weight:800}.cal-d.today{box-shadow:0 0 0 2px var(--ink)}.cal-d.predicted.today{box-shadow:inset 0 0 0 1.5px #e2557c,0 0 0 2px var(--ink)}.legend{display:flex;flex-wrap:wrap;gap:6px 14px;justify-content:center;margin-top:var(--s3);font-size:.76rem;font-weight:600;color:var(--muted)}.legend span{display:inline-flex;align-items:center;gap:6px}.legend i{width:10px;height:10px;border-radius:50%;display:inline-block}.legend .period{background:#e2557c}.legend .predicted{box-shadow:inset 0 0 0 1.5px #e2557c}.legend .fertile{background:#ffe8d9;box-shadow:inset 0 0 0 1px #f3c7a8}.legend .ovulation{background:#ffcfae}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s2);margin-top:var(--s3)}.stats div{background:var(--card);border-radius:var(--r-sm);padding:var(--s3) var(--s2);text-align:center;box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);display:grid;gap:2px}.stats strong{font-size:1.2rem;font-weight:800;letter-spacing:-.02em}.stats span{font-size:.74rem;color:var(--muted);font-weight:600}.period-row{display:flex;align-items:center;gap:var(--s3)}.dot-rose{width:10px;height:10px;border-radius:50%;background:#e2557c;flex:none}.field{display:grid;gap:6px;margin-bottom:var(--s4)}.field>span{font-weight:700;font-size:.85rem;color:var(--ink-2)}.field input,.field textarea,.row input{width:100%;min-height:50px;padding:12px 14px;font-size:16px;font-weight:500;border:0;border-radius:var(--r-sm);background:#fff;outline:none;box-shadow:inset 0 0 0 1px #1e1a1b1a;transition:box-shadow var(--t-fast)}.field input:focus-visible,.field textarea:focus-visible,.row input:focus-visible{box-shadow:inset 0 0 0 2px var(--ink);outline:none}.field textarea{resize:vertical;min-height:96px;line-height:1.5}.field small{font-size:.8rem}.check{display:flex;align-items:center;gap:var(--s3);min-height:48px;font-weight:600}.check input{width:22px;height:22px;accent-color:var(--dark)}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#1e1a1b52;display:flex;align-items:flex-end;justify-content:center;animation:fade var(--t-med) var(--ease)}.sheet{width:100%;max-width:520px;max-height:92dvh;display:flex;flex-direction:column;background:var(--bg);border-radius:var(--r-lg) var(--r-lg) 0 0;box-shadow:0 -10px 40px #1e1a1b26;animation:up .28s var(--ease)}.sheet-grab{width:36px;height:5px;border-radius:3px;background:#e3dddd;margin:8px auto 0}.sheet-head{display:flex;align-items:center;justify-content:space-between;padding:var(--s2) var(--s2) 0 var(--s5)}.sheet-head h2{font-size:1.15rem;font-weight:800}.sheet-body{overflow-y:auto;padding:var(--s3) var(--s5) var(--s4);-webkit-overflow-scrolling:touch}.sheet-foot{display:flex;gap:var(--s2);padding:var(--s3) var(--s5) calc(var(--s3) + env(safe-area-inset-bottom))}.sheet-foot .btn.grow{flex:1}@keyframes up{0%{transform:translateY(100%)}}@keyframes fade{0%{opacity:0}}.settings-links{display:grid;gap:var(--s2);margin-top:var(--s2)}.account{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);font-size:.85rem;flex-wrap:wrap}.tabbar{position:fixed;z-index:40;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:520px;display:grid;grid-template-columns:repeat(5,1fr);background:#fff;box-shadow:0 -1px 0 var(--line);padding:6px 6px calc(6px + env(safe-area-inset-bottom))}.tabbar button{display:grid;justify-items:center;gap:3px;min-height:54px;padding-top:6px;color:#a39a9c;font-size:.68rem;font-weight:700;border-radius:var(--r-sm)}.tabbar button:active{background:#f8f6f6}.tabbar button.on{color:var(--ink)}.auth-banner{position:sticky;top:0;z-index:45;display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:calc(env(safe-area-inset-top) + 10px) var(--s4) 10px;background:var(--dark);color:#fff;font-weight:600;min-height:44px}.demo-banner{text-align:center;font-size:.74rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:#f3efef;padding:calc(env(safe-area-inset-top) + 5px) var(--s2) 5px}.sync-dot{position:fixed;z-index:45;top:calc(env(safe-area-inset-top) + 10px);right:10px;width:7px;height:7px;border-radius:50%;background:#e2557c;animation:pulse 1s ease-in-out infinite}.toast{position:fixed;z-index:70;left:50%;bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 84px);transform:translate(-50%);width:max-content;max-width:calc(100% - 32px);background:var(--dark);color:#fff;padding:12px 20px;border-radius:var(--r-pill);font-weight:600;font-size:.9rem;box-shadow:0 10px 30px -8px #1e1a1b80;animation:toast 2.6s var(--ease) both}@keyframes toast{0%{opacity:0;transform:translate(-50%,10px)}8%,88%{opacity:1;transform:translate(-50%)}to{opacity:0}}@keyframes pulse{50%{opacity:.35;transform:scale(.92)}}.welcome{min-height:100dvh;max-width:420px;margin:0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s4);padding:calc(env(safe-area-inset-top) + var(--s6)) var(--s6) calc(env(safe-area-inset-bottom) + var(--s6));text-align:center}.welcome h1{font-size:1.6rem;font-weight:800}.welcome-title{font-size:2.4rem!important;letter-spacing:-.04em}.welcome-sub{color:var(--muted);max-width:32ch}.form-card{width:100%;display:grid;gap:var(--s2);text-align:left}.mark{position:relative;width:112px;height:76px;margin-bottom:var(--s3)}.mark span{position:absolute;top:0;width:76px;height:76px;border-radius:50%;box-shadow:0 0 0 5px #fff,var(--shadow)}.mark-a{left:0;background:radial-gradient(circle at 70% 80%,#ffd2dd,#fff0f3 75%)}.mark-b{right:0;background:radial-gradient(circle at 30% 80%,#ffe0d1,#fff4ee 75%);mix-blend-mode:multiply}.mark.pulse{animation:pulse 1.4s ease-in-out infinite}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}}:root{--blush: #f6a9c1;--blush-deep: #c2386f;--blush-ink: #4d1a2c;--glass: rgba(255, 255, 255, .58);--glass-line: rgba(255, 255, 255, .75);--glass-dark: rgba(22, 19, 20, .82)}body{background:radial-gradient(60% 40% at 100% 0%,rgba(255,214,226,.6) 0%,transparent 70%),radial-gradient(50% 35% at 0% 30%,rgba(255,228,214,.45) 0%,transparent 70%),var(--bg);background-attachment:fixed}.glass{background:var(--glass);-webkit-backdrop-filter:blur(18px) saturate(170%);backdrop-filter:blur(18px) saturate(170%);box-shadow:inset 0 0 0 1px var(--glass-line),inset 0 1px #ffffffe6,0 8px 24px -10px #1e1a1b40}.glass-btn{display:grid;place-items:center;flex:none;width:52px;height:52px;border-radius:50%;background:var(--glass);color:var(--ink);-webkit-backdrop-filter:blur(18px) saturate(170%);backdrop-filter:blur(18px) saturate(170%);box-shadow:inset 0 0 0 1px var(--glass-line),inset 0 1px #fff,var(--shadow-sm);transition:transform var(--t-fast) var(--ease)}.glass-btn:active{transform:scale(.93)}.glass-btn.dark{background:var(--dark);color:#fff;box-shadow:0 8px 20px -8px #1e1a1b99}.tabbar{left:50%;bottom:calc(env(safe-area-inset-bottom) + 14px);transform:translate(-50%);width:auto;max-width:calc(100% - 24px);display:flex;gap:2px;padding:6px;border-radius:30px;border-top:0;background:linear-gradient(180deg,#ffffffb8,#ffffff7a);-webkit-backdrop-filter:blur(22px) saturate(180%);backdrop-filter:blur(22px) saturate(180%);box-shadow:inset 0 0 0 1px #ffffffd9,inset 0 1px #fff,inset 0 -8px 16px -10px #ffc4d673,0 18px 40px -16px #7a284a59}.tabbar button{position:relative;width:64px;height:58px;min-height:0;padding:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border-radius:24px;color:#a0959a;background:transparent;transition:background var(--t-med) var(--ease),color var(--t-med),transform var(--t-fast) var(--ease)}.tabbar button span{font-size:.66rem;font-weight:700;letter-spacing:.01em;line-height:1}.tabbar button:active{transform:scale(.93)}.tabbar button.on{color:var(--blush-deep);background:linear-gradient(180deg,#ffe6ee,#ffd3e0);box-shadow:inset 0 0 0 1px #ffffffe6,0 4px 12px -4px #d65a8273}@media (max-width: 350px){.tabbar button{width:56px}.tabbar button span{font-size:.6rem}}main{padding-bottom:calc(env(safe-area-inset-bottom) + 116px)}.fab{bottom:calc(env(safe-area-inset-bottom) + 100px)}.toast{bottom:calc(env(safe-area-inset-bottom) + 168px)}.home-top{gap:var(--s3)}.greet{flex:1;min-width:0}.greet-small{color:var(--muted);font-size:.8rem;font-weight:600}.greet-big{font-size:1.2rem;font-weight:800;letter-spacing:-.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3);margin-top:var(--s4)}.stat{position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:var(--s5);min-height:156px;padding:var(--s4);border-radius:var(--r-lg);text-align:left;background:var(--card);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);overflow:hidden;transition:transform var(--t-fast) var(--ease)}.stat:active{transform:scale(.97)}.stat:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(circle at 88% 18%,transparent 0 26px,rgba(30,26,27,.05) 27px 28px,transparent 29px 46px,rgba(30,26,27,.04) 47px 48px,transparent 49px)}.stat.solid{background:var(--blush);color:var(--blush-ink);box-shadow:0 12px 28px -14px #d65a82b3}.stat.solid:after{background:radial-gradient(circle at 88% 18%,transparent 0 26px,rgba(255,255,255,.28) 27px 28px,transparent 29px 46px,rgba(255,255,255,.2) 47px 48px,transparent 49px)}.stat-icon{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;background:#fff;color:var(--ink);box-shadow:var(--shadow-sm)}.stat.solid .stat-icon{background:#ffffff8c;color:var(--blush-ink);box-shadow:inset 0 0 0 1px #ffffffb3}.stat-label{display:flex;align-items:center;gap:6px;font-size:.78rem;font-weight:600;opacity:.85;margin-bottom:2px}.stat-label:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}.stat strong{display:block;font-size:2rem;font-weight:700;letter-spacing:-.035em;line-height:1.05;font-variant-numeric:tabular-nums}.stat strong small{font-size:.8rem;font-weight:600;letter-spacing:0;margin-left:4px;opacity:.75}.row-item{display:flex;align-items:center;gap:var(--s3);padding:8px 10px 8px 8px;border-radius:var(--r-md);background:var(--card);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);text-align:left;width:100%;transition:transform var(--t-fast) var(--ease)}.row-item:active{transform:scale(.985)}.row-thumb{width:64px!important;height:64px;flex:none;border-radius:var(--r-sm)!important}.row-main{flex:1;min-width:0;display:grid;gap:6px;justify-items:start}.row-chip{font-size:.74rem;font-weight:600;color:var(--muted);background:#f4f1f1;padding:4px 10px;border-radius:var(--r-pill)}div.row-item:active{transform:none}.row-hit{flex:1;min-width:0;display:flex;align-items:center;gap:var(--s3);text-align:left;border-radius:var(--r-sm)}.row-hit:active{opacity:.7}.date-hero-title{margin-bottom:var(--s2)}.date-hero-meta{display:flex;flex-wrap:wrap;gap:4px 14px;color:var(--ink-2);font-size:.9rem;font-weight:600;margin-bottom:var(--s5)}.date-hero-meta span{display:inline-flex;align-items:center;gap:4px}button.arrow-btn:active{background:#1e1a1b0f}.arrow-btn{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;flex:none;color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line)}.week{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-bottom:var(--s4)}.week-d{display:grid;justify-items:center;gap:6px;padding:8px 0 7px;border-radius:var(--r-pill);background:var(--glass);box-shadow:inset 0 0 0 1px var(--glass-line),var(--shadow-sm);font-size:.68rem;font-weight:600;color:var(--muted)}.week-d b{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:#fff;color:var(--ink);font-size:.88rem;font-weight:700;box-shadow:var(--shadow-sm)}.week-d.on{background:var(--blush);color:var(--blush-ink);box-shadow:0 10px 22px -12px #d65a82cc}.week-d i{width:5px;height:5px;border-radius:50%}.week-d i.period{background:#e2557c}.week-d i.predicted{box-shadow:inset 0 0 0 1.5px #e2557c}.week-d i.fertile,.week-d i.ovulation{background:#f6ac7a}.track-card{padding:var(--s4);border-radius:var(--r-lg);background:var(--card);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm)}.track-head{display:flex;align-items:center;gap:var(--s3);margin-bottom:var(--s4)}.track-head strong{flex:1;font-weight:700}.track-scale{display:flex;justify-content:space-between;font-size:.72rem;font-weight:600;color:var(--muted);padding:0 6px 8px;font-variant-numeric:tabular-nums}.track{position:relative;height:34px;border-radius:var(--r-pill);overflow:hidden;background:repeating-linear-gradient(-45deg,rgba(42,37,38,.45) 0 1.5px,transparent 1.5px 6px),#f4f1f1}.track-fill{position:absolute;inset:0 auto 0 0;border-radius:var(--r-pill);background:var(--blush);transition:width .6s var(--ease)}.track-knob{position:absolute;top:4px;width:26px;height:26px;margin-left:-13px;border-radius:50%;background:#fff;color:var(--blush-deep);font-size:.66rem;font-weight:800;display:grid;place-items:center;box-shadow:0 0 0 2px var(--blush),var(--shadow-sm);font-variant-numeric:tabular-nums}.track-end{position:absolute;right:4px;top:4px;width:26px;height:26px;border-radius:50%;background:var(--dark);color:#fff;display:grid;place-items:center}.cycle-actions{display:flex;gap:var(--s2);margin-top:var(--s3)}.cycle-actions .btn{flex:1}.g-hero{position:relative;border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--shadow);margin:0 0 var(--s4)}.g-hero:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;pointer-events:none;box-shadow:inset 0 0 0 5px #ffffff8c}.g-hero>.ph{aspect-ratio:4 / 3.3;border-radius:0}.g-hero-top{position:absolute;top:14px;left:14px;right:14px;display:flex;align-items:center;justify-content:space-between;gap:var(--s2)}.g-chip{display:inline-flex;align-items:center;gap:8px;padding:5px 14px 5px 5px;border-radius:var(--r-pill);font-weight:700;font-size:.86rem;color:var(--ink)}.g-chip-icon{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:#fff;color:#e2557c}.g-hero-bottom{position:absolute;left:12px;right:12px;bottom:12px;display:flex;align-items:center;gap:var(--s3);padding:8px 8px 8px 16px;border-radius:var(--r-pill);text-align:left}.g-hero-bottom p{flex:1;min-width:0;font-weight:700;font-size:.9rem;color:var(--ink)}.g-hero-bottom p span{display:block;font-weight:500;font-size:.78rem;color:var(--ink-2)}.g-hero-bottom .glass-btn{width:44px;height:44px}.perm{display:grid;justify-items:center;text-align:center;gap:var(--s3);padding:var(--s6) var(--s5);margin-top:var(--s4)}.perm h3{font-size:1.25rem;font-weight:800}.perm p{color:var(--ink-2);max-width:32ch;font-size:.94rem}.perm-steps{display:grid;gap:var(--s2);text-align:left;width:100%;margin:var(--s2) 0}.perm-steps div{display:flex;align-items:center;gap:var(--s3);font-size:.9rem;font-weight:500;color:var(--ink-2);background:#ffffffb8;padding:10px 12px;border-radius:var(--r-sm)}.perm-steps b{display:grid;place-items:center;width:26px;height:26px;flex:none;border-radius:50%;background:var(--blush);color:var(--blush-ink);font-size:.8rem}.stamp{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#ffffffb8;box-shadow:inset 0 0 0 1px #fffc,var(--shadow-sm)}.round.save{background:var(--blush);color:var(--blush-ink);box-shadow:0 10px 22px -10px #d65a82cc}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){.glass,.glass-btn,.week-d{background:#ffffffeb}.tabbar{background:#1f1b1c}}.mascot{display:block;flex:none;overflow:visible;-webkit-tap-highlight-color:transparent}.mascot.bob{animation:bob 2.4s ease-in-out infinite;transform-origin:50% 100%}.mascot .m-root,.mascot .m-idle,.mascot .m-body,.mascot .m-eyes,.mascot .m-arm,.mascot .m-tear,.mascot .m-heart,.mascot .m-spark{transform-box:fill-box}.mascot .m-root,.mascot .m-idle,.mascot .m-body{transform-origin:50% 100%}.mascot .m-eyes{transform-origin:50% 50%;animation:m-blink 4.6s var(--m-delay, 0s) infinite}.mascot .m-body{animation:m-breathe 3.4s ease-in-out infinite}.mascot .m-shine{transform-box:view-box;animation:m-shine 6.5s var(--m-delay, 0s) ease-in-out infinite}.mascot.m-mantap .m-idle{animation:m-bounce 1.5s cubic-bezier(.3,.7,.4,1) infinite}.mascot.m-mantap .m-arm-l{transform-origin:80% 20%;animation:m-wave-l 1.5s ease-in-out infinite}.mascot.m-mantap .m-arm-r{transform-origin:20% 20%;animation:m-wave-r 1.5s ease-in-out infinite}.mascot.m-senang .m-idle{animation:m-sway 2.6s ease-in-out infinite}.mascot.m-biasa .m-eyes{animation:m-blink 4.6s var(--m-delay, 0s) infinite,m-look 7s ease-in-out infinite}.mascot.m-sedih .m-idle{animation:m-droop 4s ease-in-out infinite}.mascot.m-sedih .m-tear{animation:m-tear 2.6s ease-in infinite}.mascot.m-bete .m-idle{animation:m-huff 3.2s ease-in-out infinite}.mascot.m-tiny .m-idle,.mascot.m-tiny .m-body,.mascot.m-tiny .m-arm,.mascot.m-tiny .m-tear,.mascot.m-tiny .m-shine,.mascot.m-still .m-idle,.mascot.m-still .m-body,.mascot.m-still .m-eyes,.mascot.m-still .m-arm,.mascot.m-still .m-tear,.mascot.m-still .m-shine{animation:none}.mascot:not(.m-tiny):not(.m-still){cursor:pointer}.mascot .m-hop{animation:m-hop .72s cubic-bezier(.32,1.6,.4,1) both}.mascot .m-heart{opacity:0;transform-origin:50% 50%;animation:m-heart 1s ease-out both}.mascot .m-heart.h2{animation-delay:.08s}.mascot .m-heart.h3{animation-delay:.16s}.mascot .m-spark{opacity:0;transform-origin:50% 50%;animation:m-spark .85s ease-out both}.mascot .m-spark.sp2{animation-delay:.14s}@keyframes m-blink{0%,90%,to{transform:scaleY(1)}93%{transform:scaleY(.08)}96%{transform:scaleY(1)}}@keyframes m-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.025,.972)}}@keyframes m-bounce{0%,to{transform:translateY(0) scale(1.04,.95)}35%{transform:translateY(-7px) scale(.97,1.04)}60%{transform:translateY(0) scale(1.03,.97)}}@keyframes m-wave-l{0%,to{transform:rotate(0)}50%{transform:rotate(-22deg)}}@keyframes m-wave-r{0%,to{transform:rotate(0)}50%{transform:rotate(22deg)}}@keyframes m-sway{0%,to{transform:rotate(-3deg) translateY(0)}25%{transform:rotate(0) translateY(-3px)}50%{transform:rotate(3deg) translateY(0)}75%{transform:rotate(0) translateY(-3px)}}@keyframes m-look{0%,40%,to{transform:translate(0)}50%,62%{transform:translate(-3px)}72%,84%{transform:translate(3px)}}@keyframes m-droop{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(2px) scale(1.03,.96)}}@keyframes m-tear{0%{transform:translateY(0);opacity:0}15%{opacity:1}80%{opacity:1}to{transform:translateY(14px);opacity:0}}@keyframes m-huff{0%,70%,to{transform:translate(0)}74%{transform:translate(-2px) scale(1.03,.97)}78%{transform:translate(2px)}82%{transform:translate(-2px) scale(1.03,.97)}86%{transform:translate(0)}}@keyframes m-hop{0%{transform:translateY(0) rotate(0) scale(1)}14%{transform:translateY(2px) rotate(-5deg) scale(1.16,.8)}40%{transform:translateY(-22px) rotate(7deg) scale(.9,1.12)}58%{transform:translateY(-6px) rotate(-4deg) scale(1.06,.95)}76%{transform:translateY(0) rotate(3deg) scale(1.08,.93)}90%{transform:translateY(0) rotate(-1deg) scale(.98,1.02)}to{transform:translateY(0) rotate(0) scale(1)}}@keyframes m-heart{0%{opacity:0;transform:translateY(6px) scale(.4)}25%{opacity:1;transform:translateY(-4px) scale(1)}to{opacity:0;transform:translateY(-26px) scale(.9)}}@keyframes m-spark{0%{opacity:0;transform:scale(.2) rotate(0) translateY(0)}30%{opacity:1;transform:scale(1.1) rotate(70deg) translateY(-6px)}to{opacity:0;transform:scale(.5) rotate(150deg) translateY(-22px)}}@keyframes m-shine{0%,58%{transform:translate(-6px) rotate(18deg);opacity:0}68%{opacity:.35}80%{transform:translate(130px) rotate(18deg);opacity:0}to{opacity:0}}@keyframes bob{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-6px) scale(1.02,.98)}}.section-head.first{margin-top:var(--s2)}.mood-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}.mood-card{display:grid;justify-items:center;align-content:start;gap:4px;text-align:center;padding:var(--s4) var(--s3) var(--s4);border-radius:var(--r-lg);background:var(--card);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);transition:transform var(--t-fast) var(--ease)}button.mood-card:active{transform:scale(.97)}.mood-card .mascot{margin-bottom:4px}.mood-empty{opacity:.35;filter:grayscale(.9)}.mood-who{font-size:.8rem;font-weight:600;color:var(--muted)}.mood-card strong{font-size:1.05rem;font-weight:800}.mood-note{font-size:.78rem;color:var(--ink-2);line-height:1.35;margin-top:2px}.mood-pick{display:grid;justify-items:center;text-align:center;gap:var(--s2);padding-bottom:var(--s4)}.mood-pick h3{font-size:1.35rem;font-weight:800;max-width:16ch;line-height:1.25}.mood-stage{display:grid;place-items:center;width:210px;height:190px;margin-top:var(--s2);background:radial-gradient(closest-side,rgba(255,214,226,.8),transparent)}.mood-pick-label{font-size:1.1rem;font-weight:800}.mood-options{display:flex;gap:6px;margin-top:var(--s2)}.mood-options button{display:grid;place-items:center;width:56px;height:56px;border-radius:50%;background:var(--card);box-shadow:inset 0 0 0 1px var(--line);opacity:.55;transition:transform var(--t-fast) var(--ease),opacity var(--t-fast),box-shadow var(--t-fast)}.mood-options button.on{opacity:1;transform:scale(1.08);box-shadow:inset 0 0 0 2px var(--blush),var(--shadow-sm)}.mood-options button:active{transform:scale(.94)}.mood-range{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:min(300px,100%);height:10px;margin:var(--s3) 0 0;border-radius:999px;background:linear-gradient(90deg,#f6a9c1 var(--p),#f1eeee var(--p));outline:none}.mood-range::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:28px;height:28px;border-radius:50%;background:#fff;border:6px solid #e2557c;box-shadow:var(--shadow-sm);cursor:pointer}.mood-range::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#fff;border:6px solid #e2557c;cursor:pointer}.mood-range:focus-visible{outline:2.5px solid var(--ink);outline-offset:6px}.tabbar-shade{position:fixed;z-index:39;left:0;right:0;bottom:0;pointer-events:none;height:calc(env(safe-area-inset-bottom) + 104px);background:linear-gradient(to top,var(--bg) 0%,var(--bg) 62%,rgba(251,250,250,0) 100%)}.g-month{margin-bottom:var(--s5)}.g-month-title{display:flex;align-items:baseline;gap:var(--s2);font-size:.95rem;font-weight:800;margin:0 2px var(--s2);text-transform:capitalize}.g-month-title span{font-size:.78rem;font-weight:600;color:var(--muted)}.g-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:3px;border-radius:var(--r-sm);overflow:hidden}.g-grid .ph{border-radius:0;aspect-ratio:1}@media (max-width: 360px){.g-grid{grid-template-columns:repeat(3,1fr)}}@media (min-width: 480px){.g-grid{grid-template-columns:repeat(5,1fr)}}.album-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s3)}.album-tile{position:relative;display:block;aspect-ratio:1;border-radius:var(--r-md);overflow:hidden;background:var(--card);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);transition:transform var(--t-fast) var(--ease)}.album-tile:active{transform:scale(.97)}.album-tile .ph{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:0}.album-tile-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--muted);background:#f4f1f1}.album-tile-label{position:absolute;left:0;right:0;bottom:0;padding:22px 12px 10px;text-align:left;font-size:.9rem;font-weight:700;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.35);background:linear-gradient(to top,rgba(20,17,18,.55),transparent)}.album-new{display:grid;justify-items:center;align-content:center;gap:6px;color:var(--muted);font-size:.82rem;font-weight:700;background:#f8f6f6;box-shadow:inset 0 0 0 1.5px var(--line)}.album-new-icon{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:#fff;color:var(--ink-2);box-shadow:var(--shadow-sm)}.swipe-head{gap:var(--s2);margin-left:-10px}.swipe-head h1{font-size:1.3rem;white-space:nowrap}.swipe-head .sub{font-size:.76rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.upbar .progress span{background:#e2557c}.cd-hero{display:flex;align-items:center;gap:var(--s3);padding:var(--s5)}.cd-left{flex:1;min-width:0;display:grid;gap:4px;justify-items:start}.cd-num{display:flex;align-items:baseline;gap:6px;font-size:2.6rem;font-weight:800;letter-spacing:-.04em;line-height:1;margin-top:var(--s3);font-variant-numeric:tabular-nums}.cd-num small{font-size:.9rem;font-weight:700;letter-spacing:0;color:var(--ink-2)}.cd-title{font-weight:700;font-size:1rem;margin-top:4px}.cd-date{font-size:.8rem;font-weight:600;color:var(--muted)}.cd-chips{display:flex;gap:var(--s2);overflow-x:auto;padding:var(--s3) 2px 4px;scrollbar-width:none}.cd-chips::-webkit-scrollbar{display:none}.cd-chip{display:inline-flex;align-items:center;gap:6px;flex:none;min-height:40px;padding:0 14px;border-radius:var(--r-pill);font-size:.84rem;font-weight:600;color:var(--ink-2);background:var(--card);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);white-space:nowrap}.cd-chip svg{color:var(--tone)}.cd-chip b{color:var(--ink);font-weight:800}.wrapped-card{margin-bottom:0}.wrapped{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;display:grid;place-items:center;overflow:hidden;padding:calc(env(safe-area-inset-top) + 56px) var(--s5) calc(env(safe-area-inset-bottom) + var(--s6));background:radial-gradient(90% 60% at 80% 100%,var(--wash-a),transparent 70%),radial-gradient(80% 50% at 10% 0%,var(--wash-b),transparent 70%),#fff;transition:background var(--t-med) var(--ease);user-select:none;-webkit-user-select:none;cursor:pointer}.wr-bars-top{position:absolute;top:calc(env(safe-area-inset-top) + 12px);left:12px;right:12px;display:flex;gap:4px}.wr-bars-top span{flex:1;height:3px;border-radius:2px;background:#1e1a1b1f;overflow:hidden;position:relative}.wr-bars-top span.done{background:var(--ink)}.wr-bars-top span.on:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--ink);transform-origin:left;animation:wrbar .5s var(--ease) both}@keyframes wrbar{0%{transform:scaleX(0)}}.wr-close{position:absolute;top:calc(env(safe-area-inset-top) + 22px);right:8px}.wr-slide{width:100%;max-width:420px;display:grid;justify-items:center;gap:var(--s3);text-align:center;animation:wrin .35s var(--ease) both}@keyframes wrin{0%{opacity:0;transform:translateY(12px) scale(.98)}}.wr-kicker{font-size:.8rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--tone)}.wr-big{font-size:2.2rem;font-weight:800;letter-spacing:-.03em;line-height:1.1;text-transform:capitalize;max-width:14ch}.wr-num{display:inline-flex;align-items:baseline;gap:8px;font-size:4.6rem;font-weight:800;letter-spacing:-.05em;line-height:1;font-variant-numeric:tabular-nums}.wr-num small{font-size:1.1rem;font-weight:700;letter-spacing:0;color:var(--ink-2)}.wr-text{font-size:1.05rem;color:var(--ink-2);max-width:30ch}.wr-text.small{font-size:.9rem}.wr-hint{font-size:.8rem;color:var(--muted);margin-top:var(--s4)}.wr-month{display:flex;align-items:center;gap:var(--s3);margin-top:var(--s3);font-weight:700;font-size:.9rem;cursor:default}.wr-month .glass-btn{width:44px;height:44px}.wr-photos{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;width:100%;max-width:300px;border-radius:var(--r-md);overflow:hidden;box-shadow:var(--shadow)}.wr-photos .ph{border-radius:0}.wr-bars{display:grid;gap:6px;width:100%;max-width:300px}.wr-bar{display:flex;align-items:center;gap:var(--s2)}.wr-bar-track{flex:1;height:10px;border-radius:5px;background:#ffffffb3;overflow:hidden}.wr-bar-track i{display:block;height:100%;border-radius:5px;background:var(--ring)}.wr-bar b{width:24px;text-align:right;font-variant-numeric:tabular-nums}.wr-duo{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s3);width:100%}.wr-duo .wr-num{font-size:3rem}.wr-duo span{display:block;font-size:.78rem;font-weight:600;color:var(--ink-2)}.gate{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:grid;place-items:center;padding:var(--s5);background:#fbfafad1;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.gate-card{width:100%;max-width:420px;display:grid;justify-items:center;gap:var(--s3);text-align:center;padding:var(--s6) var(--s5);border-radius:var(--r-lg);background:var(--card);box-shadow:var(--shadow)}.gate-card h1{font-size:1.5rem;font-weight:800}.gender-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3);width:100%;margin-top:var(--s2)}.gender-card{display:grid;justify-items:center;gap:4px;padding:var(--s4) var(--s2);border-radius:var(--r-lg);background:radial-gradient(90% 80% at 50% 100%,#ffe6ee,transparent 70%),#fff;box-shadow:inset 0 0 0 1.5px #ffd3e0,var(--shadow-sm);transition:transform var(--t-fast) var(--ease)}.gender-card:last-child{background:radial-gradient(90% 80% at 50% 100%,#e1f0fc,transparent 70%),#fff;box-shadow:inset 0 0 0 1.5px #cfe7fb,var(--shadow-sm)}.gender-card:active{transform:scale(.96)}.gender-card strong{font-size:1.1rem;font-weight:800;min-height:24px;display:grid;place-items:center}.gender-card span{font-size:.78rem;color:var(--muted);font-weight:600}.live-badge{display:inline-flex;align-items:center;gap:6px;flex:none;padding:6px 12px;border-radius:var(--r-pill);font-size:.74rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:var(--glass);box-shadow:inset 0 0 0 1px var(--glass-line),var(--shadow-sm)}.live-badge i{width:8px;height:8px;border-radius:50%;background:#c9c1c3}.live-badge.on{color:var(--blush-deep)}.live-badge.on i{background:#e2557c;box-shadow:0 0 #e2557c80;animation:live 1.6s ease-out infinite}@keyframes live{0%{box-shadow:0 0 #e2557c80}to{box-shadow:0 0 0 8px #e2557c00}}.period-row:disabled{opacity:1;cursor:default}.period-row:disabled:active{transform:none}.readonly-note{display:flex;align-items:center;gap:var(--s2);font-size:.86rem;font-weight:600;color:var(--ink-2);background:#fff1f5;padding:10px 14px;border-radius:var(--r-sm);margin-bottom:var(--s4)}.pair-code{display:grid;justify-items:center;gap:4px;width:100%;padding:var(--s5) var(--s4);border-radius:var(--r-lg);text-align:center;background:radial-gradient(90% 90% at 80% 100%,#ffd2dd,transparent 70%),#fff;box-shadow:inset 0 0 0 2px #ffd3e0,var(--shadow-sm)}.pair-code span{font-size:1.9rem;font-weight:800;letter-spacing:.12em;font-variant-numeric:tabular-nums;color:var(--ink)}.pair-code small{font-size:.78rem;font-weight:600;color:var(--muted)}.pair-code:active{transform:scale(.98)}.pair-code.small{padding:var(--s3);justify-items:start;text-align:left}.pair-code.small span{font-size:1.3rem}.code-input{font-size:1.3rem!important;font-weight:800;letter-spacing:.14em;text-transform:uppercase;text-align:center}.form-card{justify-items:center}.form-card>*{width:100%}.form-card>.mascot{width:auto}.center-text{text-align:center}.welcome-sub.left{text-align:left;max-width:none}.welcome-sub.small{font-size:.84rem}.page-head .mascot{margin:-6px -2px -6px -6px}.affirm{margin-bottom:var(--s3)}.affirm-text{font-size:1.15rem;font-weight:700;line-height:1.45;letter-spacing:-.01em;margin-top:var(--s4);text-wrap:pretty}.reflect{display:flex;align-items:center;gap:var(--s3);border-radius:var(--r-md);padding:var(--s4) var(--s3) var(--s4) var(--s5)}.j-entry{padding:var(--s4);border-radius:var(--r-lg);background:var(--card);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm);display:grid;gap:var(--s2)}.j-head{display:flex;align-items:center;gap:var(--s3);font-size:.9rem}.j-prompt{font-size:.84rem;font-weight:600;color:var(--blush-deep);background:#fff1f5;padding:8px 12px;border-radius:var(--r-sm)}.j-text{white-space:pre-wrap;color:var(--ink-2);line-height:1.55}.j-foot{display:flex;align-items:center;justify-content:space-between;color:var(--muted);font-size:.78rem;font-weight:600;min-height:32px}.j-foot .link{min-height:44px;min-width:44px;padding:0 var(--s2);font-size:.84rem}.cd-hero.meet{display:grid;gap:6px}.meet-top{display:flex;align-items:center;gap:var(--s3)}.meet-clock{display:inline-flex;align-items:baseline;gap:3px;margin-top:6px;font-variant-numeric:tabular-nums}.meet-clock b{font-size:1.05rem;font-weight:800;color:var(--ink);min-width:1.4em;text-align:center;background:#ffffffbf;border-radius:8px;padding:2px 4px;box-shadow:inset 0 0 0 1px #ffffffe6}.meet-clock i{font-style:normal;font-size:.7rem;font-weight:700;color:var(--muted);margin-right:5px}.meet-track{display:block;height:8px;border-radius:999px;background:#fffc;overflow:hidden;margin-top:var(--s3);box-shadow:inset 0 0 0 1px #d65a821f}.meet-track span{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#f6a9c1,#e2557c);transition:width 1s linear}.meet-foot{display:flex;align-items:center;justify-content:space-between;font-size:.8rem;font-weight:600;color:var(--ink-2)}.meet-foot svg{color:#e2557c}.date-when{color:var(--ink);font-weight:800}.stat-sub{display:block;margin-top:6px;font-size:.74rem;font-weight:600;opacity:.8}.home-top .glass-btn{width:48px;height:48px}.mood-options.left{justify-content:flex-start;flex-wrap:wrap;margin-top:0}.mood-options.left button{width:52px;height:52px}.small-note{font-size:.8rem}.week-together{padding:var(--s3) var(--s3) var(--s2);border-radius:var(--r-lg);background:var(--card);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-sm)}.wt-row{display:grid;grid-template-columns:58px repeat(7,1fr);align-items:center;min-height:40px}.wt-head span{text-align:center;font-size:.74rem;font-weight:700;color:var(--muted)}.wt-head span.today{color:var(--ink);font-weight:800}.wt-name{font-size:.8rem;font-weight:700;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wt-cell{display:grid;place-items:center}.wt-cell i{font-style:normal;color:#d9d2d4;font-weight:700}
