/* ══════════════════════════════════════════════════════════════════
   Alex 的呼吸日记 · 产品界面原型
   签名 : ground=paper / typeVoice=rounded-friendly / imageWorld=photo
          layoutLogic=grid / colorStrategy=tri-role / motionVoice=still
   材料 : 京都儿童医院处方笺的暖纸底 + 糠酸莫米松药盒的酞菁蓝
          + 鼻内镜下黏膜的珊瑚红（只承担「超时 / 未完成」一个语义）
   圆角 : shell 30 / card 16 / control 10 / pill 999（四个角色，不是全局一值）
   ══════════════════════════════════════════════════════════════════ */
:root{
  /* 四槽：底 / 世界 / 信号 / 文字 */
  --bg:#F7F3EA;            /* 底色：处方笺米白，L≈96 */
  --surface:#FFFCF4;       /* 卡片：叠在染色底上的白壳 */
  --world:#22405A;         /* 世界色：药盒酞菁蓝的深化 */
  --world-soft:#E7EDF1;
  --accent:#D9583B;        /* 信号色：黏膜珊瑚，仅「超时 / 待补」 */
  --ink:#1B2A28;           /* 文字：墨绿黑 */
  --dim:rgba(27,42,40,.56);
  --line:rgba(27,42,40,.11);

  --r-shell:30px;
  --r-card:16px;
  --r-ctl:10px;
  --pill:999px;

  --sh-card:0 1px 2px rgba(34,64,90,.06),0 8px 20px -8px rgba(34,64,90,.10),0 26px 52px -30px rgba(34,64,90,.18);
  --sh-float:0 2px 6px rgba(34,64,90,.08),0 18px 40px -14px rgba(34,64,90,.22);

  --ease:cubic-bezier(.22,.75,.3,1);
  --tab:66px;

  --font:ui-rounded,"SF Pro Rounded","PingFang SC","Hiragino Sans GB",system-ui,sans-serif;
  --num:ui-monospace,"SF Mono",Menlo,monospace;

  --frame:#FFFFFF; --frame-2:#E6E1D5;
  --stage-1:#EFEBE1; --stage-2:#DAD4C6;
  --halo-1:#22405A; --halo-2:#D9583B; --halo-a:.20;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{background:var(--bg);color:var(--ink);overflow:hidden;font-family:var(--font);
  -webkit-font-smoothing:antialiased;letter-spacing:0}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
img,svg{display:block;max-width:100%}

.stage{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;overflow:hidden;
  background:radial-gradient(130% 90% at 50% 8%,var(--stage-1),var(--stage-2) 72%)}
.stage::before{content:"";position:absolute;inset:-18%;z-index:0;pointer-events:none;opacity:var(--halo-a);
  filter:blur(92px);
  background:radial-gradient(38% 30% at 20% 22%,var(--halo-1),transparent 70%),
             radial-gradient(42% 34% at 80% 76%,var(--halo-2),transparent 70%)}
#app{position:relative;z-index:1;width:100%;height:100%;overflow:hidden;background:var(--bg)}
@media(min-width:760px){
  #app{width:390px;height:min(844px,86vh);border-radius:44px;
    box-shadow:0 0 0 11px var(--frame),0 0 0 13px var(--frame-2),0 44px 100px rgba(34,64,90,.26)}
  .notch{position:absolute;top:9px;left:50%;transform:translateX(-50%);width:112px;height:26px;
    border-radius:15px;background:#15181C;z-index:60}
}
@media(max-width:759px){.notch{display:none}.stage::before{display:none}}

.statusbar{position:absolute;top:0;left:0;right:0;z-index:55;height:44px;padding:0 22px;
  display:flex;align-items:center;justify-content:space-between;pointer-events:none;
  font-size:13px;font-weight:600;letter-spacing:.01em}
