:root{
  --bg:#f4f6fb; --card:#ffffff; --ink:#18213a; --sub:#6b7690; --line:#e6e9f2;
  --pri:#4c6ef5; --pri-soft:#eaefff;
  --ok:#2f9e44; --warn:#f08c00; --bad:#e03131;
  --r:16px; --sh:0 1px 3px rgba(24,33,58,.07), 0 8px 24px rgba(24,33,58,.05);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--ink);
  font:15px/1.5 -apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Pretendard",
       "Noto Sans KR",Segoe UI,Roboto,sans-serif;
  padding-bottom:calc(74px + env(safe-area-inset-bottom));
  -webkit-text-size-adjust:100%;
}
button,input,select,textarea{font:inherit;color:inherit}
button{border:0;background:none;cursor:pointer}

/* ---------- header ---------- */
#hdr{position:sticky;top:0;z-index:40;background:rgba(244,246,251,.92);
  backdrop-filter:saturate(1.6) blur(10px);border-bottom:1px solid var(--line)}
.hwrap{max-width:720px;margin:0 auto;padding:12px 16px;display:flex;align-items:center;gap:10px}
.htitle{font-size:19px;font-weight:800;letter-spacing:-.02em;flex:1}
.iconbtn{width:38px;height:38px;border-radius:12px;background:var(--card);
  box-shadow:var(--sh);font-size:17px;display:grid;place-items:center}

main{max-width:720px;margin:0 auto;padding:14px 16px 20px}

/* ---------- bottom tabs ---------- */
#tabs{position:fixed;left:0;right:0;bottom:0;z-index:50;display:flex;
  background:rgba(255,255,255,.96);backdrop-filter:blur(10px);
  border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}
#tabs button{flex:1;padding:9px 0 8px;display:flex;flex-direction:column;align-items:center;
  gap:2px;color:var(--sub);font-size:11px;font-weight:700}
#tabs button i{font-style:normal;font-size:20px;line-height:1;filter:grayscale(1) opacity(.55)}
#tabs button.on{color:var(--pri)}
#tabs button.on i{filter:none}

