:root{--bg:#fdf6f0;--ink:#43302b;--ink-soft:#8a6f66;--card:#fffdfb;--line:#f0e2d8;--rose:#c65f5f;--rose-deep:#a83e3e;--rose-soft:#f6dcd7;--gold:#d9a441;--sage:#7d9b76;--sage-soft:#e4ecdf;--mauve:#a47d99;--shadow:0 10px 30px -18px #5e362873;--radius:22px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0}body{color:var(--ink);background:radial-gradient(60rem 40rem at 110% -10%, #fbe9df 0%, transparent 60%), radial-gradient(50rem 35rem at -20% 110%, #f4ece2 0%, transparent 55%), var(--bg);min-height:100dvh;font-family:Karla,sans-serif}.app{max-width:30rem;padding:calc(1.25rem + env(safe-area-inset-top)) 1.1rem calc(2rem + env(safe-area-inset-bottom));flex-direction:column;gap:1rem;margin:0 auto;display:flex}.loading{text-align:center;color:var(--ink-soft);padding-top:40dvh}.header{justify-content:space-between;align-items:baseline;padding:0 .25rem;display:flex}h1{font-optical-sizing:auto;letter-spacing:-.02em;color:var(--rose-deep);font-family:Fraunces,serif;font-size:2rem;font-weight:600}.header-date{color:var(--ink-soft);font-size:.95rem}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.25rem}.card-title{margin-bottom:.75rem;font-family:Fraunces,serif;font-size:1.2rem;font-weight:500}.today-card{position:relative;overflow:hidden}.today-card:before{content:"";pointer-events:none;opacity:.5;position:absolute;inset:0}.phase-menstrual:before{background:radial-gradient(20rem 12rem at 100% 0%, var(--rose-soft), transparent 70%)}.phase-follicular:before{background:radial-gradient(20rem 12rem at 100% 0%, var(--sage-soft), transparent 70%)}.phase-ovulation:before{background:radial-gradient(20rem 12rem at 100% 0,#f8ecd4,#0000 70%)}.phase-luteal:before{background:radial-gradient(20rem 12rem at 100% 0,#ece0ea,#0000 70%)}.today-top{justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;display:flex}.today-label{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);font-size:.8rem}.today-day{color:var(--rose-deep);font-family:Fraunces,serif;font-size:3.2rem;font-weight:500;line-height:1}.today-phase{border:1px solid var(--line);background:#ffffffb3;border-radius:999px;align-items:center;gap:.4rem;padding:.4rem .8rem;font-size:.9rem;font-weight:600;display:flex}.phase-emoji{font-size:1.05rem}.phase-description{color:var(--ink-soft);margin-bottom:1rem;line-height:1.5}.projected-note{color:var(--ink-soft);border:1px dashed var(--rose);background:#ffffffb3;border-radius:12px;margin-bottom:1rem;padding:.6rem .75rem;font-size:.85rem;line-height:1.45}.today-facts{gap:.6rem;display:flex}.fact{border:1px solid var(--line);background:#ffffffb3;border-radius:14px;flex-direction:column;flex:1;gap:.15rem;padding:.6rem .7rem;display:flex}.fact-value{font-family:Fraunces,serif;font-size:1.25rem;font-weight:500}.fact-label{color:var(--ink-soft);text-transform:uppercase;letter-spacing:.05em;font-size:.72rem}.food-list{flex-direction:column;gap:.5rem;margin-bottom:.9rem;padding:0;list-style:none;display:flex}.food-list li{padding-left:1.4rem;line-height:1.45;position:relative}.food-list li:before{content:"✦";color:var(--gold);position:absolute;left:.15rem}.food-avoid{color:var(--ink-soft);border-top:1px dashed var(--line);padding-top:.75rem;font-size:.88rem}.key-form{flex-direction:column;gap:.6rem;display:flex}.pin-inputs{justify-content:center;gap:.5rem;display:flex}.pin-digit{width:2.6rem;height:3.2rem;font:inherit;text-align:center;border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:12px;font-size:1.5rem;font-weight:700}.pin-digit:focus{outline:2px solid var(--rose);outline-offset:1px}.key-submit{font:inherit;background:var(--rose-deep);color:#fff;cursor:pointer;border:none;border-radius:14px;padding:.75rem;font-weight:700}.key-submit:active{background:var(--rose)}.key-error{color:var(--rose-deep);margin-top:.75rem;font-size:.9rem}.calendar-header{justify-content:space-between;align-items:center;margin-bottom:.9rem;display:flex}.month-label{font-family:Fraunces,serif;font-size:1.15rem;font-weight:500}.month-nav{border:1px solid var(--line);background:var(--card);width:2.4rem;height:2.4rem;color:var(--ink);cursor:pointer;border-radius:50%;font-size:1.5rem;line-height:1}.month-nav:active{background:var(--rose-soft)}.calendar-grid{grid-template-columns:repeat(7,1fr);gap:.3rem;display:grid}.weekday{text-align:center;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);padding-bottom:.3rem;font-size:.72rem;font-weight:700}.day{aspect-ratio:1;font:inherit;color:var(--ink);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:50%;font-size:.95rem;font-weight:500;transition:transform .1s}.day:active:not(:disabled){transform:scale(.88)}.day.is-future{color:#c9b6ac;cursor:default}.day.is-today{border-color:var(--rose-deep);font-weight:700}.day.flow-light{color:var(--rose-deep);background:#f2c4bc}.day.flow-medium{color:#fff;background:#e08a80}.day.flow-heavy{background:var(--rose-deep);color:#fff}.day.is-predicted{border:1.5px dashed var(--rose);color:var(--rose-deep)}.day.is-predicted.is-today{border-style:solid}.day.is-fertile{background:var(--sage-soft);color:#55704e}.day.is-ovulation{box-shadow:inset 0 0 0 1.5px var(--sage);font-weight:700}.legend{border-top:1px dashed var(--line);flex-direction:column;gap:.35rem;margin-top:1rem;padding-top:.85rem;display:flex}.legend-item{color:var(--ink-soft);align-items:center;gap:.5rem;font-size:.82rem;display:flex}.dot{border-radius:50%;flex-shrink:0;width:.85rem;height:.85rem}.dot-flow{background:var(--rose-deep)}.dot-predicted{border:1.5px dashed var(--rose)}.dot-fertile{background:var(--sage-soft);box-shadow:inset 0 0 0 1.5px var(--sage)}
