:root{
  --bg:#FFFFFF; --soft:#F5F7FB; --line:#E6E9F0; --line2:#F0F2F7;
  --ink:#15213D; --ink2:#2B3654; --muted:#5B6478; --faint:#98A0B0;
  --gam:#3D7C71; --gam-d:#2E5E54; --gam-soft:#EDF5F3;
  --song:#2F9E6E; --song-soft:#E6F5EE; --ja:#6F63D9; --ja-soft:#EFEDFD;
  --blue-soft:#F2F6FD; --seal:#D9453A; --shadow:0 1px 2px rgba(21,33,61,.04),0 6px 20px rgba(21,33,61,.05);
  --serif:'Plus Jakarta Sans','Noto Sans KR',-apple-system,sans-serif; --sans:'Plus Jakarta Sans','Noto Sans KR',-apple-system,'Apple SD Gothic Neo',sans-serif;
}
*{box-sizing:border-box}
html{color-scheme:light}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.6 var(--sans);-webkit-font-smoothing:antialiased}
a{color:var(--gam-d)}
button,input,select,textarea{font:inherit;color:inherit}
h1,h2,h3{margin:0;letter-spacing:-.02em;text-wrap:balance}
h1,h2{font-family:var(--sans);font-weight:800;letter-spacing:-.03em}
p{margin:0}
.muted{color:var(--muted)} .faint{color:var(--faint)} .small{font-size:13px}

