:root{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;color:#29243c;background:#fbf6f5;font-synthesis:none;--ink:#29243c;--muted:#88849a;--rose:#e85f7c;--rose-dark:#cb4768;--rose-pale:#fde8ed;--violet:#7874c7;--violet-pale:#efedff;--line:#eee8eb;--shadow:0 12px 36px rgba(94,56,77,.055)}
*{box-sizing:border-box}html{min-height:100%;-webkit-text-size-adjust:100%}body{margin:0;min-height:100vh}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:default;opacity:.55}.hidden{display:none!important}h1,h2,p{margin:0}h1{font-size:1.82rem;letter-spacing:-.045em;line-height:1.35;font-weight:750}h2{font-size:1.18rem;line-height:1.45;font-weight:700}p{line-height:1.6}.app-shell{min-height:100vh;max-width:720px;margin:auto;padding:env(safe-area-inset-top) 18px calc(106px + env(safe-area-inset-bottom));position:relative}.topbar{height:60px;display:flex;align-items:center;justify-content:space-between;position:relative;z-index:2}.brand{display:flex;align-items:center;gap:8px;font-size:1.13rem;font-weight:800;letter-spacing:.08em}.brand-mark{color:var(--rose);font-size:1.3rem}.sync-status{display:flex;align-items:center;gap:7px;border:0;background:#fff;padding:8px 11px;border-radius:99px;color:#666278;font-size:.78rem;box-shadow:0 3px 18px rgba(71,47,62,.06)}.sync-dot{width:7px;height:7px;background:#aba7b1;border-radius:50%;flex:none}.sync-status.online .sync-dot{background:#65af9c}.sync-status.pending .sync-dot{background:#e6ad68}.intro{position:relative;min-height:125px;display:flex;align-items:center;overflow:hidden}.intro>div{position:relative;z-index:1}.eyebrow{font-size:.77rem;color:#b26880;letter-spacing:.11em;font-weight:700;margin-bottom:6px}.intro-sub{font-size:.86rem;color:var(--muted);margin-top:7px}.floral{position:absolute;width:190px;height:auto;right:-24px;top:-42px;opacity:.72;pointer-events:none}.card{background:#fff;border:1px solid rgba(233,223,227,.78);border-radius:25px;box-shadow:var(--shadow)}.calendar-card{padding:19px 15px 17px}.month-bar{display:grid;grid-template-columns:38px minmax(0,1fr) 38px auto;align-items:center;gap:3px;margin-bottom:22px}.month-bar h2{text-align:center;font-size:1.21rem;letter-spacing:.03em}.icon-button{height:38px;width:38px;background:none;border:0;border-radius:50%;font-size:1.65rem;color:#51495e;line-height:1}.icon-button:active,.today-button:active,.text-button:active{background:#f8edf0}.today-button{border:0;background:var(--rose-pale);color:var(--rose-dark);border-radius:99px;padding:9px 12px;font-size:.8rem;font-weight:700;margin-left:9px}.weekdays,.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center}.weekdays{color:#aaa5b1;font-size:.79rem;margin-bottom:9px}.weekdays span{height:25px}.calendar-grid{row-gap:7px}.date-cell{border:0;background:transparent;min-width:0;min-height:50px;padding:4px 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border-radius:16px;color:var(--ink);position:relative}.date-cell.other-month{color:#c9c3cc}.date-cell.selected{outline:2px solid var(--ink);outline-offset:-3px}.date-cell.today .day-number{font-weight:800}.date-cell.today:not(.selected):after{content:"";position:absolute;bottom:2px;width:4px;height:4px;border-radius:50%;background:var(--ink)}.day-number{width:34px;height:34px;display:grid;place-items:center;border-radius:50%;font-size:.96rem;position:relative;z-index:1}.date-cell.actual .day-number{background:#ef728b;color:#fff}.date-cell.prediction .day-number{background:#fde9ee;color:#b34866}.date-cell.intimate:not(.actual):not(.prediction) .day-number{background:#f3f0ff}.day-indicators{height:5px;display:flex;gap:3px;align-items:center;justify-content:center}.day-indicators i{display:block;width:4px;height:4px;background:var(--rose);border-radius:50%}.day-indicators i.heart{background:var(--violet);width:5px;height:5px}.date-cell.actual .day-indicators i:not(.heart){background:#fff}.legend{display:flex;justify-content:center;gap:11px;flex-wrap:wrap;padding:19px 0 0;color:#847e8e;font-size:.7rem}.legend span{display:flex;align-items:center;gap:5px;white-space:nowrap}.legend-mark{width:11px;height:11px;border-radius:50%;display:inline-block}.legend-mark.period{background:#ef728b}.legend-mark.predicted{background:#f9cdd8}.legend-mark.intimacy{background:var(--violet-pale);border:2px solid var(--violet)}.forecast{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:17px 18px;margin-top:14px;background:linear-gradient(110deg,#fff,#fff9fa)}.forecast .forecast-label{font-size:.76rem;font-weight:700;color:#b77789;margin-bottom:3px}.forecast strong{font-size:1.12rem;color:var(--ink)}.forecast p{font-size:.77rem;color:var(--muted);margin-top:3px}.forecast-icon{width:41px;height:41px;display:grid;place-items:center;border-radius:15px;background:var(--rose-pale);color:var(--rose);font-size:1.27rem;flex:none}.day-section{margin-top:26px}.section-heading{display:flex;justify-content:space-between;align-items:end;gap:10px;margin-bottom:14px;padding:0 3px}.section-heading h2{font-size:1.35rem}.text-button{border:0;background:none;color:var(--rose-dark);font-size:.85rem;font-weight:700;padding:8px;border-radius:9px;white-space:nowrap}.day-records{display:grid;gap:10px}.empty-day{border:1px dashed #e5dce2;color:#9990a1;border-radius:19px;padding:19px;text-align:center;font-size:.85rem;background:rgba(255,255,255,.5)}.record-card{width:100%;background:#fff;border:1px solid var(--line);border-radius:19px;text-align:left;padding:15px 16px;display:flex;align-items:center;gap:12px;box-shadow:0 4px 18px rgba(94,56,77,.035);color:var(--ink)}.record-icon{width:39px;height:39px;border-radius:14px;display:grid;place-items:center;flex:none;font-size:1.2rem}.record-icon.period{background:var(--rose-pale);color:var(--rose)}.record-icon.intimacy{background:var(--violet-pale);color:var(--violet)}.record-copy{min-width:0;flex:1}.record-copy strong{display:block;font-size:.9rem}.record-copy small{display:block;font-size:.75rem;color:var(--muted);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.record-chevron{color:#aca6b1;font-size:1.4rem}.bottom-nav{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,720px);height:calc(76px + env(safe-area-inset-bottom));padding:8px 34px calc(8px + env(safe-area-inset-bottom));background:rgba(255,255,255,.96);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border-top:1px solid #f0e9ed;display:flex;justify-content:space-between;z-index:10}.nav-item{border:0;background:none;color:#9994a3;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-width:70px;font-size:.7rem;font-weight:650}.nav-item.active{color:var(--rose-dark)}.nav-icon{font-size:1.55rem;font-weight:300;line-height:1}.fab{position:fixed;z-index:11;bottom:calc(92px + env(safe-area-inset-bottom));right:max(24px,calc((100vw - 680px)/2));height:56px;width:56px;border:0;border-radius:20px;background:linear-gradient(145deg,#ee7d92,#d85577);box-shadow:0 9px 22px rgba(219,74,112,.26);color:white;font-size:1.9rem;font-weight:300;line-height:1}.page-heading{padding:22px 3px 20px}.insights-view,.settings-view{padding-bottom:20px}.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.stat-card{padding:18px}.stat-card span{display:block;color:var(--muted);font-size:.78rem}.stat-card strong{display:block;font-size:1.65rem;margin:8px 0 2px;letter-spacing:-.03em}.stat-card small{font-size:.72rem;color:#aaa3ad}.history-card{margin-top:14px;padding:18px}.history-card h2{margin-bottom:13px}.history-row{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-top:1px solid var(--line);font-size:.85rem}.history-row span:last-child{color:var(--muted)}.insight-note,.footnote{font-size:.76rem;color:#888292;line-height:1.75;padding:14px 3px}.settings-card{padding:20px;margin-bottom:12px}.settings-card h2{margin-bottom:7px}.settings-card p{font-size:.83rem;color:var(--muted);line-height:1.65}.settings-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:16px}.primary-button,.secondary-button,.subtle-button,.danger-button{border-radius:13px;padding:12px 16px;min-height:44px;font-size:.84rem;font-weight:700;border:0;text-align:center}.primary-button{background:var(--rose);color:#fff;box-shadow:0 6px 16px rgba(232,95,124,.18)}.primary-button:active{background:var(--rose-dark)}.secondary-button{background:#f8f3f5;color:#594e62}.subtle-button{background:none;color:#87808d}.danger-button{background:#fff1f2;color:#bd435b}.file-button{display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.wide{width:100%}.overlay{position:fixed;inset:0;background:rgba(38,26,43,.35);display:flex;justify-content:center;align-items:end;z-index:20;padding:0}.sheet{width:min(100%,720px);background:#fff;border-radius:26px 26px 0 0;padding:12px 20px calc(27px + env(safe-area-inset-bottom));max-height:92vh;overflow-y:auto;box-shadow:0 -12px 42px rgba(36,24,46,.14)}.sheet-handle{width:36px;height:4px;background:#e8e0e5;border-radius:99px;margin:0 auto 16px}.sheet-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.sheet-heading h2{font-size:1.27rem}.close-button{border:0;background:#f7f2f4;color:#6a6370;width:34px;height:34px;border-radius:50%;font-size:1.25rem;line-height:1}.sheet-sub{color:var(--muted);font-size:.8rem;margin:6px 0 18px}.action-option{display:flex;align-items:center;gap:13px;width:100%;border:1px solid var(--line);background:#fff;border-radius:17px;padding:13px;text-align:left;color:var(--ink);margin-top:10px}.option-icon{height:42px;width:42px;border-radius:14px;display:grid;place-items:center;font-size:1.3rem}.option-icon.rose{color:var(--rose);background:var(--rose-pale)}.option-icon.violet{color:var(--violet);background:var(--violet-pale)}.action-option strong,.action-option small{display:block}.action-option strong{font-size:.9rem}.action-option small{font-size:.74rem;color:var(--muted);margin-top:3px}.option-arrow{font-size:1.5rem;margin-left:auto;color:#b6afbb}.form-sheet form{display:grid;gap:16px;margin-top:18px}.field{display:grid;gap:7px;font-size:.79rem;font-weight:700;color:#6f6675;min-width:0}.field input,.field select,.field textarea{width:100%;border:1px solid #e8dfe4;background:#fff;border-radius:12px;color:var(--ink);padding:11px 12px;min-height:45px;outline:none;font-size:.91rem}.field input:focus,.field select:focus,.field textarea:focus{border-color:#df8da3;box-shadow:0 0 0 3px #fcebf0}.field textarea{resize:vertical}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.chip-field{border:0;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:8px}.chip-field legend{font-size:.79rem;font-weight:700;color:#6f6675;margin-bottom:9px;padding:0}.chip-field label{position:relative;cursor:pointer}.chip-field input{position:absolute;opacity:0;width:1px;height:1px}.chip-field span{display:inline-block;border:1px solid #ece5e9;border-radius:99px;padding:8px 11px;font-size:.79rem;color:#706979;background:#fff}.chip-field input:checked+span{background:#fce9ee;border-color:#f3cbd5;color:#bb4e69}.chip-field input:focus-visible+span{outline:2px solid var(--ink)}.form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:2px}.form-actions .primary-button{min-width:120px}.gate-card{width:min(100%,430px);background:#fff;border-radius:28px 28px 0 0;padding:29px 24px calc(32px + env(safe-area-inset-bottom));text-align:center;box-shadow:0 -12px 42px rgba(36,24,46,.14)}.gate-symbol{width:56px;height:56px;border-radius:19px;background:var(--rose-pale);color:var(--rose);display:grid;place-items:center;font-size:1.8rem;margin:0 auto 19px}.gate-card h2{font-size:1.43rem;margin-bottom:8px}.gate-card>p:not(.eyebrow){font-size:.83rem;color:var(--muted)}.gate-card form{display:grid;gap:13px;text-align:left;margin:22px 0 11px}.gate-hint{margin-top:14px;font-size:.73rem!important;line-height:1.6}.toast{position:fixed;z-index:40;bottom:calc(98px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);background:#30293d;color:#fff;border-radius:12px;padding:10px 15px;font-size:.8rem;box-shadow:0 9px 25px #30293d40;max-width:85vw;text-align:center}
@media(min-width:720px){.app-shell{padding-left:30px;padding-right:30px}.intro{min-height:140px}.floral{right:0;width:210px}.calendar-card{padding:25px 25px 19px}.date-cell{min-height:67px}.legend{font-size:.77rem}.bottom-nav{border-radius:22px 22px 0 0}.sheet{border-radius:26px 26px 0 0}.gate-card{border-radius:28px;align-self:center;padding-bottom:32px}.stat-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:370px){.app-shell{padding-left:12px;padding-right:12px}.calendar-card{padding:16px 10px}.date-cell{min-height:44px}.day-number{width:31px;height:31px;font-size:.9rem}.legend{gap:7px;font-size:.65rem}.field-row{grid-template-columns:1fr}.intro h1{font-size:1.6rem}}
@media(prefers-reduced-motion:no-preference){.date-cell,.record-card,.action-option,.primary-button,.fab{transition:transform .15s ease,background .15s ease}.date-cell:active,.record-card:active,.action-option:active,.fab:active{transform:scale(.96)}}

.vault-locked .app-shell{visibility:hidden}.privacy-cover .app-shell,.privacy-cover .overlay{visibility:hidden}

.legend,.nav-item{font-size:.75rem}.field,.chip-field legend,.chip-field span,.primary-button,.secondary-button,.subtle-button,.danger-button{font-size:.875rem}.field input,.field select,.field textarea{font-size:1rem}
html,body{touch-action:pan-x pan-y;overscroll-behavior:none}button,a,input,select,textarea,label{touch-action:pan-x pan-y}input,select,textarea{font-size:16px!important}
.phase-card{padding:19px;margin-top:14px}.phase-heading{display:flex;justify-content:space-between;align-items:center;gap:6px}.phase-heading h2{font-size:1.3rem}.phase-heading h2 small{font-size:.68rem;margin-left:8px;color:var(--muted);font-weight:500}.phase-track{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin:17px 0 13px}.phase-track span{padding:9px 2px;border-radius:10px;text-align:center;font-size:.72rem;border:2px solid transparent}.phase-track .current{border-color:currentColor;font-weight:700}.menstrual{background:#fde8ed;color:#b64b67}.follicular{background:#eaf5f0;color:#427e6c}.ovulation{background:#fff1d8;color:#986719}.luteal{background:#eeebfb;color:#75629a}.phase-description,.phase-basis{font-size:.8rem;color:#797180;line-height:1.65}.phase-basis{margin-top:5px}.phase-dates{display:grid;grid-template-columns:1fr 1fr;gap:15px 10px;margin-top:17px;border-top:1px solid var(--line);padding-top:16px}.phase-dates span{display:block;font-size:.7rem;color:var(--muted)}.phase-dates strong{display:block;font-size:.85rem;margin-top:5px}.phase-caution{font-size:.72rem;color:#9a7b83;margin:15px 0}.phase-card>.secondary-button{width:100%}.algorithm-details{font-size:.76rem;color:#817987;margin-top:17px;line-height:1.7}.algorithm-details summary{cursor:pointer;color:#736379}.algorithm-details p{margin-top:10px}.algorithm-details a{display:block;color:#a45070;margin-top:8px}.phase-legend{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin-top:13px;font-size:.65rem;align-items:center}.phase-legend span{border-radius:6px;padding:4px 6px}.phase-legend small{color:var(--muted)}.date-cell.phase-follicular .day-number{background:#eaf5f0}.date-cell.phase-ovulation .day-number{background:#fff1d8;color:#986719}.date-cell.phase-luteal .day-number{background:#eeebfb;color:#75629a}.record-icon.observation{background:#eaf5f0;color:#427e6c}.observation-table{overflow-x:auto}.observation-table table{width:100%;border-collapse:collapse;font-size:.76rem;text-align:left}.observation-table td,.observation-table th{padding:10px 3px;border-bottom:1px solid var(--line)}.observation-table th{color:var(--muted);font-weight:500}