.sb-r{display:flex;align-items:center;gap:5px}
.sb-r i{display:block;background:currentColor;border-radius:1px}
.sb-r .sig{width:15px;height:10px;
  clip-path:polygon(0 72%,18% 72%,18% 100%,0 100%,0 72%,27% 46%,45% 46%,45% 100%,27% 100%,
    27% 46%,54% 22%,72% 22%,72% 100%,54% 100%,54% 22%,82% 0,100% 0,100% 100%,82% 100%)}
.sb-r .wifi{width:14px;height:10px;
  clip-path:polygon(50% 100%,32% 74%,68% 74%,50% 100%,50% 66%,20% 40%,28% 30%,72% 30%,80% 40%,
    50% 66%,50% 24%,8% 12%,14% 2%,86% 2%,92% 12%)}
.sb-r .bat{width:22px;height:11px;border-radius:3px;background:none;position:relative;
  box-shadow:inset 0 0 0 1px currentColor}
.sb-r .bat::before{content:"";position:absolute;inset:2px;width:64%;background:currentColor;border-radius:1px}

/* 顶部栏：孩子是谁、今天第几天 —— 产品的身份，不是说明 */
.topbar{position:absolute;top:0;left:0;right:0;z-index:50;
  padding:calc(env(safe-area-inset-top) + 52px) 20px 10px;
  display:flex;align-items:center;gap:11px;background:var(--bg)}
.avatar{width:36px;height:36px;border-radius:var(--pill);background:var(--world);color:var(--surface);
  display:grid;place-items:center;font-size:15px;font-weight:700;flex:0 0 auto;font-family:var(--num)}
.hd{min-width:0;flex:1}
.hd b{display:block;font-size:16px;font-weight:700;line-height:1.15}
.hd span{display:block;font-size:11.5px;color:var(--dim);margin-top:2px;letter-spacing:.02em}
.ghost{width:34px;height:34px;border-radius:var(--r-ctl);display:grid;place-items:center;
  background:var(--surface);border:1px solid var(--line);flex:0 0 auto}
.ghost svg{width:17px;height:17px}

#flow{height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;
  padding:calc(env(safe-area-inset-top) + 108px) 18px calc(var(--tab) + env(safe-area-inset-bottom) + 22px)}
#flow::-webkit-scrollbar{display:none}
.panel[hidden]{display:block;position:absolute;left:0;right:0;height:0;overflow:hidden;visibility:hidden;pointer-events:none}
#flow{position:relative}

/* ── 版式原语 ── */
.card{background:var(--surface);border-radius:var(--r-card);border:1px solid var(--line);
  box-shadow:var(--sh-card);margin-bottom:14px;overflow:hidden}
.pad{padding:15px 16px}
.rail{display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x mandatory;
  margin:0 -18px 14px;padding:0 18px 2px;scrollbar-width:none}
.rail::-webkit-scrollbar{display:none}
.rail>*{flex:0 0 auto;scroll-snap-align:start}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:14px}
.rows .row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.rows .row:last-child{border-bottom:0}
.h2{font-size:19px;font-weight:700;line-height:1.2}
.meta{font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--dim);font-weight:600}

/* ══ 复查倒计时：整屏唯一的深色块，孩子治病的时间轴压在这里 ══ */
.dday{background:var(--world);color:#F6F2E6;border-radius:var(--r-card);padding:18px 18px 16px;
  margin-bottom:14px;position:relative;overflow:hidden;box-shadow:var(--sh-float)}
.dday::after{content:"";position:absolute;right:-42px;top:-52px;width:170px;height:170px;border-radius:50%;
  background:radial-gradient(circle,rgba(217,88,59,.32),transparent 68%)}
