:root{--bg:#f2f4f3;--surface:#fff;--sunken:#e7ebea;--ink:#16262b;--ink-2:#4a5b60;--line:#cfd7d5;--accent:#1b6470;--on-accent:#fff;--period:#9e2b3c;--on-period:#fff;--pain:#8f560a;--pain-fill:#c98a2b;--fertile:#4450a3;--danger:#a12a2a;--serif:ui-serif, "New York", "Iowan Old Style", Georgia, serif;--sans:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--tap:2.75rem;--r-s:.5rem;--r-m:.875rem;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f181b;--surface:#18242a;--sunken:#0b1215;--ink:#e7edec;--ink-2:#a6b5b8;--line:#2f3f45;--accent:#74c5d0;--on-accent:#06242a;--period:#ec8592;--on-period:#2b060c;--pain:#e3ab52;--pain-fill:#d69a3c;--fertile:#a3acf2;--danger:#f08a8a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#0f181b;--surface:#18242a;--sunken:#0b1215;--ink:#e7edec;--ink-2:#a6b5b8;--line:#2f3f45;--accent:#74c5d0;--on-accent:#06242a;--period:#ec8592;--on-period:#2b060c;--pain:#e3ab52;--pain-fill:#d69a3c;--fertile:#a3acf2;--danger:#f08a8a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}@supports (font:-apple-system-body){html{font:-apple-system-body}}body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;margin:0;line-height:1.45}h1,h2,h3,p{margin:0}h1,h2{font-family:var(--serif);letter-spacing:-.01em;text-wrap:balance;font-weight:600;line-height:1.15}h1{font-size:1.75rem}h2{font-size:1.25rem}h3{font-size:1rem;font-weight:650}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;touch-action:manipulation}:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.muted{color:var(--ink-2)}.small{font-size:.875rem}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.stack>*+*{margin-top:var(--gap,.75rem)}.row{align-items:center;gap:.75rem;display:flex}.row.between{justify-content:space-between}.row.wrap{flex-wrap:wrap}.grow{flex:1;min-width:0}.app{max-width:34rem;min-height:100dvh;padding:calc(env(safe-area-inset-top) + 1rem) 1rem calc(env(safe-area-inset-bottom) + 5.5rem);margin:0 auto}.screen>header{margin-bottom:1.25rem}.tabbar{z-index:10;background:var(--surface);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);position:fixed;bottom:0;left:0;right:0}.tabbar ul{max-width:34rem;margin:0 auto;padding:0;list-style:none;display:flex}.tabbar li{flex:1}.tabbar button{width:100%;min-height:3.5rem;color:var(--ink-2);background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:.2rem;font-size:.75rem;font-weight:550;display:flex}.tabbar button[aria-current=page]{color:var(--accent)}.tabbar button[aria-current=page] span{text-underline-offset:.25em;text-decoration:underline;text-decoration-thickness:2px}.tabbar svg{width:1.5rem;height:1.5rem}@media (width>=60rem){.app{max-width:40rem}}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);padding:1rem}.card+.card,.card+.banner,.banner+.card,.banner+.banner{margin-top:.75rem}.card>h2{margin-bottom:.75rem}.banner{border-radius:var(--r-m);border:1px solid var(--line);border-left:.3rem solid var(--accent);background:var(--surface);padding:.75rem .875rem}.banner .row{margin-top:.5rem}.note{background:var(--sunken);border-radius:var(--r-s);color:var(--ink-2);padding:.75rem;font-size:.875rem}hr{border:0;border-top:1px solid var(--line);margin:1rem 0}.btn{min-height:var(--tap);border:1.5px solid var(--accent);color:var(--accent);background:0 0;border-radius:999px;justify-content:center;align-items:center;gap:.4rem;padding:.5rem 1rem;font-weight:600;text-decoration:none;display:inline-flex}.btn.primary{background:var(--accent);color:var(--on-accent)}.btn.quiet{border-color:#0000;padding-inline:.5rem}.btn.danger{border-color:var(--danger);color:var(--danger)}.btn.danger.primary{background:var(--danger);color:var(--surface)}.btn.block{width:100%}.btn:disabled{opacity:.5;cursor:default}.chips{flex-wrap:wrap;gap:.5rem;display:flex}.chip{min-height:var(--tap);border:1.5px solid var(--line);background:var(--surface);color:var(--ink);text-align:left;border-radius:999px;align-items:center;gap:.35rem;padding:.4rem .9rem;display:inline-flex}.chip[aria-pressed=true],.chip[aria-checked=true]{border-color:var(--accent);background:var(--accent);color:var(--on-accent);font-weight:600}.chip[aria-pressed=true]:before,.chip[aria-checked=true]:before{content:"✓";font-weight:700}.chips.flow .chip[aria-checked=true]{border-color:var(--period);background:var(--period);color:var(--on-period)}.steps{grid-auto-columns:1fr;grid-auto-flow:column;gap:.375rem;display:grid}.steps .chip{justify-content:center;padding-inline:.25rem}.steps .chip[aria-checked=true]:before{content:none}.field>label,.field>.label,.label{margin-bottom:.4rem;font-weight:600;display:block}.field .hint{color:var(--ink-2);margin-top:.3rem;font-size:.875rem}input[type=text],input[type=date],input[type=time],input[type=number],select,textarea{width:100%;min-height:var(--tap);border-radius:var(--r-s);border:1.5px solid var(--line);background:var(--surface);padding:.5rem .75rem;font-size:max(1rem,16px)}textarea{resize:vertical;min-height:6rem}.switch{min-height:var(--tap);justify-content:space-between;align-items:center;gap:1rem;display:flex}.switch input{appearance:none;background:var(--line);border:1.5px solid var(--ink-2);cursor:pointer;border-radius:999px;flex:none;width:3.25rem;height:2rem;margin:0;position:relative}.switch input:after{content:"";background:var(--surface);border:1.5px solid var(--ink-2);border-radius:50%;width:1.45rem;height:1.45rem;transition:transform .15s;position:absolute;top:.19rem;left:.2rem}.switch input:checked{background:var(--accent);border-color:var(--accent)}.switch input:checked:after{border-color:var(--accent);transform:translate(1.2rem)}.check{min-height:var(--tap);align-items:center;gap:.75rem;display:flex}.check input{width:1.5rem;height:1.5rem;accent-color:var(--accent);flex:none}.scale input[type=range]{appearance:none;width:100%;height:var(--tap);background:0 0;margin:0}.scale input[type=range]::-webkit-slider-runnable-track{background:linear-gradient(to right, var(--pain-fill) var(--fill,0%), var(--sunken) var(--fill,0%));border:1px solid var(--line);border-radius:999px;height:.6rem}.scale input[type=range]::-moz-range-track{background:var(--sunken);border:1px solid var(--line);border-radius:999px;height:.6rem}.scale input[type=range]::-moz-range-progress{background:var(--pain-fill);border-radius:999px;height:.6rem}.scale input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--surface);border:2.5px solid var(--pain);border-radius:50%;width:2rem;height:2rem;margin-top:-.75rem}.scale input[type=range]::-moz-range-thumb{background:var(--surface);border:2.5px solid var(--pain);border-radius:50%;width:1.75rem;height:1.75rem}.scale .value{font-family:var(--serif);font-variant-numeric:tabular-nums;min-width:2ch;font-size:2rem;font-weight:600;line-height:1}.scale .ends{color:var(--ink-2);justify-content:space-between;font-size:.8125rem;display:flex}.ring-wrap{grid-template-columns:minmax(0,11rem) 1fr;align-items:center;gap:1rem;display:grid}.ring{width:100%;height:auto;display:block}.ring text{font-family:var(--serif);fill:var(--ink)}.ring .sub{font-family:var(--sans);fill:var(--ink-2)}.phase-key{color:var(--ink-2);flex-wrap:wrap;gap:.25rem .9rem;margin:.75rem 0 0;padding:0;font-size:.8125rem;list-style:none;display:flex}.phase-key li{align-items:center;gap:.35rem;display:flex}.phase-key svg{width:1.4rem;height:.6rem}.predict{font-family:var(--serif);font-size:1.125rem;font-weight:600}.cal-head{grid-template-columns:var(--tap) 1fr var(--tap);text-align:center;align-items:center;margin-bottom:.5rem;display:grid}.icon-btn{width:var(--tap);height:var(--tap);border:1.5px solid var(--line);background:var(--surface);border-radius:50%;place-items:center;font-size:1.25rem;line-height:1;display:grid}.cal{border-collapse:separate;border-spacing:2px;table-layout:fixed;touch-action:pan-y;width:100%}.cal th{color:var(--ink-2);padding:.25rem 0;font-size:.75rem;font-weight:600}.cal td{padding:0}.day{aspect-ratio:1/1.12;border-radius:var(--r-s);background:var(--surface);font-variant-numeric:tabular-nums;border:1.5px solid #0000;flex-direction:column;align-items:center;width:100%;min-height:2.9rem;padding:.25rem 0 0;display:flex;position:relative}.day.outside{color:var(--ink-2);opacity:.55;background:0 0}.day .num{border-radius:50%;place-items:center;width:1.75rem;height:1.75rem;font-size:.9375rem;display:grid}.day.today{border-color:var(--ink)}.day.today .num{text-underline-offset:.2em;font-weight:800;text-decoration:underline}.day.flow .num{background:var(--period);color:var(--on-period);font-weight:700}.day.flow.light .num{color:var(--period);box-shadow:inset 0 0 0 2.5px var(--period);background:0 0}.day.spotting .num{border:2px dotted var(--period)}.day.predicted .num{border:2px dashed var(--period)}.day .marks{align-items:center;gap:.15rem;height:.9rem;margin-top:.05rem;display:flex}.mark-pain{color:var(--pain);font-size:.6875rem;font-weight:700;line-height:1}.mark-pain:before{content:"▲";vertical-align:.1em;margin-right:1px;font-size:.5rem}.mark-fertile{background:repeating-linear-gradient(90deg, var(--fertile) 0 4px, transparent 4px 6px);border-radius:2px;height:3px;position:absolute;bottom:2px;left:12%;right:12%}.mark-notes{border-top:.5rem solid var(--ink-2);border-left:.5rem solid #0000;width:0;height:0;position:absolute;top:3px;right:3px}.legend{color:var(--ink-2);grid-template-columns:repeat(auto-fill,minmax(9.5rem,1fr));gap:.4rem .75rem;margin:.75rem 0 0;padding:0;font-size:.8125rem;list-style:none;display:grid}.legend li{align-items:center;gap:.5rem;display:flex}.legend .swatch{flex:none;place-items:center;width:1.5rem;height:1.5rem;display:grid;position:relative}.legend .swatch .num{border-radius:50%;width:1.3rem;height:1.3rem;display:block}.sheet{z-index:30;background:var(--bg);-webkit-overflow-scrolling:touch;overscroll-behavior:contain;position:fixed;inset:0;overflow-y:auto}.sheet-inner{max-width:34rem;padding:0 1rem calc(env(safe-area-inset-bottom) + 2rem);margin:0 auto}.sheet-bar{z-index:2;background:var(--bg);border-bottom:1px solid var(--line);padding:calc(env(safe-area-inset-top) + .5rem) 1rem .5rem;justify-content:space-between;align-items:center;gap:.75rem;margin:0 -1rem 1rem;display:flex;position:sticky;top:0}.sheet-bar h1{font-size:1.25rem}@media (prefers-reduced-motion:no-preference){.sheet{animation:.18s ease-out rise}@keyframes rise{0%{opacity:0;transform:translateY(1.5rem)}}}.scrim{z-index:50;background:#0810138c;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.dialog{background:var(--surface);border-radius:var(--r-m);border:1px solid var(--line);width:100%;max-width:24rem;padding:1.25rem}.dialog .row{flex-wrap:wrap;justify-content:flex-end;margin-top:1.25rem}.section{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m)}.section+.section{margin-top:.75rem}.section>h2{font-family:var(--sans);letter-spacing:0;margin:0;font-size:1rem}.section-toggle{text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:.75rem;width:100%;min-height:3.25rem;padding:.75rem 1rem;font-weight:650;display:flex}.section-toggle .summary{color:var(--ink-2);text-align:right;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.875rem;font-weight:400;overflow:hidden}.section-toggle .caret{flex:none;transition:transform .15s}.section-toggle[aria-expanded=true] .caret{transform:rotate(90deg)}.section-body{padding:0 1rem 1rem}.section-body>*+*{margin-top:1.1rem}.med-row{grid-template-columns:1fr 7.5rem var(--tap);align-items:center;gap:.5rem;display:grid}.med-row+.med-row{margin-top:.5rem}.stats{grid-template-columns:1fr 1fr;gap:.75rem;display:grid}.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);padding:.875rem}.stat dt{color:var(--ink-2);font-size:.875rem}.stat dd{font-family:var(--serif);margin:.2rem 0 0;font-size:1.5rem;font-weight:600;line-height:1.15}.stat dd small{font-family:var(--sans);color:var(--ink-2);margin-top:.15rem;font-size:.8125rem;font-weight:400;display:block}dl{margin:0}.chart svg{width:100%;height:auto;display:block;overflow:visible}.chart .grid{stroke:var(--line);stroke-width:1px}.chart .axis{fill:var(--ink-2);font-size:11px;font-family:var(--sans)}.chart .bar{fill:var(--pain-fill)}.chart .bar.sel{fill:var(--pain);stroke:var(--ink);stroke-width:1.5px}.chart .hit{fill:#0000;cursor:pointer}.chart .hit:focus-visible{stroke:var(--accent);stroke-width:2px;outline:none}.chart .threshold{stroke:var(--ink-2);stroke-dasharray:3 3;stroke-width:1px}.chart .readout{min-height:1.5rem;margin-top:.4rem;font-size:.875rem}details>summary{min-height:var(--tap);color:var(--accent);cursor:pointer;align-items:center;font-size:.875rem;font-weight:600;display:flex}table.data{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:.875rem}table.data th,table.data td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:.4rem .5rem .4rem 0}table.data th{color:var(--ink-2);font-weight:600}.meter{background:var(--sunken);border-radius:999px;gap:2px;height:.75rem;display:flex;overflow:hidden}.meter span{min-width:2px;display:block}.meter .helped{background:var(--accent)}.meter .somewhat{background:repeating-linear-gradient(135deg, var(--accent) 0 3px, transparent 3px 6px)}.meter .not-much{background:var(--ink-2);opacity:.45}.flag{border-left:.3rem solid var(--pain-fill);padding-left:.75rem}.flag+.flag{margin-top:1rem}.flag ul,.plain-list{color:var(--ink-2);margin:.3rem 0 0;padding-left:1.1rem;font-size:.875rem}.menu{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);margin:0;padding:0;list-style:none;overflow:hidden}.menu li+li{border-top:1px solid var(--line)}.menu button{text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:1rem;width:100%;min-height:3.5rem;padding:.6rem 1rem;display:flex}.menu .value{color:var(--ink-2);text-align:right;font-size:.875rem}.back{margin:-.25rem 0 .75rem -.5rem}.list-edit{margin:0;padding:0;list-style:none}.list-edit li{min-height:var(--tap);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:.5rem;display:flex}.lock{z-index:100;background:var(--bg);place-items:center;padding:1.5rem;display:grid;position:fixed;inset:0}.lock-inner{text-align:center;width:100%;max-width:19rem}.pin-dots{justify-content:center;gap:.6rem;min-height:1.25rem;margin:1.25rem 0;display:flex}.pin-dots i{border:2px solid var(--ink);border-radius:50%;width:.9rem;height:.9rem}.pin-dots i.on{background:var(--ink)}.keypad{grid-template-columns:repeat(3,1fr);gap:.6rem;display:grid}.keypad button{aspect-ratio:1.25;border-radius:var(--r-m);border:1.5px solid var(--line);background:var(--surface);font-family:var(--serif);font-size:1.5rem}.keypad button.util{font-family:var(--sans);color:var(--accent);font-size:.9375rem;font-weight:600}.report{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);padding:1.25rem}.report h2{border-bottom:1.5px solid var(--ink);margin:1.5rem 0 .5rem;padding-bottom:.25rem;font-size:1.125rem}.report h3{margin:1rem 0 .25rem}.report p,.report li{font-size:.9375rem}.report .chart{break-inside:avoid;max-width:30rem}.report table,.report .flag{break-inside:avoid}@media print{:root,:root[data-theme=dark],:root:not([data-theme=light]){--bg:#fff;--surface:#fff;--sunken:#eee;--ink:#000;--ink-2:#333;--line:#999;--accent:#000;--pain:#000;--pain-fill:#666;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}body{background:#fff}.app,.tabbar,.no-print,.sheet-bar{display:none!important}.sheet{animation:none;position:static;overflow:visible}.sheet-inner{max-width:none;padding:0}.report{border:0;padding:0}@page{margin:16mm}}input[type=password]{letter-spacing:.2em}.chip[aria-selected=true]{border-color:var(--accent);background:var(--accent);color:var(--on-accent);font-weight:600}.legend .swatch.day{aspect-ratio:auto;background:0 0;border:0;min-height:0;padding:0}.report details,.report .readout{display:none}.card+.banner,.banner+.card{margin-top:.75rem}.steps .day-chip{justify-content:center;min-width:0;padding-inline:0}.steps .day-chip[aria-pressed=true]:before{content:none}.steps .day-chip[aria-pressed=true]{text-underline-offset:.2em;text-decoration:underline}
