:root{--color-paper: oklch(96.5% .014 95);--color-paper-2: oklch(93.8% .016 92);--color-card: oklch(99.2% .006 95);--color-ink: oklch(27% .02 68);--color-ink-2: oklch(46% .022 66);--color-rule: oklch(88% .016 88);--color-accent: oklch(50% .082 152);--color-accent-strong: oklch(43% .085 152);--color-accent-ink: oklch(38% .09 152);--color-accent-soft: oklch(93.5% .03 152);--color-danger: oklch(52% .15 25);--color-focus: oklch(50% .11 152);--color-period: oklch(58% .13 12);--color-period-soft: oklch(92% .045 14);--color-med: oklch(60% .1 62);--color-med-soft: oklch(92% .04 66);--font-display: "Fraunces", Georgia, serif;--font-body: "Hanken Grotesk", system-ui, -apple-system, sans-serif;--font-data: "IBM Plex Mono", ui-monospace, "SFMono-Regular", monospace;--space-3xs: .25rem;--space-2xs: .5rem;--space-xs: .75rem;--space-sm: 1rem;--space-md: 1.5rem;--space-lg: 2rem;--space-xl: 3rem;--space-2xl: 4.5rem;--text-xs: .75rem;--text-sm: .8125rem;--text-md: 1rem;--text-lg: 1.25rem;--text-xl: 1.6rem;--text-display: clamp(1.9rem, 7vw, 2.6rem);--ease-out: cubic-bezier(.16, 1, .3, 1);--dur-short: .2s;--radius-card: 16px;--radius-input: 10px;--radius-pill: 999px;--nav-h: 62px;--maxw: 540px}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;overflow-x:clip}html,body,#root{min-height:100%}body{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);font-size:var(--text-md);line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3{font-family:var(--font-display);font-weight:560;font-style:normal;letter-spacing:-.02em;line-height:1.08;overflow-wrap:anywhere;min-width:0;margin:0}.app{max-width:var(--maxw);margin:0 auto;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;position:relative}.app-header{position:sticky;top:0;z-index:10;background:linear-gradient(var(--color-paper) 72%,transparent);padding:calc(var(--space-lg) + env(safe-area-inset-top)) var(--space-md) var(--space-xs)}.app-header .masthead{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-sm)}.app-header h1{font-size:var(--text-display)}.app-header .sub{font-family:var(--font-data);font-size:var(--text-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--color-ink-2);margin-top:var(--space-2xs)}.content{flex:1;padding:var(--space-2xs) var(--space-md) calc(var(--nav-h) + var(--space-2xl) + env(safe-area-inset-bottom))}.bottom-nav{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:var(--maxw);height:calc(var(--nav-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:color-mix(in oklch,var(--color-card) 88%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--color-rule);display:flex;z-index:20}.bottom-nav a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;text-decoration:none;color:var(--color-ink-2);font-size:.625rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;position:relative;transition:color var(--dur-short) var(--ease-out)}.bottom-nav a svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.bottom-nav a.active{color:var(--color-accent-ink)}.bottom-nav a.active:before{content:"";position:absolute;top:0;width:26px;height:3px;border-radius:0 0 var(--radius-pill) var(--radius-pill);background:var(--color-accent)}.eyebrow{font-family:var(--font-data);font-size:var(--text-xs);letter-spacing:.1em;text-transform:uppercase;color:var(--color-ink-2);margin:var(--space-md) var(--space-3xs) var(--space-2xs);display:flex;align-items:baseline;gap:var(--space-2xs)}.eyebrow .count{color:var(--color-accent-ink)}.card{background:var(--color-card);border:1px solid var(--color-rule);border-radius:var(--radius-card);padding:var(--space-md);margin-bottom:var(--space-xs)}.card h2,.card h3{font-size:var(--text-lg);margin-bottom:var(--space-2xs)}.row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-xs)}.muted{color:var(--color-ink-2);font-size:var(--text-sm)}.data{font-family:var(--font-data);font-variant-numeric:tabular-nums}.pill{display:inline-block;font-family:var(--font-data);font-size:.6875rem;font-weight:500;letter-spacing:.04em;padding:3px 9px;border-radius:var(--radius-pill);background:var(--color-accent-soft);color:var(--color-accent-ink);text-transform:lowercase}label{display:block;font-size:var(--text-sm);font-weight:600;color:var(--color-ink);margin:var(--space-sm) 0 var(--space-3xs)}input,select,textarea{width:100%;font:inherit;color:var(--color-ink);padding:11px 12px;border:1px solid var(--color-rule);border-radius:var(--radius-input);background:var(--color-paper);transition:border-color var(--dur-short) var(--ease-out)}input::placeholder,textarea::placeholder{color:color-mix(in oklch,var(--color-ink-2) 70%,transparent)}input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--color-focus);outline-offset:1px;border-color:var(--color-accent)}textarea{min-height:76px;resize:vertical;font-family:var(--font-body)}.field-row{display:flex;gap:var(--space-xs)}.field-row>*{flex:1;min-width:0}button{font:inherit;font-weight:600;cursor:pointer;border:1px solid transparent;border-radius:var(--radius-input);padding:12px 16px;background:var(--color-accent-strong);color:var(--color-paper);transition:transform var(--dur-short) var(--ease-out),background var(--dur-short) var(--ease-out)}button:hover{background:#164f2b}button:active{transform:translateY(1px)}button:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}button:disabled{opacity:.5;cursor:default}button.secondary{background:var(--color-paper);color:var(--color-ink);border-color:var(--color-rule)}button.secondary:hover{background:var(--color-paper-2)}button.ghost{background:transparent;color:var(--color-accent-ink);border-color:transparent;padding:8px 10px}button.ghost:hover{background:var(--color-accent-soft)}button.danger{background:transparent;color:var(--color-danger);border-color:transparent;padding:6px 10px}button.danger:hover{background:color-mix(in oklch,var(--color-danger) 12%,transparent)}button.block{width:100%}button.danger-fill{background:var(--color-paper);color:var(--color-danger);border:1px solid color-mix(in oklch,var(--color-danger) 45%,var(--color-rule))}button.danger-fill:hover{background:color-mix(in oklch,var(--color-danger) 10%,transparent)}.infotip{position:relative;display:inline-flex;vertical-align:middle}.infotip-btn{width:18px;height:18px;border-radius:50%;border:1px solid var(--color-rule);background:var(--color-paper);color:var(--color-ink-2);font-family:var(--font-data);font-size:11px;font-weight:700;line-height:1;display:grid;place-items:center;padding:0;cursor:pointer}.infotip-bubble{position:absolute;z-index:40;top:calc(100% + 6px);right:0;width:240px;max-width:72vw;background:var(--color-ink);color:var(--color-paper);font-family:var(--font-body);font-size:var(--text-xs);font-weight:400;line-height:1.45;text-transform:none;letter-spacing:0;padding:10px 12px;border-radius:10px;box-shadow:0 10px 30px -10px color-mix(in oklch,var(--color-ink) 55%,transparent)}.choice-row{display:flex;flex-wrap:wrap;gap:var(--space-2xs)}.choice{flex:1 1 28%;min-width:92px;display:flex;align-items:center;justify-content:center;gap:6px;margin:0;padding:12px 10px;border:1px solid var(--color-rule);border-radius:var(--radius-input);background:var(--color-card);color:var(--color-ink);font-weight:600;cursor:pointer}.choice input{position:absolute;opacity:0;width:0;height:0}.choice.on{border-color:var(--color-accent);background:var(--color-accent-soft);color:var(--color-accent-ink)}.badge-row{display:flex;flex-wrap:wrap;gap:var(--space-2xs)}.badge{padding:7px 12px;border-radius:var(--radius-pill);border:1px solid var(--color-rule);background:var(--color-card);color:var(--color-ink);font-size:var(--text-sm);font-weight:600;cursor:pointer}.badge.on{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-accent-ink)}.bw-values{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.bw-value-row{display:flex;align-items:center;gap:var(--space-xs)}.bw-label{flex:1;min-width:0;font-size:var(--text-sm);font-weight:600;display:flex;align-items:center;gap:6px}.bw-value-row input{flex:0 0 42%;max-width:150px}.guided{border-color:var(--color-accent)}.guided-row{display:flex;align-items:center;gap:var(--space-2xs)}.guided-row .block{flex:1}.stim-form{margin-top:var(--space-xs)}.completed-banner{border-color:var(--color-accent);background:linear-gradient(180deg,var(--color-accent-soft) 0%,var(--color-card) 60%)}.embryo-row{display:flex;align-items:center;gap:var(--space-2xs);margin-top:var(--space-2xs)}.embryo-n{flex:0 0 auto;color:var(--color-ink-2);font-size:var(--text-sm);width:26px}.embryo-row input[type=text],.embryo-row>input:not([type]){flex:1;min-width:0;padding:8px 10px}.frozen-check{flex:0 0 auto;display:inline-flex;align-items:center;gap:3px;margin:0;font-size:15px;cursor:pointer}.frozen-check input{width:auto}button.sm{padding:8px 13px;font-size:var(--text-sm)}.link-btn,.link-btn:hover,.link-btn:active{background:none;border:none;padding:0;transform:none;color:var(--color-accent-ink);font-weight:600;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.link-btn:focus-visible{outline:2px solid var(--color-focus);outline-offset:3px;border-radius:3px}.check-item{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-xs) 0;border-bottom:1px solid var(--color-rule)}.check-item:first-child{padding-top:0}.check-item:last-child{border-bottom:none;padding-bottom:0}.check-box{width:28px;height:28px;border-radius:9px;border:1.5px solid var(--color-rule);background:var(--color-paper);display:grid;place-items:center;color:var(--color-paper);flex:0 0 auto;padding:0;transition:background var(--dur-short) var(--ease-out),border-color var(--dur-short) var(--ease-out)}.check-box svg{width:16px;height:16px;stroke:currentColor;stroke-width:2.4;fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:20;stroke-dashoffset:20}.check-box.done{background:var(--color-accent-strong);border-color:var(--color-accent-strong)}.check-box.done svg{stroke-dashoffset:0;transition:stroke-dashoffset var(--dur-short) var(--ease-out)}.timeline{position:relative;margin-left:6px;padding-left:var(--space-md);border-left:2px solid var(--color-rule)}.timeline .event{position:relative;padding:2px 0 var(--space-md)}.timeline .event:last-child{padding-bottom:0}.timeline .event:before{content:"";position:absolute;left:calc(-1 * var(--space-md) - 7px);top:6px;width:12px;height:12px;border-radius:50%;background:var(--color-accent);border:3px solid var(--color-card)}.spark{display:block;width:100%;height:44px;margin-top:var(--space-2xs)}table.labs{width:100%;border-collapse:collapse;font-size:var(--text-sm)}table.labs th,table.labs td{text-align:left;padding:var(--space-2xs) var(--space-3xs);border-bottom:1px solid var(--color-rule)}table.labs tr:last-child td{border-bottom:none}table.labs th{color:var(--color-ink-2);font-family:var(--font-data);font-size:var(--text-xs);font-weight:500;letter-spacing:.06em;text-transform:uppercase}table.labs td.val{font-family:var(--font-data);font-variant-numeric:tabular-nums}.mood-row{display:flex;justify-content:space-between;gap:var(--space-3xs)}.mood-row button{flex:1;background:var(--color-paper);border:1px solid var(--color-rule);border-radius:var(--radius-input);font-size:22px;padding:8px 0;opacity:.55;transition:opacity var(--dur-short) var(--ease-out),border-color var(--dur-short) var(--ease-out),background var(--dur-short) var(--ease-out)}.mood-row button.on{opacity:1;border-color:var(--color-accent);background:var(--color-accent-soft)}.header-actions{display:flex;align-items:center;gap:var(--space-3xs)}.icon-btn{display:grid;place-items:center;padding:8px;border-radius:var(--radius-input);color:var(--color-ink-2);text-decoration:none}.icon-btn:hover{color:var(--color-accent-ink);background:var(--color-accent-soft)}.avatar{display:grid;place-items:center;width:38px;height:38px;flex:0 0 auto;border-radius:50%;background:var(--color-accent-strong);color:var(--color-paper);font-family:var(--font-display);font-weight:560;font-size:1.05rem;text-decoration:none;border:none;cursor:pointer}.avatar:hover{background:#164f2b}.avatar.lg{width:46px;height:46px;font-size:1.3rem}.field-hint{font-size:var(--text-xs);color:var(--color-ink-2);margin-top:var(--space-3xs)}.disclaimer{font-size:var(--text-xs);color:var(--color-ink-2);line-height:1.5;margin:var(--space-sm) 2px 0;padding-top:var(--space-2xs)}.forecast{border-color:var(--color-accent);background:linear-gradient(180deg,var(--color-accent-soft) 0%,var(--color-card) 42%)}.forecast-date{font-family:var(--font-display);font-size:var(--text-xl);font-weight:560;letter-spacing:-.02em;color:var(--color-accent-ink)}.forecast-rel{font-family:var(--font-data);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.05em;color:var(--color-ink-2);margin-top:2px}.forecast-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-xs);margin-top:var(--space-sm)}.forecast-grid>div{display:flex;flex-direction:column;gap:2px;min-width:0}.forecast-grid .k{font-size:var(--text-xs);color:var(--color-ink-2);text-transform:uppercase;letter-spacing:.04em}.forecast-grid .v{font-size:var(--text-sm);font-weight:600}.cal-nav{display:flex;gap:2px}.cal-nav button{font-size:22px;line-height:1;padding:4px 10px}.cal-month-label{font-family:var(--font-display);font-size:var(--text-lg);font-weight:560;margin:var(--space-2xs) 2px var(--space-sm)}.cal-week,.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal-wd{text-align:center;font-family:var(--font-data);font-size:var(--text-xs);color:var(--color-ink-2);padding-bottom:var(--space-3xs)}.cal-cell{aspect-ratio:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:2px;padding:5px 0 0;background:var(--color-card);border:1px solid var(--color-rule);border-radius:10px;color:var(--color-ink);font:inherit}.cal-cell.empty-cell{background:transparent;border:none}.cal-num{font-family:var(--font-data);font-size:var(--text-sm);line-height:1.1}.cal-cell.is-today{border-color:var(--color-accent)}.cal-cell.is-selected{outline:2px solid var(--color-accent);outline-offset:1px}.cal-cell.is-period{background:var(--color-period-soft);border-color:color-mix(in oklch,var(--color-period) 40%,var(--color-rule))}.cal-cell.is-period .cal-num{color:var(--color-period);font-weight:600}.cal-cell.is-period-pred .cal-num{color:var(--color-period)}.cal-cell.is-period-pred{border-style:dashed;border-color:color-mix(in oklch,var(--color-period) 50%,var(--color-rule))}.cal-cell.is-puncture{background:var(--color-accent-soft);border-color:var(--color-accent)}.cal-cell.is-puncture .cal-num{color:var(--color-accent-ink);font-weight:700}.cal-dots{display:flex;gap:2px;height:6px;align-items:center}.dot{width:5px;height:5px;border-radius:50%;display:inline-block}.dot-med{background:var(--color-med)}.dot-event{background:var(--color-accent)}.dot-journal{background:var(--color-ink-2)}.dot-trigger{background:transparent;border:1.5px solid var(--color-accent);width:6px;height:6px}.cal-legend{display:flex;flex-wrap:wrap;gap:var(--space-2xs) var(--space-sm);margin:var(--space-sm) 2px 0;font-size:var(--text-xs);color:var(--color-ink-2)}.cal-legend span{display:inline-flex;align-items:center;gap:5px}.cal-legend .lg{width:11px;height:11px;border-radius:3px;display:inline-block}.lg-period{background:var(--color-period-soft);border:1px solid var(--color-period)}.lg-period-pred{border:1px dashed var(--color-period)}.lg-punc{background:var(--color-accent-soft);border:1px solid var(--color-accent)}.day-line{padding:var(--space-2xs) 0;border-bottom:1px solid var(--color-rule);font-size:var(--text-sm)}.day-line:last-of-type{border-bottom:none}.day-line.strong{font-weight:600;color:var(--color-accent-ink)}.day-line.period{color:var(--color-period);font-weight:600}.day-actions{display:flex;flex-wrap:wrap;gap:var(--space-2xs);margin-top:var(--space-sm)}.period-form{margin-top:var(--space-sm)}.period-form label{margin-top:0}input[type=checkbox],input[type=radio]{width:auto}.check-line{display:flex;align-items:center;gap:var(--space-2xs);font-weight:600;margin:var(--space-2xs) 0}.check-line input{width:auto;transform:scale(1.2);accent-color:var(--color-accent-strong)}.milestone-link{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2xs);text-decoration:none;color:var(--color-accent-ink);font-weight:600}.milestone-link:hover{color:var(--color-accent-strong)}.milestone-link .muted{font-weight:400}.tap-hint{font-family:var(--font-data);font-size:var(--text-xs);color:var(--color-ink-2);white-space:nowrap}.dot-stim{background:var(--color-accent-strong);width:6px;height:6px;border-radius:1px;transform:rotate(45deg)}.dot-xfer{background:var(--color-period)}.cal-cell.has-band{background:color-mix(in oklch,var(--color-accent-soft) 55%,var(--color-card));border-bottom:3px solid var(--color-accent)}.cal-cell.has-band.is-period{background:var(--color-period-soft)}.cal-cell:hover{background:var(--color-card)}.cal-cell.is-period:hover{background:var(--color-period-soft)}.cal-cell.is-puncture:hover{background:var(--color-accent-soft)}.cal-cell.has-band:hover{background:color-mix(in oklch,var(--color-accent-soft) 55%,var(--color-card))}.badge:hover{background:var(--color-card)}.badge.on:hover{background:var(--color-accent-soft)}.choice:hover{background:var(--color-card)}.choice.on:hover{background:var(--color-accent-soft)}.check-box:hover{background:var(--color-paper)}.check-box.done:hover{background:var(--color-accent-strong)}.mood-row button:hover{background:var(--color-paper)}.mood-row button.on:hover{background:var(--color-accent-soft)}.infotip-btn:hover{background:var(--color-paper)}.empty{text-align:center;color:var(--color-ink-2);padding:var(--space-xl) var(--space-md);font-size:var(--text-sm)}.error{color:var(--color-danger);font-size:var(--text-sm);margin:var(--space-2xs) 0}.center-screen{min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:var(--space-md)}.auth-card{width:100%;max-width:400px;padding:var(--space-lg)}.auth-card h1{font-size:var(--text-display)}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.content>.card,.content>form.card,.content>a>.card{animation:rise var(--dur-short) var(--ease-out) both}.content>*:nth-child(2){animation-delay:30ms}.content>*:nth-child(3){animation-delay:60ms}.content>*:nth-child(4){animation-delay:90ms}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-delay:0ms!important;transition-duration:.001ms!important}.check-box.done svg{stroke-dashoffset:0}}
