:root{--bg:#F2F2F7;--card:#fff;--label:#000;--l2:rgba(60,60,67,.6);--l3:rgba(60,60,67,.3);--sep:rgba(60,60,67,.12);
--pri:#5E5CE6;--pri2:#7D7AFF;--pink:#FF8FAB;--lav:#C9B6FF;--green:#34C759;--orange:#FF9500;--teal:#30B0C7;--gray:#8E8E93;--red:#FF3B30;--night:#5856D6;--day:#FF9500;--rest:#8E8E93;--long:#AF52DE;
--r:18px;--sh:0 1px 2px rgba(0,0,0,.04),0 4px 16px rgba(0,0,0,.04);
--ease:cubic-bezier(.32,.72,0,1);--tab:calc(56px + env(safe-area-inset-bottom))}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0}
html,body{background:var(--bg)}
body{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","PingFang SC","Helvetica Neue",sans-serif;color:var(--label);
 -webkit-font-smoothing:antialiased;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;font-size:17px;letter-spacing:-.01em}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer;padding:0}
select,input{font:inherit;-webkit-user-select:text;user-select:text}
svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.press{transition:transform .18s var(--ease),opacity .18s}.press:active{transform:scale(.96);opacity:.85}
#app{padding:env(safe-area-inset-top) 16px 24px;max-width:560px;margin:0 auto}
#view-shift.active ~ *,#app:has(#view-shift.active){/* spacer via body class */}
body.shift-mode #app{padding-bottom:calc(var(--tab) + 24px)}
.view{display:none;animation:fade .35s var(--ease)}.view.active{display:block}
.page{display:none;animation:fade .35s var(--ease)}.page.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(6px)}}
.hdr{display:flex;justify-content:space-between;align-items:flex-end;padding:14px 4px 10px;gap:12px}
.home-hdr{padding-top:28px}
.home-lead{padding:0 4px 18px;font-size:15px}
.date{font-size:13px;color:var(--l2);font-weight:500}
h1{font-size:32px;font-weight:700;letter-spacing:-.02em;line-height:1.15}
.chip-person{background:#fff;box-shadow:var(--sh);border-radius:20px;padding:8px 14px;font-size:14px;font-weight:600;color:var(--pri);white-space:nowrap}
.muted{color:var(--l2);font-size:13px;line-height:1.45}
.card{background:var(--card);border-radius:var(--r);box-shadow:var(--sh);padding:14px;margin-bottom:12px}
.c-t{font-size:15px;font-weight:600;margin-bottom:10px}
.row-between{display:flex;justify-content:space-between;align-items:center}
.seg{display:flex;background:rgba(118,118,128,.12);border-radius:9px;padding:2px;gap:2px;flex-wrap:wrap}
.seg button{font-size:12px;font-weight:500;padding:4px 9px;border-radius:7px;color:var(--label);transition:background .2s}
.seg button.on{background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.12);font-weight:600}
.seg.big{margin:4px 0 14px}.seg.big button{flex:1;font-size:13px;padding:8px 4px;min-width:0}
.field{width:100%;font:inherit;font-size:17px;padding:13px 14px;border-radius:12px;border:0;background:rgba(118,118,128,.12);margin:0 0 12px;outline:none}
.lbl{font-size:13px;color:var(--l2);margin:4px 2px 6px}
.btn{display:block;width:100%;height:50px;border-radius:14px;font-size:17px;font-weight:600}
.primary{background:var(--pri);color:#fff}.ghost{background:rgba(118,118,128,.12);color:var(--pri)}
.tool-topbar{padding:10px 0 0}
.back-btn{font-size:16px;font-weight:500;color:var(--pri);padding:6px 4px;display:inline-flex;align-items:center}
.tool-card{width:100%;display:flex;align-items:center;gap:14px;text-align:left;background:#fff;border-radius:22px;box-shadow:var(--sh);padding:18px 16px;margin-bottom:14px}
.tool-icon{width:52px;height:52px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:26px;flex-shrink:0}
.shift-ico{background:linear-gradient(145deg,#E8E7FF,#D4D2FF)}
.med-ico{background:linear-gradient(145deg,#FFE4EC,#FFD0E0)}
.tool-body{flex:1;min-width:0}
.tool-title{font-size:20px;font-weight:700;letter-spacing:-.01em}
.tool-sub{font-size:13px;color:var(--l2);margin-top:3px}
.tool-chev{font-size:28px;color:var(--l3);font-weight:300;line-height:1;padding-right:2px}
.status-card{border-radius:24px;padding:28px 20px;margin-bottom:14px;color:#fff;text-align:center;position:relative;overflow:hidden;
 background:radial-gradient(120% 90% at 30% 15%,#9A98FF 0%,#6E6CF0 45%,#5250D6 100%);
 box-shadow:0 18px 36px -14px rgba(82,80,214,.45),0 2px 6px rgba(82,80,214,.2)}
.status-card.day{background:radial-gradient(120% 90% at 30% 15%,#FFCC66,#FF9500 55%,#E67E00);box-shadow:0 18px 36px -14px rgba(255,149,0,.45)}
.status-card.night{background:radial-gradient(120% 90% at 30% 15%,#8B89F0,#5856D6 55%,#3A38B0);box-shadow:0 18px 36px -14px rgba(88,86,214,.5)}
.status-card.rest{background:radial-gradient(120% 90% at 30% 15%,#fff,#ECECF3);color:var(--label);box-shadow:var(--sh)}
.status-card.long{background:radial-gradient(120% 90% at 30% 15%,#D6A8FF,#AF52DE 55%,#8E3CB8);box-shadow:0 18px 36px -14px rgba(175,82,222,.5)}
.status-card.unset{background:radial-gradient(120% 90% at 30% 15%,#fff,#ECECF3);color:var(--label);box-shadow:var(--sh)}
.status-label{font-size:13px;font-weight:600;opacity:.85;margin-bottom:6px}
.status-main{font-size:42px;font-weight:800;letter-spacing:-.02em;line-height:1.1}
.status-sub{font-size:14px;margin-top:8px;opacity:.9}
.partner-row{display:flex;justify-content:space-between;align-items:center;gap:12px}
.partner-name{font-size:22px;font-weight:700;letter-spacing:-.01em}
.partner-badge{font-size:12px;font-weight:600;padding:4px 10px;border-radius:20px;background:color-mix(in srgb,var(--pri) 14%,#fff);color:var(--pri)}
.next-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-top:.5px solid var(--sep)}
.next-row:first-child{border-top:0;padding-top:0}
.next-row b{font-weight:600;font-size:15px}
.next-row span{font-size:13px;color:var(--l2)}
.setup-banner{border:1.5px solid color-mix(in srgb,var(--orange) 40%,#fff);background:color-mix(in srgb,var(--orange) 8%,#fff)}
.setup-txt{margin-bottom:12px}
.legend{display:flex;flex-wrap:wrap;gap:10px 14px;padding:4px 4px 14px;font-size:12px;color:var(--l2);font-weight:500}
.legend span{display:flex;align-items:center;gap:6px}
.lg{width:10px;height:10px;border-radius:3px;display:inline-block}
.lg.day{background:var(--day)}.lg.night{background:var(--night)}.lg.rest{background:var(--rest)}.lg.long{background:var(--long)}
.week-card{background:#fff;border-radius:var(--r);box-shadow:var(--sh);padding:12px;margin-bottom:12px}
.week-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px;padding:0 2px}
.week-h b{font-size:15px;font-weight:700}.week-h span{font-size:12px;color:var(--l2)}
.days{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.day-cell{border-radius:12px;padding:8px 2px;text-align:center;background:rgba(118,118,128,.08);min-height:58px}
.day-cell .d{font-size:11px;color:var(--l2);font-weight:500}
.day-cell .n{font-size:15px;font-weight:700;margin:2px 0;font-variant-numeric:tabular-nums}
.day-cell .t{font-size:11px;font-weight:600}
.day-cell.today{outline:2px solid var(--pri);outline-offset:0}
.day-cell.type-day{background:color-mix(in srgb,var(--day) 18%,#fff);color:#B35C00}
.day-cell.type-night{background:color-mix(in srgb,var(--night) 18%,#fff);color:#3A38B0}
.day-cell.type-rest{background:rgba(118,118,128,.1);color:var(--l2)}
.day-cell.type-long{background:color-mix(in srgb,var(--long) 20%,#fff);color:#7A2FA0}
.day-cell.type-unset{color:var(--l3)}
.pair-card{background:#fff;border-radius:var(--r);box-shadow:var(--sh);padding:14px;margin-bottom:10px;position:relative;overflow:hidden}
.pair-card.current{border:2px solid var(--pri)}
.pair-card .who{font-size:17px;font-weight:700;margin-bottom:4px}
.pair-card .rng{font-size:13px;color:var(--l2)}
.pair-card .tag{position:absolute;top:12px;right:12px;font-size:11px;font-weight:600;padding:3px 8px;border-radius:8px;background:color-mix(in srgb,var(--pri) 14%,#fff);color:var(--pri)}
.pair-card .tag.soon{background:color-mix(in srgb,var(--orange) 16%,#fff);color:#C26A00}
.pair-card .tag.past{background:rgba(118,118,128,.12);color:var(--l2)}
.pair-card .meta{margin-top:8px;font-size:12px;color:var(--l2)}
.tabbar{position:fixed;left:0;right:0;bottom:0;display:none;padding:6px 0 env(safe-area-inset-bottom);height:var(--tab);
 background:rgba(249,249,249,.78);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-top:.5px solid rgba(0,0,0,.15);z-index:5}
body.shift-mode .tabbar{display:flex}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--gray);font-size:10px;font-weight:500}
.tab svg{width:25px;height:25px;stroke-width:1.8}.tab.on{color:var(--pri)}
.toast{position:fixed;left:50%;top:calc(env(safe-area-inset-top) + 12px);transform:translate(-50%,-140%);background:rgba(30,30,30,.86);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);color:#fff;font-size:14px;padding:10px 16px;border-radius:14px;z-index:10;transition:transform .4s var(--ease);max-width:90%;text-align:center}
.toast.on{transform:translate(-50%,0)}
.med-result{border-radius:24px;padding:28px 20px;margin-bottom:14px;color:#fff;text-align:center;
 background:radial-gradient(120% 90% at 30% 15%,#FFB6C8 0%,#FF8FAB 45%,#F06292 100%);
 box-shadow:0 18px 36px -14px rgba(240,98,146,.4),0 2px 6px rgba(240,98,146,.15)}
.med-result.ok{background:radial-gradient(120% 90% at 30% 15%,#9A98FF 0%,#6E6CF0 45%,#5250D6 100%);box-shadow:0 18px 36px -14px rgba(82,80,214,.45)}
.med-result.warn{background:radial-gradient(120% 90% at 30% 15%,#FFCC66,#FF9500 55%,#E67E00);box-shadow:0 18px 36px -14px rgba(255,149,0,.45)}
.med-result.expired{background:radial-gradient(120% 90% at 30% 15%,#FF9A94,#FF3B30 55%,#D32020);box-shadow:0 18px 36px -14px rgba(255,59,48,.45)}
.med-item{display:flex;align-items:flex-start;gap:10px;padding:12px 0;border-top:.5px solid var(--sep)}
.med-item:first-child{border-top:0;padding-top:0}
.med-item .mi-body{flex:1;min-width:0}
.med-item .mi-name{font-size:16px;font-weight:650;margin-bottom:2px}
.med-item .mi-meta{font-size:13px;color:var(--l2);line-height:1.4}
.med-item .mi-badge{font-size:11px;font-weight:600;padding:3px 8px;border-radius:8px;white-space:nowrap;margin-top:2px}
.mi-badge.ok{background:color-mix(in srgb,var(--pri) 14%,#fff);color:var(--pri)}
.mi-badge.warn{background:color-mix(in srgb,var(--orange) 16%,#fff);color:#C26A00}
.mi-badge.expired{background:color-mix(in srgb,var(--red) 14%,#fff);color:var(--red)}
.med-del{width:36px;height:36px;border-radius:10px;background:rgba(118,118,128,.1);color:var(--red);font-size:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center}
.med-empty{padding:8px 0;color:var(--l2);font-size:14px}