/* 상단 */
.top{position:sticky;top:0;z-index:10;background:rgba(255,255,255,.94);backdrop-filter:blur(8px);border-bottom:1px solid var(--line2)}
.top .in{max-width:1080px;margin:0 auto;padding:12px 20px;display:flex;align-items:center;gap:16px}
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink)}
.logo .mk{width:34px;height:34px;border-radius:10px;background:var(--gam-soft);display:grid;place-items:center}
.logo b{font-family:var(--sans);font-weight:800;font-size:17px;letter-spacing:.06em;line-height:1.1;text-transform:uppercase}
.logo small{display:block;font-size:11px;color:var(--faint);font-weight:500}
.tabs{display:flex;gap:4px;margin-left:auto}
.tabs a{padding:10px 4px;margin:0 10px;border-radius:0;text-decoration:none;color:var(--muted);font-weight:600;font-size:14.5px;display:flex;align-items:center;gap:6px;border-bottom:2px solid transparent}
.tabs a.on{color:var(--ink);border-bottom-color:var(--gam)}
.tabs .n{background:var(--gam);color:#fff;border-radius:99px;font-size:11px;padding:0 7px;font-weight:700}

.lang{display:inline-flex;border:1px solid var(--line);border-radius:99px;padding:3px;gap:2px}
.lang button{border:0;background:none;border-radius:99px;padding:4px 10px;font-size:12px;font-weight:700;color:var(--faint);cursor:pointer}
.lang button.on{background:var(--ink);color:#fff}
.linkbtn{border:0;background:none;color:var(--muted);cursor:pointer;font-size:13.5px;padding:6px}

/* 본문 */
.wrap{max-width:1080px;margin:0 auto;padding:28px 20px 90px;display:flex;flex-direction:column;gap:22px}
.head{display:flex;flex-direction:column;gap:6px}
.head h1{font-size:30px;line-height:1.25}
.grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:20px;align-items:start}
.col{display:flex;flex-direction:column;gap:18px}
.card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:22px 24px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:12px}
.card.hero{background:var(--blue-soft);border-color:#E3EAF8;box-shadow:none}
.card h3{font-size:16.5px;display:flex;align-items:center;gap:10px}
.card h3 .r{margin-left:auto;font-size:12.5px;color:var(--faint);font-weight:500}
.chip{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 12px;border-radius:99px;font-size:12.5px;font-weight:600;white-space:nowrap;align-self:flex-start}
.c-song{background:var(--song-soft);color:#4F7B60} .c-gam{background:var(--gam-soft);color:var(--gam-d)} .c-ja{background:var(--ja-soft);color:#6D5FAE} .c-line{border:1px solid var(--line);color:var(--muted)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 24px;border-radius:12px;border:0;background:var(--gam);color:#fff;font-weight:600;font-size:15.5px;cursor:pointer;text-decoration:none;box-shadow:0 8px 20px rgba(226,114,73,.22)}
.btn:disabled{opacity:.55;cursor:default}
.btn.ghost{background:#fff;color:var(--ink);border:1.5px solid #C9D0DE;box-shadow:none}
.btn.ink{background:var(--ink);box-shadow:none}
.btn.soft{background:var(--soft);color:var(--ink2);box-shadow:none}
.btn.sm{min-height:38px;padding:0 16px;font-size:14px;box-shadow:none}
.btn.full{width:100%}
.btn:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,.lang button:focus-visible{outline:2px solid var(--gam);outline-offset:2px}
.row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.note{font-size:13px;color:var(--muted);background:var(--soft);border-radius:12px;padding:10px 14px}
.bubble{overflow-wrap:anywhere;font-family:'Noto Sans KR',sans-serif;font-size:30px;font-weight:700;letter-spacing:-.01em;color:var(--ink);align-self:flex-start;line-height:1.35}
.ro{font-size:15px;color:var(--faint)}
.dots{display:flex;gap:6px}.dots i{width:26px;height:6px;border-radius:99px;background:var(--line)}.dots i.on{background:var(--song)}.dots i.cur{background:var(--gam)}

/* 폼 */
.form{max-width:520px;margin:10px auto 0;width:100%}
label.f{display:flex;flex-direction:column;gap:6px;font-size:14px;font-weight:600;color:var(--ink2)}
input.i,select.i,textarea.i{border:1.5px solid var(--line);border-radius:14px;padding:12px 14px;font-weight:400;background:#fff;width:100%}
textarea.i{min-height:90px;resize:vertical}
.opts{display:flex;flex-wrap:wrap;gap:8px}
.opt{display:inline-flex;align-items:center;gap:8px;border:1.5px solid var(--line);border-radius:99px;padding:8px 14px;font-weight:500;font-size:14px;cursor:pointer}
.opt input{accent-color:var(--gam)}
.opt:has(input:checked){border-color:var(--gam);background:var(--gam-soft);color:var(--gam-d)}
.check{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;color:var(--muted)}
.err{color:var(--seal);font-size:13.5px}
.okmsg{color:#4F7B60;font-size:13.5px}

/* 녹음 */
.rec{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.recdot{width:12px;height:12px;border-radius:50%;background:var(--seal);animation:blink 1s infinite}
@keyframes blink{50%{opacity:.25}}
audio{width:100%;max-width:360px;height:40px}

/* 달력 */
.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
.cal .d{border:1px solid var(--line2);border-radius:12px;min-height:72px;padding:8px;display:flex;flex-direction:column;justify-content:space-between;position:relative;font-size:12px;color:var(--muted)}
.cal .d b{font-size:13px;color:var(--ink)}
.cal .d.done{background:#fff}
.cal .d.cur{border:2px solid var(--gam);background:var(--gam-soft)}
.cal .d.lock{background:var(--soft);color:var(--faint)}
.stamp{position:absolute;right:6px;top:6px;transform:rotate(-13deg)}

/* 목록 */
.list{display:flex;flex-direction:column}
.li{display:flex;gap:12px;align-items:flex-start;padding:14px 0;border-top:1px solid var(--line2)}
.li:first-child{border-top:0}
.av{width:36px;height:36px;border-radius:50%;background:var(--song-soft);color:#4F7B60;display:grid;place-items:center;font-weight:700;flex:none}

/* 요금 */
.plans{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.plan{border:1.5px solid var(--line);border-radius:22px;padding:22px;display:flex;flex-direction:column;gap:10px;background:#fff;position:relative}
.plan.pop{border:2px solid var(--gam);box-shadow:0 12px 30px rgba(226,114,73,.14)}
.plan .price{font-size:30px;font-weight:800;letter-spacing:-.02em}
.plan .price small{font-family:var(--sans);font-size:13px;color:var(--faint);font-weight:500}
.plan .tag{position:absolute;top:-13px;left:18px;background:var(--gam);color:#fff;border-radius:99px;font-size:12px;font-weight:700;padding:3px 12px}

/* 관리자 */
table.t{width:100%;border-collapse:collapse;font-size:14px}
.t th{font-size:11.5px;font-weight:700;letter-spacing:.05em;color:var(--faint);text-align:left;padding:0 10px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
.t td{padding:10px;border-bottom:1px solid var(--line2);vertical-align:top}
.tw{overflow-x:auto}
.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.kpi{border:1px solid var(--line);border-radius:18px;padding:16px 18px}
.kpi b{font-size:28px;font-weight:800;display:block}
.kpi span{font-size:12.5px;color:var(--muted)}
.mat{display:grid;gap:6px;font-size:13.5px}
.mat .c{border-radius:10px;padding:10px;text-align:center;background:var(--soft)}
.mat .c.hot{background:var(--gam-soft);color:var(--gam-d);font-weight:700}

.center{min-height:60vh;display:grid;place-items:center;text-align:center}
.foot{max-width:1080px;margin:0 auto;padding:0 20px 40px;font-size:12.5px;color:var(--faint)}

@media (max-width:860px){
  .grid{grid-template-columns:1fr}
  .plans,.kpis{grid-template-columns:1fr 1fr}
  .tabs{position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--line);justify-content:space-around;padding:8px 6px calc(8px + env(safe-area-inset-bottom));margin:0}
  .tabs a{flex-direction:column;gap:2px;font-size:11.5px;padding:6px 10px;border-radius:12px}
  .head h1{font-size:25px}
  .logo small{display:none}
}
@media (max-width:520px){ .plans,.kpis{grid-template-columns:1fr} .cal .d{min-height:58px;padding:6px} .bubble{font-size:20px} }
@media (prefers-reduced-motion:reduce){ .recdot{animation:none} }

/* v3 — 오늘 화면 */
.hero2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,300px);gap:22px;align-items:center}
.lis{background:#fff;border:1px solid #E3EAF8;border-radius:16px;padding:18px;display:flex;flex-direction:column;gap:12px;justify-content:center}
.tr{display:flex;flex-direction:column;gap:2px}.tr b{font-weight:500;color:var(--ink)}.tr span{color:var(--muted)}
.ring{display:flex;align-items:center;gap:18px}
.ring svg{flex:none}
.lesson{display:flex;align-items:center;gap:14px;padding:12px 0;border-top:1px solid var(--line2);text-decoration:none;color:var(--ink)}
.lesson:first-of-type{border-top:0}
.lesson .no{width:42px;height:42px;border-radius:12px;background:var(--blue-soft);display:grid;place-items:center;font-weight:800;color:var(--ink2);flex:none}
.lesson.done .no{background:var(--song-soft);color:var(--song)}
.lesson.cur .no{background:var(--gam-soft);color:var(--gam-d)}
.lesson small{display:block;color:var(--faint);font-size:12.5px}
.lesson .go{margin-left:auto;color:var(--faint)}
@media (max-width:860px){ .hero2{grid-template-columns:minmax(0,1fr)} .top{backdrop-filter:none;background:#fff} .grid{grid-template-columns:minmax(0,1fr)} .bubble{font-size:24px} .wrap{padding:20px 16px 100px} .tabs a{margin:0;border-bottom:0;padding:6px 10px} .tabs a.on{color:var(--gam-d)} }
.pvbar{background:#FFF4E5;border-top:1px solid #F6D9B0;padding:8px 20px;display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;font-size:13.5px;font-weight:700;color:#8A4B12}
.pvbar .i{width:auto;padding:6px 10px;font-size:13.5px}