/* ---------- generic ---------- */
.card{background:var(--card);border-radius:var(--r);box-shadow:var(--sh);padding:14px;margin-bottom:12px}
.card.tight{padding:12px}
.sec{font-size:13px;font-weight:800;color:var(--sub);margin:18px 2px 8px;letter-spacing:.02em}
.sec:first-child{margin-top:2px}
.row{display:flex;align-items:center;gap:10px}
.grow{flex:1;min-width:0}
.muted{color:var(--sub)}
.small{font-size:12.5px}
.big{font-size:22px;font-weight:800;letter-spacing:-.02em}
.nowrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.center{text-align:center}
.empty{padding:34px 16px;text-align:center;color:var(--sub);font-size:13.5px;line-height:1.7}
.empty b{display:block;font-size:30px;margin-bottom:8px;filter:grayscale(.2)}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:11px 15px;border-radius:12px;background:var(--pri);color:#fff;font-weight:700;font-size:14px}
.btn.ghost{background:var(--pri-soft);color:var(--pri)}
.btn.grey{background:#eef0f6;color:var(--ink)}
.btn.danger{background:#ffecec;color:var(--bad)}
.btn.wide{width:100%}
.btn.sm{padding:8px 12px;font-size:13px;border-radius:10px}
.btnrow{display:flex;gap:8px}
.btnrow>*{flex:1}

.chip{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:999px;
  background:#eef0f6;color:var(--sub);font-size:11.5px;font-weight:700}
.chip.pri{background:var(--pri-soft);color:var(--pri)}
.chip.ok{background:#e7f7ec;color:var(--ok)}
.chip.warn{background:#fff2df;color:var(--warn)}
.chip.bad{background:#ffecec;color:var(--bad)}

.dot{width:10px;height:10px;border-radius:3px;flex:none}
.bar{width:4px;border-radius:4px;align-self:stretch;flex:none;min-height:34px}

/* ---------- today ---------- */
.dayhead{display:flex;align-items:flex-end;gap:8px;margin:2px 2px 12px}
.dayhead .d1{font-size:26px;font-weight:800;letter-spacing:-.03em}
.dayhead .d2{font-size:13px;color:var(--sub);font-weight:700;padding-bottom:4px}
.nowcard{background:linear-gradient(135deg,#4c6ef5,#5f3dc4);color:#fff;border-radius:var(--r);
  padding:16px;margin-bottom:12px;box-shadow:0 10px 24px rgba(76,110,245,.28)}
.nowcard .lb{font-size:11.5px;font-weight:800;opacity:.85;letter-spacing:.06em}
.nowcard .tt{font-size:21px;font-weight:800;margin-top:4px;letter-spacing:-.02em}
.nowcard .mt{font-size:13px;opacity:.9;margin-top:5px}

.tl{position:relative}
.tlitem{display:flex;gap:11px;background:var(--card);border-radius:var(--r);box-shadow:var(--sh);
  padding:12px;margin-bottom:9px;align-items:stretch}
.tlitem.past{opacity:.5}
.tlitem.live{outline:2px solid var(--pri);outline-offset:0}
.tltime{width:52px;flex:none;font-size:12.5px;font-weight:800;color:var(--sub);line-height:1.35;padding-top:1px}
.tltime b{display:block;font-size:14px;color:var(--ink)}
.tlname{font-weight:700;font-size:15.5px}
.tlmeta{font-size:12.5px;color:var(--sub);margin-top:2px}
.prep{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.prep button{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border-radius:999px;
  background:#f1f3f9;color:var(--sub);font-size:12px;font-weight:700}
.prep button.done{background:#e7f7ec;color:var(--ok);text-decoration:line-through}

.banner{display:flex;gap:10px;align-items:center;border-radius:14px;padding:12px 13px;margin-bottom:10px;
  font-size:13.5px;font-weight:600}
.banner.warn{background:#fff5e6;color:#a35b00}
.banner.bad{background:#ffeceb;color:#b42318}
.banner .go{margin-left:auto;font-weight:800;font-size:12.5px;white-space:nowrap}

/* ---------- week grid ---------- */
.segwrap{display:flex;background:#e9ecf5;border-radius:12px;padding:3px;margin-bottom:12px}
.segwrap button{flex:1;padding:8px 0;border-radius:9px;font-size:13px;font-weight:700;color:var(--sub)}
.segwrap button.on{background:#fff;color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.08)}

.gridscroll{overflow-x:auto;-webkit-overflow-scrolling:touch;background:var(--card);
  border-radius:var(--r);box-shadow:var(--sh);padding:8px 8px 10px}
.grid{position:relative;display:grid;grid-template-columns:34px repeat(7,minmax(74px,1fr));min-width:560px}
.gh{text-align:center;font-size:12px;font-weight:800;color:var(--sub);
  padding:4px 0 7px;background:var(--card);z-index:2}
.gh.sun{color:var(--bad)} .gh.sat{color:var(--pri)}
.gh.today{color:var(--ink)}
.gh.today span{background:var(--ink);color:#fff;border-radius:8px;padding:2px 7px;display:inline-block}
.gutter{position:sticky;left:0;background:var(--card);z-index:3}
.gtime{position:absolute;right:5px;font-size:10.5px;color:#aab1c4;text-align:right;transform:translateY(-6px)}
.gcol{position:relative;border-left:1px solid #f0f2f8}
.hline{border-top:1px solid #f4f5fa}
.blk{position:absolute;left:2px;right:2px;border-radius:9px;padding:5px 6px;overflow:hidden;
  color:#fff;font-size:11.5px;line-height:1.25;font-weight:700;box-shadow:0 1px 2px rgba(0,0,0,.12)}
.blk small{display:block;font-weight:600;opacity:.9;font-size:10px;margin-top:1px}

.dayblock{margin-bottom:14px}
.dayblock>h4{margin:0 2px 7px;font-size:13.5px;font-weight:800}
.dayblock>h4 span{color:var(--sub);font-weight:700;font-size:12px;margin-left:5px}

/* ---------- fee ---------- */
.kpis{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
.kpi{background:var(--card);border-radius:var(--r);box-shadow:var(--sh);padding:13px 14px}
.kpi .k{font-size:11.5px;color:var(--sub);font-weight:800}
.kpi .v{font-size:20px;font-weight:800;margin-top:3px;letter-spacing:-.02em}
.kpi .v small{font-size:12px;font-weight:700;color:var(--sub);margin-left:2px}

.feecard{background:var(--card);border-radius:var(--r);box-shadow:var(--sh);padding:0;margin-bottom:11px;overflow:hidden}
.feetop{display:flex;gap:11px;padding:13px 14px;align-items:center}
.feebody{padding:0 14px 13px}
.mline{display:flex;justify-content:space-between;gap:10px;font-size:13px;padding:5px 0;border-top:1px dashed var(--line)}
.mline .lb{color:var(--sub);font-weight:700}
.hist{font-size:12.5px;color:var(--sub);padding:6px 0;border-top:1px dashed var(--line);display:flex;justify-content:space-between}

/* ---------- calendar ---------- */
.calhead{display:flex;align-items:center;gap:6px;margin-bottom:10px}
.calhead .m{flex:1;text-align:center;font-size:17px;font-weight:800}
.calhead button{width:36px;height:36px;border-radius:11px;background:var(--card);box-shadow:var(--sh);font-size:15px}
.cal{background:var(--card);border-radius:var(--r);box-shadow:var(--sh);padding:8px 6px 10px}
.calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cw{text-align:center;font-size:11px;font-weight:800;color:var(--sub);padding:4px 0 6px}
.cw.s0{color:var(--bad)} .cw.s6{color:var(--pri)}
.cd{min-height:52px;border-radius:10px;padding:4px 2px 3px;display:flex;flex-direction:column;
  align-items:center;gap:3px;font-size:12.5px;font-weight:700}
.cd.out{opacity:.28}
.cd.sel{background:var(--pri-soft);outline:1.5px solid var(--pri)}
.cd.today .n{background:var(--ink);color:#fff;border-radius:50%;width:22px;height:22px;
  display:grid;place-items:center;font-size:11.5px}
.cd .n{line-height:22px;height:22px}
.cd .dots{display:flex;flex-wrap:wrap;gap:2px;justify-content:center}
.cd .dots i{width:5px;height:5px;border-radius:50%;display:block}
.cd .pay{font-size:9px;line-height:1}

/* ---------- sheet / form ---------- */
#sheetHost:empty{display:none}
.scrim{position:fixed;inset:0;background:rgba(16,22,38,.45);z-index:60;
  display:flex;align-items:flex-end;justify-content:center;animation:fade .16s ease}
@keyframes fade{from{opacity:0}to{opacity:1}}
.sheet{background:var(--bg);width:100%;max-width:720px;max-height:92vh;overflow:auto;
  border-radius:20px 20px 0 0;padding:0 16px calc(24px + env(safe-area-inset-bottom));
  animation:up .2s cubic-bezier(.2,.8,.3,1)}
@keyframes up{from{transform:translateY(30px)}to{transform:translateY(0)}}
.shead{position:sticky;top:0;background:var(--bg);padding:12px 0 10px;z-index:3;
  display:flex;align-items:center;gap:10px}
.shead .st{font-size:17px;font-weight:800;flex:1}
.shead .x{width:34px;height:34px;border-radius:11px;background:#e9ecf5;display:grid;place-items:center;font-size:16px}

.f{margin-bottom:11px}
.f>label{display:block;font-size:12.5px;font-weight:800;color:var(--sub);margin:0 2px 5px}
.f input,.f select,.f textarea{width:100%;padding:12px;border:1px solid var(--line);border-radius:12px;
  background:#fff;font-size:15px;outline:none}
.f input:focus,.f select,.f textarea:focus{border-color:var(--pri)}
.f textarea{min-height:66px;resize:vertical}
.f2{display:flex;gap:8px}
.f2>*{flex:1;min-width:0}
.hint{font-size:11.5px;color:var(--sub);margin:4px 2px 0;line-height:1.5}

.days{display:flex;gap:5px}
.days button{flex:1;padding:10px 0;border-radius:11px;background:#fff;border:1px solid var(--line);
  font-size:13px;font-weight:700;color:var(--sub)}
.days button.on{background:var(--pri);border-color:var(--pri);color:#fff}
.colors{display:flex;flex-wrap:wrap;gap:8px}
.colors button{width:32px;height:32px;border-radius:50%;border:2px solid transparent}
.colors button.on{border-color:var(--ink);transform:scale(1.06)}
.kinds{display:flex;gap:6px}
.kinds button{flex:1;padding:11px 4px;border-radius:12px;background:#fff;border:1px solid var(--line);
  font-size:13px;font-weight:700;color:var(--sub)}
.kinds button.on{background:var(--pri-soft);border-color:var(--pri);color:var(--pri)}

.slotrow{background:#fff;border:1px solid var(--line);border-radius:12px;padding:11px;margin-bottom:8px}
.slotrow .sr1{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.slotrow .sr1 input{flex:1}
.delx{width:34px;height:34px;flex:none;border-radius:10px;background:#ffecec;color:var(--bad);
  display:grid;place-items:center;font-size:15px}

#toast{position:fixed;left:50%;bottom:88px;transform:translateX(-50%) translateY(14px);z-index:90;
  background:rgba(24,33,58,.94);color:#fff;padding:10px 16px;border-radius:999px;font-size:13.5px;
  font-weight:700;opacity:0;pointer-events:none;transition:.22s;max-width:88vw;text-align:center}
#toast.on{opacity:1;transform:translateX(-50%) translateY(0)}

.tinylink{display:block;width:100%;text-align:center;color:#b9bfd0;font-size:12px;
  text-decoration:underline;padding:14px 0 4px}