.dday .meta{color:rgba(246,242,230,.66)}
.dd-row{display:flex;align-items:flex-end;gap:8px;margin:6px 0 2px}
.dd-num{font-family:var(--num);font-size:56px;line-height:.86;font-weight:600;letter-spacing:-.02em}
.dd-unit{font-size:13px;padding-bottom:6px;color:rgba(246,242,230,.8)}
.dday .sub{font-size:12.5px;color:rgba(246,242,230,.72);margin-top:8px;line-height:1.5}
.bar{height:4px;border-radius:2px;background:rgba(246,242,230,.20);margin-top:14px;overflow:hidden}
.bar i{display:block;height:100%;width:50%;background:#F6F2E6;border-radius:2px}

/* ══ 今日任务：一行一次，时间在左，动作用右 ══ */
.sec-head{display:flex;align-items:baseline;justify-content:space-between;margin:18px 2px 10px}
.sec-head b{font-size:15px;font-weight:700}
.sec-head span{font-size:12px;color:var(--dim);font-family:var(--num)}
.task{display:flex;align-items:center;gap:13px;padding:13px 16px;border-bottom:1px solid var(--line)}
.task:last-child{border-bottom:0}
.tick{width:30px;height:30px;border-radius:var(--pill);border:1.5px solid var(--line);flex:0 0 auto;
  display:grid;place-items:center;transition:background .22s var(--ease),border-color .22s var(--ease)}
.tick svg{width:15px;height:15px;opacity:0;transform:scale(.7);transition:.22s var(--ease)}
.task.done .tick{background:var(--world);border-color:var(--world)}
.task.done .tick svg{opacity:1;transform:none;color:var(--surface)}
.task.done .t-main b{color:var(--dim);text-decoration:line-through;text-decoration-thickness:1px}
.task .time{font-family:var(--num);font-size:12px;color:var(--dim);width:44px;flex:0 0 auto;padding-top:2px}
.t-main{min-width:0;flex:1}
.t-main b{display:block;font-size:14.5px;font-weight:650;line-height:1.35}
.t-main span{display:block;font-size:11.5px;color:var(--dim);margin-top:3px}
.tag{font-size:10.5px;padding:3px 8px;border-radius:var(--pill);background:var(--world-soft);
  color:var(--world);font-weight:600;white-space:nowrap;flex:0 0 auto}
.tag.warn{background:rgba(217,88,59,.12);color:var(--accent)}

/* 提示条：一条不常驻的安全说明 */
.note{display:flex;gap:11px;padding:13px 15px;border-radius:var(--r-card);background:rgba(217,88,59,.07);
  border:1px solid rgba(217,88,59,.20);margin-bottom:14px}
.note .dot{width:3px;border-radius:2px;background:var(--accent);flex:0 0 auto}
.note p{font-size:12.5px;line-height:1.62;color:#7B3A2C}
.note b{font-weight:700}

/* 打卡完成：星星是给孩子的，不是给大人的 */
.stars{display:flex;gap:7px;margin-top:12px}
.stars i{width:26px;height:26px;border-radius:var(--pill);border:1.5px solid rgba(246,242,230,.30);
  display:grid;place-items:center;transition:.22s var(--ease)}
.stars i.on{background:#F6F2E6;border-color:#F6F2E6}
.stars svg{width:13px;height:13px;color:#F6F2E6}
.stars i.on svg{color:var(--world)}

/* ══ 日记：一分钟、六个动作，全部点选 ══ */
.opt{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}
.opt button{padding:9px 14px;border-radius:var(--r-ctl);border:1px solid var(--line);
  background:var(--surface);font-size:13.5px;color:var(--ink);transition:.18s var(--ease)}
.opt button.on{background:var(--world);border-color:var(--world);color:var(--surface);font-weight:650}
.q{margin-bottom:15px}
.q .label{font-size:13px;font-weight:650;display:flex;align-items:baseline;gap:6px}
.q .label em{font-style:normal;font-size:11px;color:var(--dim);font-weight:400}
.stepper{display:flex;align-items:center;gap:14px;margin-top:9px}
.stepper button{width:38px;height:38px;border-radius:var(--pill);border:1px solid var(--line);
  background:var(--surface);display:grid;place-items:center;font-size:19px;font-family:var(--num)}
.stepper .v{font-family:var(--num);font-size:22px;font-weight:600;min-width:34px;text-align:center}
.primary{width:100%;height:50px;border-radius:var(--r-ctl);background:var(--world);color:var(--surface);
  font-size:15.5px;font-weight:700;letter-spacing:.02em}
.primary:active{transform:translateY(1px)}

/* ══ 趋势：两天也照实画，不补格子 ══ */
.stat{display:flex;gap:10px;margin-bottom:14px}
.stat .box{flex:1;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);padding:13px 14px}
.stat .box b{display:block;font-family:var(--num);font-size:26px;font-weight:600;line-height:1}
.stat .box span{display:block;font-size:11px;color:var(--dim);margin-top:6px;letter-spacing:.02em}
.chart{padding:14px 12px 8px}
.chart .cap{font-size:10.5px;color:var(--dim);text-align:right;padding:0 6px 2px}

/* ══ 档案：图片是这一稿真正的资产，不是我画的方块 ══ */
.shot{position:relative;border-radius:var(--r-card);overflow:hidden;background:var(--world-soft);
  box-shadow:var(--sh-card);border:1px solid var(--line)}
.shot img{width:100%;height:132px;object-fit:cover;object-position:center 12%}
.shot .lb{position:absolute;left:0;right:0;bottom:0;padding:16px 10px 8px;font-size:11px;
  color:#fff;background:linear-gradient(180deg,transparent,rgba(20,32,44,.82));font-weight:600;letter-spacing:.02em}
.mrow{display:flex;align-items:center;gap:11px;padding:10px 16px;border-bottom:1px solid var(--line)}
.mrow:last-child{border-bottom:0}
.mrow img{width:42px;height:42px;border-radius:9px;object-fit:cover;object-position:center 45%;flex:0 0 auto}
.medcard{width:132px;border-radius:var(--r-card);overflow:hidden;background:var(--surface);
  border:1px solid var(--line);box-shadow:var(--sh-card)}
.medcard img{width:100%;height:96px;object-fit:cover;object-position:center 45%}
.medcard .m-body{padding:9px 11px 11px}
.medcard b{display:block;font-size:12.5px;font-weight:700;line-height:1.35}
.medcard span{display:block;font-size:10.5px;color:var(--dim);margin-top:3px;line-height:1.4}

/* 时间轴：grid 三列，圆点在中列 */
.tl{display:grid;grid-template-columns:52px 18px 1fr;align-items:start;row-gap:16px;padding:4px 2px}
.tl .d{font-family:var(--num);font-size:11.5px;color:var(--dim);padding-top:2px;line-height:1.4}
.tl .axis{justify-self:center;width:9px;height:9px;border-radius:var(--pill);background:var(--world);margin-top:5px;position:relative}
.tl .axis.hollow{background:none;border:1.5px solid var(--world);width:11px;height:11px}
.tl .axis:not(.hollow)::after{content:"";position:absolute;left:50%;top:11px;width:1.5px;height:58px;transform:translateX(-50%);background:rgba(34,64,90,.22)}
.tl .c b{display:block;font-size:13.5px;font-weight:650}
.tl .c span{display:block;font-size:11.5px;color:var(--dim);margin-top:3px;line-height:1.45}

.check{display:flex;align-items:center;gap:11px;padding:10px 0;border-bottom:1px solid var(--line)}
.check:last-child{border-bottom:0}
.check .bx{width:20px;height:20px;border-radius:6px;border:1.5px solid var(--line);flex:0 0 auto;
  display:grid;place-items:center}
.check .bx svg{width:11px;height:11px;opacity:0;color:var(--surface)}
.check.on .bx{background:var(--world);border-color:var(--world)}
.check.on .bx svg{opacity:1}
.check span{font-size:13px;line-height:1.4}
.check.on span{color:var(--dim)}

/* ── 底栏 ── */
.tabbar{position:absolute;left:0;right:0;bottom:0;z-index:50;height:var(--tab);
  padding-bottom:env(safe-area-inset-bottom);display:flex;align-items:stretch;
  background:rgba(247,243,234,.94);backdrop-filter:blur(12px);border-top:1px solid var(--line)}
.tabbar button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:4px;font-size:10.5px;color:var(--dim);letter-spacing:.03em}
.tabbar button.on{color:var(--world);font-weight:700}
.tabbar svg{width:21px;height:21px}

/* ── 弹层：相对取景框，不是视口 ── */
.scrim{position:absolute;inset:0;z-index:88;background:rgba(27,42,40,.40);
  opacity:0;pointer-events:none;transition:opacity .26s var(--ease)}
.scrim.on{opacity:1;pointer-events:auto}
.modal{position:absolute;left:0;right:0;bottom:0;z-index:90;background:var(--surface);
  border-radius:var(--r-shell) var(--r-shell) 0 0;
  padding:14px 20px calc(env(safe-area-inset-bottom) + 22px);max-height:80%;overflow-y:auto;
  transform:translateY(100%);visibility:hidden;transition:transform .32s var(--ease),visibility .32s;box-shadow:var(--sh-float)}
.modal.on{transform:none;visibility:visible}
.grab{width:38px;height:4px;border-radius:2px;background:var(--line);margin:0 auto 14px}
.steps{counter-reset:s;margin:10px 0 16px}
.steps li{list-style:none;counter-increment:s;display:flex;gap:11px;padding:9px 0;font-size:13px;line-height:1.5}
.steps li::before{content:counter(s);font-family:var(--num);font-size:11px;width:19px;height:19px;flex:0 0 auto;
  border-radius:var(--pill);background:var(--world-soft);color:var(--world);display:grid;place-items:center;margin-top:2px}

.toast{position:absolute;left:50%;bottom:calc(var(--tab) + 20px);z-index:70;
  transform:translate(-50%,14px);opacity:0;pointer-events:none;max-width:80%;padding:11px 18px;
  border-radius:var(--pill);background:rgba(34,64,90,.94);color:#F6F2E6;font-size:13px;line-height:1.5;
  transition:opacity .26s var(--ease),transform .26s var(--ease)}
.toast.on{opacity:1;transform:translate(-50%,0)}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* ═══ 正式版增量：登录门 + 真机全屏 ═══ */
.gate{position:fixed;inset:0;z-index:60;display:none;place-items:center;padding:24px;
  background:linear-gradient(180deg,#EFEBE1,#DAD4C6)}
.gate.on{display:grid}
.gate-card{width:min(340px,92vw);background:var(--surface);border:1px solid var(--line);border-radius:24px;
  padding:28px 22px 20px;box-shadow:var(--sh-float);text-align:center}
.gate-card h1{font-size:19px;letter-spacing:-.02em;margin-top:14px}
.gate-card p{font-size:12.5px;color:var(--dim);line-height:1.6;margin:8px 0 18px}
.gate-card form{display:flex;gap:8px}
#code{flex:1;min-width:0;height:48px;border:1px solid var(--line);border-radius:12px;background:var(--bg);
  padding:0 14px;font-size:17px;letter-spacing:.08em;font-family:ui-monospace,SFMono-Regular,monospace;color:var(--ink)}
#code:focus{outline:2px solid var(--world);border-color:transparent}
#gateBtn{width:96px;height:48px}
.gate-note{display:block;margin-top:14px;font-size:11px;color:var(--dim)}

@media (max-width:520px){
  .stage{position:static;display:block;padding:0;background:var(--bg)}
  #app{width:100%;height:100vh;height:100dvh;border-radius:0;border:0;box-shadow:none}
  .notch,.statusbar{display:none}
  #flow{padding-bottom:calc(var(--tab) + env(safe-area-inset-bottom) + 12px)}
  .tabbar{padding-bottom:calc(6px + env(safe-area-inset-bottom))}
  .topbar{padding:calc(env(safe-area-inset-top) + 14px) 20px 10px}
  #flow{padding-top:calc(env(safe-area-inset-top) + 70px)}
}

.stat .box b{white-space:nowrap}
.panel[data-panel="file"] #pushBtn{margin:0 0 14px}
