:root{--bg: #fff8f8;--card: #ffffff;--surface-alt: #fdeef0;--ink: #2b2230;--ink-2: #4a3d52;--muted: #7a707f;--line: #f1dde1;--line-strong: rgba(43, 34, 48, .3);--tint: rgba(240, 80, 122, .06);--period: #f0507a;--fertile: #5bb8e8;--ovulation: #2f8fd0;--pms: #f5a94a;--neutral: #b9a8c9;--period-ink: #ac3957;--fertile-ink: #3d7c9c;--ovulation-ink: #287bb3;--pms-ink: #8e622b;--neutral-ink: #7d7187;--success: #4cc38a;--success-ink: #33835d;--danger: #e5484d;--danger-ink: #d14246;--rose: var(--period);--rose-soft: #ffd9e3;--green: var(--success-ink);--green-soft: #e4f5ec;--fertile-soft: #e4f1fa;--amber: #fdecd8;--amber-line: var(--pms-ink);--danger-bg: #ffd9e3;--grey-bg: #fdeef0;--indigo: #4a4ab8;--indigo-soft: #e8e8fa;--heart: #b02f6f;--r-sm: 12px;--r: 16px;--r-md: 20px;--r-lg: 24px;--r-xl: 28px;--r-full: 9999px;--radius: var(--r-md);--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 20px;--s-6: 24px;--s-7: 32px;--s-8: 48px;--shadow-inset: rgba(255, 255, 255, .6) 0 .5px 0 0 inset, rgba(140, 30, 70, .06) 0 0 0 .5px inset;--shadow-1: 0 4px 20px rgba(240, 80, 122, .08);--shadow-2: 0 8px 24px rgba(240, 80, 122, .1);--shadow-sheet: 0 -8px 32px rgba(43, 34, 48, .12);color-scheme:light}[data-theme=dark]{--bg: #16121a;--card: #221c28;--surface-alt: #2c2433;--ink: #f6eef4;--ink-2: #ded2e0;--muted: #a99fb0;--line: #3a3042;--line-strong: rgba(246, 238, 244, .3);--tint: rgba(255, 107, 147, .08);--period: #ff6b93;--fertile: #6cc4ee;--ovulation: #4a9fdd;--pms: #f5b366;--neutral: #c4b4d4;--period-ink: #ff9ab4;--fertile-ink: #8ed4f5;--ovulation-ink: #7cc0ec;--pms-ink: #f5c68f;--neutral-ink: #c4b4d4;--success: #4cc38a;--success-ink: #6fd6a4;--danger: #e5484d;--danger-ink: #ff8a8e;--rose-soft: #4a2a38;--green-soft: #16352a;--fertile-soft: #16303f;--amber: #3a2c1c;--amber-line: #f5c68f;--danger-bg: #4a2a38;--grey-bg: #2c2433;--indigo: #a0a0f0;--indigo-soft: #26264a;--heart: #f07ab0;--shadow-inset: rgba(255, 255, 255, .08) 0 .5px 0 0 inset, rgba(0, 0, 0, .4) 0 0 0 .5px inset;--shadow-1: 0 4px 20px rgba(0, 0, 0, .3);--shadow-2: 0 8px 24px rgba(0, 0, 0, .45);--shadow-sheet: 0 -8px 32px rgba(0, 0, 0, .5);color-scheme:dark}@media(prefers-color-scheme:dark){html[data-theme=system]{--bg: #16121a;--card: #221c28;--surface-alt: #2c2433;--ink: #f6eef4;--ink-2: #ded2e0;--muted: #a99fb0;--line: #3a3042;--line-strong: rgba(246, 238, 244, .3);--tint: rgba(255, 107, 147, .08);--period: #ff6b93;--fertile: #6cc4ee;--ovulation: #4a9fdd;--pms: #f5b366;--neutral: #c4b4d4;--period-ink: #ff9ab4;--fertile-ink: #8ed4f5;--ovulation-ink: #7cc0ec;--pms-ink: #f5c68f;--neutral-ink: #c4b4d4;--success: #4cc38a;--success-ink: #6fd6a4;--danger: #e5484d;--danger-ink: #ff8a8e;--rose-soft: #4a2a38;--green-soft: #16352a;--fertile-soft: #16303f;--amber: #3a2c1c;--amber-line: #f5c68f;--danger-bg: #4a2a38;--grey-bg: #2c2433;--indigo: #a0a0f0;--indigo-soft: #26264a;--heart: #f07ab0;--shadow-inset: rgba(255, 255, 255, .08) 0 .5px 0 0 inset, rgba(0, 0, 0, .4) 0 0 0 .5px inset;--shadow-1: 0 4px 20px rgba(0, 0, 0, .3);--shadow-2: 0 8px 24px rgba(0, 0, 0, .45);--shadow-sheet: 0 -8px 32px rgba(0, 0, 0, .5);color-scheme:dark}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0}body{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink);font-size:16px;line-height:1.6;padding-bottom:env(safe-area-inset-bottom)}.app{max-width:480px;margin:0 auto;padding:calc(var(--s-5) + env(safe-area-inset-top)) var(--s-5) calc(96px + env(safe-area-inset-bottom))}.hidden{display:none!important}.muted{color:var(--muted);font-size:13px;line-height:1.5}.err{color:var(--period-ink);font-size:13px;margin:8px 0}.top{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--s-5)}.top h1{font-size:20px;margin:0;letter-spacing:-.02em;font-weight:700}.card{background:var(--card);border-radius:var(--r-lg);padding:var(--s-5);border:1px solid var(--line);margin-bottom:var(--s-3);box-shadow:var(--shadow-1);animation:rise .28s cubic-bezier(.22,1,.36,1) both}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.card:nth-child(2){animation-delay:.04s}.card:nth-child(3){animation-delay:.08s}.card:nth-child(4){animation-delay:.12s}.card:nth-child(5){animation-delay:.16s}.card h2{font-size:18px;margin:0 0 var(--s-4);font-weight:600;letter-spacing:-.01em}.rows>*{display:flex;align-items:center;gap:var(--s-3);width:100%;min-height:56px;padding:var(--s-2) 0;background:none;border:0;border-bottom:1px solid var(--line);font:inherit;color:inherit;text-align:left;cursor:pointer}.rows>*:last-child{border-bottom:0}.rows>*>svg{flex:0 0 auto;width:40px;height:40px;padding:10px;border-radius:var(--r-full);background:var(--surface-alt);color:var(--period-ink)}.rows>.row-head{font-weight:600;font-size:15px}.rows .row-head{font-weight:500;font-size:15px;flex:1}.rows .row-sub{color:var(--muted);font-size:13px}.rows .row-chevron{color:var(--muted);font-size:20px;line-height:1}.month-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--s-4)}.month-nav strong{font-size:17px;font-weight:600;letter-spacing:-.01em}.nav-btn{border:none;background:var(--rose-soft);border-radius:var(--r-full);width:40px;height:40px;font-size:18px;cursor:pointer;color:var(--period-ink);display:grid;place-items:center;transition:transform .14s cubic-bezier(.2,.8,.2,1),background .18s ease}.nav-btn:active{transform:scale(.92)}.grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.dow{font-size:11px;text-align:center;color:var(--muted);padding:var(--s-2) 0;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;position:relative}.dnum{width:100%;max-width:44px;aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:15px;border:2px solid transparent;cursor:pointer;background:none;color:var(--ink);font-family:inherit;font-variant-numeric:tabular-nums;transition:background .18s ease,color .18s ease,border-color .18s ease,transform .12s ease}.dnum:active{transform:scale(.88)}.grid.slide-next{animation:slide-next .22s cubic-bezier(.22,1,.36,1) both}.grid.slide-prev{animation:slide-prev .22s cubic-bezier(.22,1,.36,1) both}@keyframes slide-next{0%{opacity:0;transform:translate(14px)}to{opacity:1;transform:none}}@keyframes slide-prev{0%{opacity:0;transform:translate(-14px)}to{opacity:1;transform:none}}.dnum.dim{color:var(--muted);opacity:.45;font-weight:400}.dnum.pred-period{border-color:var(--period);border-style:dashed;color:var(--period-ink)}.dnum.pred-fertile{background:var(--fertile-soft);border-color:transparent;color:var(--ink)}.dnum.pred-ovulation{background:var(--ovulation);border-color:var(--ovulation);color:#fff;font-weight:700}.dnum.logged{background:var(--period);color:#fff;border-color:var(--period);font-weight:700}.dnum.fertile-logged{background:var(--fertile);color:#fff;border-color:var(--fertile);font-weight:700}.dnum.today{box-shadow:inset 0 0 0 2px var(--ink);font-weight:700}.dnum.sel{outline:2px solid var(--period-ink);outline-offset:1px}.dot{position:absolute;top:2px;right:2px;width:5px;height:5px;border-radius:50%;background:var(--muted)}.dnum.dose-taken:after,.dnum.dose-missed:after{content:"";position:absolute;bottom:2px;left:50%;transform:translate(-50%);width:13px;height:5px;border-radius:var(--r-full)}.dnum.dose-taken:after{background:var(--indigo)}.dnum.dose-missed:after{border:2px solid var(--indigo);background:transparent}.dnum{position:relative}.dnum .dnum-num{position:relative;z-index:1}.sex-mark{position:absolute;bottom:1px;left:50%;transform:translate(-50%);width:14px;height:14px;fill:var(--heart);pointer-events:none}.dnum.sex.fertile .sex-mark{fill:var(--green)}.dnum.sex.dose-taken .sex-mark,.dnum.sex.dose-missed .sex-mark{bottom:9px}.dnum.sex.logged .sex-mark,.dnum.sex.fertile-logged .sex-mark,.dnum.sex.pred-ovulation .sex-mark{fill:#fff}.bleed-day{position:absolute;top:0;right:0;width:20px;height:20px;border-radius:var(--r-full);background:#ffffffe6;color:var(--period-ink);font-size:11px;font-weight:700;line-height:20px;text-align:center;pointer-events:none}.legend{display:flex;flex-wrap:wrap;gap:var(--s-3) var(--s-5);margin-top:var(--s-5);font-size:13px;color:var(--muted)}.legend-group{display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-4)}.legend span{display:flex;align-items:center;gap:var(--s-2)}.chip{width:12px;height:12px;border-radius:var(--r-full);border:2px solid transparent}.chip.period{border-color:var(--period);border-style:dashed}.chip.fertile{background:var(--fertile-soft)}.chip.ovulation{background:var(--ovulation)}.chip.logged{background:var(--period)}.chip.spot{background:var(--muted);width:6px;height:6px}.chip.dose-taken,.chip.dose-missed{width:13px;height:5px;border-radius:var(--r-full);border:none}.chip.dose-taken{background:var(--indigo)}.chip.dose-missed{border:2px solid var(--indigo)}.chip.sex{border:none;background:none;position:relative}.chip.sex:after{content:"♥";color:var(--heart);font-size:14px;line-height:1;position:absolute;top:-3px;right:0;bottom:0;left:0;text-align:center}.chip.sex.fertile:after{color:var(--green)}.pred{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.pred .big{font-size:17px;font-weight:600}.badge{font-size:11px;padding:3px 8px;border-radius:var(--r-full);background:var(--rose-soft);color:var(--period-ink);font-weight:600;transition:background .2s ease,color .2s ease}.badge.green{background:var(--green-soft);color:var(--green)}.badge.amber{background:var(--amber);color:var(--amber-line)}.badge.grey{background:var(--grey-bg);color:var(--muted)}.banner{border-radius:var(--r-md);padding:12px;font-size:13px;margin-bottom:12px;line-height:1.45}.banner.warn{background:var(--amber);border:1px solid var(--amber-line)}.banner.info{background:var(--rose-soft);border:1px solid #f5c2c7}.banner.update{background:var(--green-soft);border:1px solid var(--green);animation:rise .3s ease both}.update-text{display:flex;flex-direction:column;gap:2px;margin-bottom:4px}.update-sub{color:var(--muted);font-size:12px}.confirm-sheet .sheet-body{padding-bottom:8px}.update-sheet .update-mark{width:56px;height:56px;margin:4px auto 12px;border-radius:var(--r-lg);display:grid;place-items:center;color:var(--green);background:var(--green-soft)}.update-title{text-align:center;font-size:17px;margin:0 0 6px}.update-sub{text-align:center;font-size:14px;font-weight:600}.update-hint{text-align:center;margin-top:4px}.update-notes{text-align:center;margin-top:10px}.ec-banner .ec-hint{color:var(--muted);font-size:12px;margin-top:2px}.ec-banner .ec-when{color:var(--muted);font-weight:400}.ec-banner .row{margin-top:8px}.list li.ec-row-item{padding:0}.ec-row{display:flex;align-items:center;gap:10px;width:100%;border:none;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer;padding:10px;border-radius:var(--r);transition:background .18s ease}.ec-row.on{background:var(--grey-bg)}.ec-row:disabled{opacity:.5}.ec-row .ec-row-date{font-weight:600;font-size:14px;color:var(--ink)}.ec-row .meta{color:var(--muted);font-size:12px}.list{list-style:none;margin:0;padding:0}.list li{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px;animation:rise .24s cubic-bezier(.22,1,.36,1) both}.list li:nth-child(1){animation-delay:.02s}.list li:nth-child(2){animation-delay:.05s}.list li:nth-child(3){animation-delay:.08s}.list li:nth-child(4){animation-delay:.11s}.list li:nth-child(5){animation-delay:.14s}.list li:last-child{border-bottom:none}.list .date{font-weight:600}.list .meta{color:var(--muted);font-size:12px}button{font-family:inherit}.btn{border:none;background:var(--rose-soft);border-radius:var(--r-full);padding:14px 20px;min-height:48px;font-size:16px;cursor:pointer;color:var(--period-ink);font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);transition:transform .14s cubic-bezier(.2,.8,.2,1),background .18s ease,color .18s ease,box-shadow .18s ease}.btn:active{transform:scale(.98);filter:brightness(.92)}.btn:focus-visible,.tab:focus-visible,.nav-btn:focus-visible{outline:2px solid var(--period-ink);outline-offset:2px}.btn.primary{background:var(--period);color:#fff;box-shadow:var(--shadow-1)}.btn.on{background:var(--period);color:#fff}.btn.green{background:var(--success);color:#fff}.btn.ghost{background:transparent;color:var(--muted)}.btn.danger{background:transparent;color:var(--danger-ink);box-shadow:inset 0 0 0 1.5px var(--danger-ink)}.btn:disabled{opacity:.4}.row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.row.tight{margin-top:8px}input,select{font:inherit;padding:14px 16px;border-radius:var(--r);border:1px solid var(--line);background:var(--card);color:var(--ink);width:100%;min-height:52px;transition:border-color .18s ease,box-shadow .18s ease}input:focus,select:focus{outline:2px solid var(--period-ink);outline-offset:0;border-color:transparent}.field{margin-bottom:var(--s-4)}.field label{display:block;font-size:13px;color:var(--muted);margin-bottom:var(--s-2);font-weight:500}.field.inline{display:flex;align-items:center;gap:var(--s-3)}.field.inline label{margin:0}.check{display:flex;align-items:center;gap:var(--s-3);font-size:15px;margin-top:0;min-height:48px}.check input{width:auto;min-height:0}.auth{padding-top:var(--s-6)}.auth-hero{margin-bottom:var(--s-6);animation:rise .4s ease both}.ob-mark{width:72px;height:72px;margin:0 0 var(--s-4);border-radius:var(--r-lg);display:grid;place-items:center;color:var(--period-ink);background:var(--rose-soft)}.auth-mark{width:72px;height:72px;margin:0 0 var(--s-5);border-radius:var(--r-xl);display:grid;place-items:center;color:#fff;background:var(--period);box-shadow:var(--shadow-2)}.auth h1{font-size:26px;margin:0 0 var(--s-2);letter-spacing:-.02em;font-weight:700;line-height:1.2}.auth .sub{color:var(--muted);margin:0;font-size:15px;line-height:1.55;max-width:32ch}.auth-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-xl);padding:var(--s-5);box-shadow:var(--shadow-1);animation:rise .4s .05s ease both}.seg{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;background:var(--rose-soft);border-radius:var(--r-md);margin-bottom:var(--s-5)}.seg-btn{border:none;background:transparent;border-radius:var(--r);padding:9px 0;font-size:14px;font-weight:600;color:var(--muted);cursor:pointer;transition:background .18s ease,color .18s ease,box-shadow .18s ease}.seg-btn.on{background:var(--card);color:var(--ink);box-shadow:var(--shadow-1)}.seg-btn:focus-visible{outline:2px solid var(--rose);outline-offset:1px}.pw-wrap{position:relative}.pw-wrap input{padding-right:62px}.pw-toggle{position:absolute;inset:0 6px 0 auto;margin:auto 0;height:28px;border:none;background:transparent;color:var(--rose);font-size:12px;font-weight:600;cursor:pointer;padding:0 8px;border-radius:var(--r)}.pw-toggle:focus-visible{outline:2px solid var(--rose);outline-offset:1px}.hint-inline{font-size:12px;margin-top:5px;color:var(--muted)}.hint-inline.ok{color:var(--green)}.hint-inline.err{color:var(--rose)}.ok-msg{color:var(--green);font-size:13px;font-weight:600;background:var(--green-soft);border-radius:var(--r);padding:9px 12px;animation:rise .25s ease both}.btn.primary:disabled{opacity:.5}.btn.primary.ok,.btn.primary.ok:disabled{background:var(--green);color:#fff;opacity:1}.auth-err{margin-top:4px}.auth-submit{width:100%;margin-top:14px;padding:13px 16px;font-size:15px;font-weight:600}.auth-switch{text-align:center;font-size:13px;color:var(--muted);margin-top:16px}.link{border:none;background:none;color:var(--rose);font:inherit;font-weight:600;cursor:pointer;padding:0}.link:focus-visible{outline:2px solid var(--rose);outline-offset:2px;border-radius:var(--r-sm)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#2b223066;z-index:10;animation:fade .18s ease both}@keyframes fade{0%{opacity:0}to{opacity:1}}.sheet{position:fixed;inset:auto 0 0 0;background:var(--card);z-index:11;border-radius:var(--r-xl) var(--r-xl) 0 0;max-width:480px;margin:0 auto;box-shadow:var(--shadow-sheet);animation:up .32s cubic-bezier(.34,1.2,.64,1);display:flex;flex-direction:column;max-height:90dvh}@supports not (height: 100dvh){.sheet{max-height:90vh}}@keyframes up{0%{transform:translateY(100%)}to{transform:translateY(0)}}.sheet-body{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:var(--s-5) var(--s-4) var(--s-3)}.sheet h3{margin:0 0 4px;font-size:16px}.sheet .hint{color:var(--muted);font-size:13px;margin-bottom:12px;line-height:1.45}.grabber{width:36px;height:4px;border-radius:var(--r-sm);background:var(--line);margin:0 auto 14px}.sheet-actions{flex:0 0 auto;display:flex;flex-direction:column;gap:8px;padding:12px 16px calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:var(--card)}.sheet-actions .btn{width:100%;padding:13px 16px;font-size:15px;font-weight:600}.sheet-actions .btn:not(.primary):not(.danger){background:var(--grey-bg)}.btn-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.btn-grid>:only-child{grid-column:1 / -1}.field-static{font-size:15px;font-weight:600}.textarea{font:inherit;width:100%;padding:11px 12px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--bg);color:var(--ink);resize:vertical}.day-info{padding:10px 0}.day-group+.day-group{border-top:1px solid var(--line);margin-top:14px;padding-top:4px}.day-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.day-head-date{display:flex;align-items:baseline;gap:8px}.day-head-num{font-size:30px;font-weight:600;line-height:1;letter-spacing:-.03em}.day-head-mon{font-size:14px;font-weight:600;color:var(--muted);display:flex;flex-direction:column;line-height:1.2}.day-head-year{font-size:11px;font-weight:500}.day-head-right{display:flex;flex-direction:column;align-items:flex-end;gap:4px}.day-head-day{font-size:11px;color:var(--muted);font-weight:600}.day-info-label{font-size:12px;font-weight:600;color:var(--muted);margin-bottom:4px}.day-info-sub{font-size:11px;margin-top:6px}.seg-row{display:flex;gap:6px;margin-top:8px}.seg{width:44px;height:34px;display:grid;place-items:center;border:1px solid var(--line-strong);background:none;color:var(--ink-2);border-radius:var(--r);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease}.seg:active{transform:scale(.94)}.seg.on{background:var(--rose-soft);color:var(--period-ink);border-color:var(--period)}.seg:disabled{opacity:.4;cursor:default}.seg:focus-visible{outline:2px solid var(--rose);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.facts{margin:4px 0 0;display:grid;grid-template-columns:auto 1fr;gap:6px 12px}.facts dt{font-size:12px;color:var(--muted)}.facts dd{margin:0;font-size:13px;text-align:right}.facts-sub{display:block;font-size:11px;color:var(--muted)}.more{margin-top:8px}.more[open] .facts{margin-bottom:8px}.more summary{font-size:12px;font-weight:600;color:var(--muted);cursor:pointer;list-style:none;padding:4px 0}.more summary::-webkit-details-marker{display:none}.more summary:after{content:" ▾";font-size:10px}.more[open] summary:after{content:" ▴"}.more summary:focus-visible{outline:2px solid var(--rose);outline-offset:2px;border-radius:var(--r-sm)}.more p{margin:6px 0 0;font-size:11px;line-height:1.5}.day-status{font-size:13px;font-weight:600;color:var(--ink-2)}.day-note-text{display:block;white-space:pre-wrap;font-size:13px;line-height:1.5}.day-info-value{font-size:14px;line-height:1.5}.chips{display:flex;flex-wrap:wrap;gap:6px}.sym-chip{font-size:12px;padding:4px 10px;border-radius:var(--r-full);background:var(--rose-soft);color:var(--period-ink);font-weight:600}.day-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}button.day-card{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:12px;display:flex;flex-direction:column;gap:6px;min-width:0;font:inherit;color:inherit;text-align:left;cursor:pointer}button.day-card:active{border-color:var(--rose);background:var(--rose-soft)}button.day-card:focus-visible{outline:2px solid var(--rose);outline-offset:2px}.day-card-top{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--muted)}.day-card-value{font-size:13px;line-height:1.5;overflow-wrap:anywhere}.day-card-link{background:none;border:0;padding:0;cursor:pointer;color:var(--rose);font-size:12px;font-weight:600}.sheet .row{margin-top:16px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:20;animation:fade .18s ease both}.modal{position:fixed;z-index:21;left:16px;right:16px;top:50%;transform:translateY(-50%);max-width:420px;margin:0 auto;max-height:85dvh;display:flex;flex-direction:column;background:var(--card);border-radius:var(--r-lg);box-shadow:var(--shadow-sheet);animation:pop .18s ease-out}@keyframes pop{0%{opacity:0;transform:translateY(-50%) scale(.97)}to{opacity:1;transform:translateY(-50%) scale(1)}}@supports not (height: 100dvh){.modal{max-height:85vh}}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 16px 0}.modal-title{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:600}.modal-x{font:inherit;font-size:22px;line-height:1;color:var(--muted);background:none;border:0;padding:4px 8px;cursor:pointer;border-radius:var(--r-sm)}.modal-x:focus-visible{outline:2px solid var(--rose);outline-offset:2px}.modal-body{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px 16px calc(16px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:10px}.sheet-raised{z-index:30}.sheet-overlay-raised{z-index:29}.prof-head{display:flex;align-items:center;gap:var(--s-4);padding:var(--s-5)}.prof-avatar{width:64px;height:64px;flex:0 0 auto;display:grid;place-items:center;border-radius:var(--r-full);background:var(--rose-soft);color:var(--period-ink);font-size:26px;font-weight:700}.prof-id{min-width:0;display:flex;flex-direction:column;gap:2px}.prof-name{font-size:22px;font-weight:700;letter-spacing:-.02em;line-height:1.2;overflow-wrap:anywhere}.chip-btn{border:none;background:var(--surface-alt);color:var(--ink-2);border-radius:var(--r-full);padding:0 16px;min-height:40px;font:inherit;font-size:14px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:var(--s-2);transition:transform .18s cubic-bezier(.2,.8,.2,1),background .18s ease,color .18s ease}.chip-btn:active{transform:scale(.96)}.chip-btn.on{background:var(--period);color:#fff}.chip-btn:focus-visible{outline:2px solid var(--period-ink);outline-offset:2px}.tabbar{position:fixed;left:0;right:0;z-index:5;display:flex;gap:0;max-width:480px;margin:0 auto;padding:6px var(--s-2) calc(6px + env(safe-area-inset-bottom));background:var(--card);border-top:1px solid var(--line);box-shadow:none;bottom:0}.week-strip{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--s-1);margin-bottom:var(--s-4)}.week-cell{border:none;background:none;cursor:pointer;font:inherit;display:flex;flex-direction:column;align-items:center;gap:var(--s-1);padding:var(--s-1) 0;position:relative;min-height:48px}.week-dow{font-size:11px;font-weight:500;color:var(--muted)}.week-num{width:36px;height:36px;display:grid;place-items:center;border-radius:var(--r-full);font-size:15px;font-weight:500;border:2px solid transparent;font-variant-numeric:tabular-nums;color:var(--ink);transition:background .18s ease,color .18s ease,border-color .18s ease,box-shadow .18s ease}.week-num.logged{background:var(--period);color:#fff;border-color:var(--period);font-weight:700}.week-num.pred-period{border-color:var(--period);border-style:dashed;color:var(--period-ink)}.week-num.pred-fertile{background:var(--fertile-soft);border-color:var(--fertile);color:var(--ink)}.week-num.pred-ovulation{background:var(--ovulation);border-color:var(--ovulation);color:#fff;font-weight:700}.week-num.today{box-shadow:inset 0 0 0 2px var(--ink);font-weight:700}.week-cell.sel .week-num{outline:2px solid var(--period-ink);outline-offset:1px}.card-hint{margin-top:calc(-1 * var(--s-3));margin-bottom:var(--s-3)}.home-hero-wrap{margin:0 0 var(--s-3)}.ring-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-5);box-shadow:var(--shadow-1);display:flex;flex-direction:column;align-items:center;gap:var(--s-4);animation:rise .28s cubic-bezier(.22,1,.36,1) both;margin-bottom:var(--s-3)}.ring-wrap{position:relative;display:grid;place-items:center}.ring-svg{transform:rotate(0)}.ring-track{stroke:var(--neutral);opacity:.35}.ring-knob{filter:drop-shadow(0 1px 2px rgba(43,34,48,.18))}.ring-centre{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s-1);text-align:center}.ring-figure{font-size:56px;font-weight:700;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--ink)}.ring-label{font-size:13px;font-weight:500;color:var(--muted)}.ring-copy{text-align:center}.ring-title{font-size:24px;font-weight:700;line-height:1.25;letter-spacing:-.02em;color:var(--ink);margin:0}.ring-sub{margin-top:var(--s-2);font-size:15px;line-height:1.5;color:var(--ink-2)}.ring-phase{margin-top:var(--s-2);display:inline-flex;align-items:center;gap:var(--s-2);font-size:13px;font-weight:500;color:var(--ink-2)}.ring-dot{width:10px;height:10px;border-radius:var(--r-full)}.home-lower{padding:0}.home-lower .card{margin-bottom:var(--s-3)}.home-lower .card:last-of-type{margin-bottom:var(--s-3)}.home-lower .row{margin-top:0}.stat-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-3);padding:var(--s-3) 0}.stat-row+.stat-row{border-top:1px solid var(--line)}.stat-row-label{font-size:14px;color:var(--ink-2)}.stat-row-value{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.stat-col{display:flex;flex-direction:column;gap:var(--s-2)}.stat-figure{font-size:44px;font-weight:700;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--period)}.stat-label{font-size:13px;font-weight:500;color:var(--muted)}.chance-card{transition:border-color .2s ease}.chance-head{display:flex;align-items:center;gap:10px;margin-top:4px}.chance-badge{font-size:12px;font-weight:600;padding:4px 10px;border-radius:var(--r-full)}.chance-badge.risk-high{background:var(--rose-soft);color:var(--period-ink)}.chance-badge.risk-medium{background:var(--amber);color:var(--amber-line)}.chance-badge.risk-low{background:var(--green-soft);color:var(--green)}.chance-badge.risk-unknown{background:var(--grey-bg);color:var(--muted)}.chance-when{font-size:12px}.chance-value{font-size:30px;font-weight:600;letter-spacing:-.02em;line-height:1}.chance-value.risk-high{color:var(--rose)}.chance-value.risk-medium{color:var(--amber-line)}.chance-value.risk-low{color:var(--green)}.chance-bar{height:8px;border-radius:var(--r-full);background:var(--grey-bg);overflow:hidden;margin-top:12px}.chance-fill{height:100%;border-radius:var(--r-full);transition:width .3s ease}.chance-fill.risk-high{background:var(--rose)}.chance-fill.risk-medium{background:var(--amber-line)}.chance-fill.risk-low{background:var(--green)}.chance-note{font-size:11px;line-height:1.5;margin-top:8px}.next-count{display:flex;align-items:baseline;gap:8px;margin-top:2px}.next-num{font-size:64px;font-weight:700;line-height:.95;letter-spacing:-.04em;color:var(--period);font-variant-numeric:tabular-nums}.next-unit{font-size:15px;font-weight:600;color:var(--muted)}.next-date{margin-top:6px;font-size:16px;font-weight:600}.next-range{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line);font-size:13px}.next-range-label{color:var(--muted)}.next-range-value{font-weight:600}.next-badges{margin-top:10px}.ins-approx{color:var(--muted);font-style:italic}.ins-note{font-size:11px;line-height:1.5;margin-top:10px}.loading-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:70vh;text-align:center}.loading-mark{position:relative;display:grid;place-items:center;width:96px;height:96px}.loading-mark svg{color:var(--rose);animation:breathe 1.6s ease-in-out infinite}.loading-ring{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:2px solid var(--rose-soft);border-top-color:var(--rose);animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes breathe{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}.loading-name{margin-top:18px;font-size:20px;font-weight:600;letter-spacing:-.02em}.loading-dots{display:flex;gap:6px;margin-top:14px}.loading-dots i{width:6px;height:6px;border-radius:50%;background:var(--rose);animation:dotpulse 1.2s ease-in-out infinite}.loading-dots i:nth-child(2){animation-delay:.15s}.loading-dots i:nth-child(3){animation-delay:.3s}@keyframes dotpulse{0%,to{opacity:.25;transform:translateY(0)}50%{opacity:1;transform:translateY(-3px)}}.pop{animation:pop-in .35s cubic-bezier(.34,1.56,.64,1) both}@keyframes pop-in{0%{transform:scale(.8);opacity:0}60%{transform:scale(1.06)}to{transform:scale(1);opacity:1}}.tab{flex:1;border:none;background:none;cursor:pointer;padding:8px 0 6px;border-radius:var(--r-sm);font-size:11px;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:4px;font-family:inherit;font-weight:500;min-height:48px;transition:color .18s ease,transform .14s cubic-bezier(.2,.8,.2,1)}.tab:active{transform:scale(.94)}.tab svg{transition:transform .24s cubic-bezier(.34,1.4,.64,1)}.tab.active svg{transform:translateY(-1px) scale(1.08)}.tab.active{color:var(--period-ink)}footer.disclaimer{margin-top:20px;font-size:11px;color:var(--muted);line-height:1.5}.stat-col{display:flex;flex-direction:column;gap:var(--s-6)}.stat-block{display:flex;flex-direction:column;gap:var(--s-1)}.stat-figure{font-size:44px;font-weight:700;line-height:1;letter-spacing:-.035em;font-variant-numeric:tabular-nums;color:var(--ink)}.stat-label{font-size:12px;font-weight:600;letter-spacing:.02em;color:var(--muted)}.lock-wrap{min-height:80dvh;display:grid;place-items:center}.lock-plain{width:100%;text-align:center}.lock-bar{position:relative;overflow:hidden;border-radius:var(--r-full);background:var(--grey-bg);margin:var(--s-5) auto 0;max-width:280px;padding:12px 0}.lock-bar-fill{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--rose-soft);transform-origin:left center;transition:transform .18s ease}.lock-bar-digits{position:relative;display:flex;justify-content:center;gap:10px;font-size:16px;color:var(--muted)}.lock-bar.lock-shake{animation:lock-shake .3s ease}@keyframes lock-shake{0%,to{transform:translate(0)}25%{transform:translate(-6px)}75%{transform:translate(6px)}}.lock-pad{display:grid;grid-template-columns:repeat(3,72px);gap:12px;justify-content:center;margin:var(--s-4) auto 0;max-width:280px}.lock-key{width:72px;height:72px;border-radius:50%;padding:0;font-size:22px;display:grid;place-items:center}
