:root{
  --bg:#FAF6EF;--card:#FFFFFF;--ink:#1F2A37;--muted:#56606B;--line:#E7DFD2;--control:#8F8370;
  --primary:#2E6A5B;--primary-deep:#22524A;--primary-soft:#E4F0EA;
  --sun:#F2C76B;--sun-soft:#FCF0D4;
  --bright:#2E6A5B;--bright-soft:#E4F0EA;
  --normal:#4D5B6A;--normal-soft:#ECEFF3;
  --hard:#A3462F;--hard-soft:#FBE7DF;
  --danger:#A3462F;
  --on-primary:#FFFFFF;--warm-fg:#6B4C0F;--pressed:#F4EFE6;--bar:#FFFDF9;--toast-bg:#1F2A37;--toast-fg:#FFFFFF;
  --r:16px;--tab-h:64px;
}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#14191A;--card:#1C2325;--ink:#E9E5DD;--muted:#A9B2B4;--line:#2F3A3C;--control:#6F7C7E;
  --primary:#86C9B3;--primary-deep:#A9DCCB;--primary-soft:#1F3934;--sun:#E3B85A;--sun-soft:#3A3121;
  --bright:#8FD3BC;--bright-soft:#1F3934;--normal:#B9C4D0;--normal-soft:#283037;--hard:#F2A991;--hard-soft:#42271F;--danger:#F2A991;
  --on-primary:#0E2A23;--warm-fg:#F1D597;--pressed:#232C2E;--bar:#182022;--toast-bg:#E9E5DD;--toast-fg:#14191A;color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#14191A;--card:#1C2325;--ink:#E9E5DD;--muted:#A9B2B4;--line:#2F3A3C;--control:#6F7C7E;
  --primary:#86C9B3;--primary-deep:#A9DCCB;--primary-soft:#1F3934;--sun:#E3B85A;--sun-soft:#3A3121;
  --bright:#8FD3BC;--bright-soft:#1F3934;--normal:#B9C4D0;--normal-soft:#283037;--hard:#F2A991;--hard-soft:#42271F;--danger:#F2A991;
  --on-primary:#0E2A23;--warm-fg:#F1D597;--pressed:#232C2E;--bar:#182022;--toast-bg:#E9E5DD;--toast-fg:#14191A;color-scheme:dark}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo','Noto Sans KR','Malgun Gothic',sans-serif;font-size:16px;line-height:1.6;word-break:keep-all;overflow-wrap:anywhere;padding-bottom:calc(var(--tab-h) + 16px + env(safe-area-inset-bottom))}
body.no-tabs{padding-bottom:24px}
h1,h2,h3,p{margin:0}
h1{font-size:24px;line-height:1.35;letter-spacing:-.02em}
h2{font-size:18px;line-height:1.4}
h3{font-size:16px}
a{color:var(--primary)}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
[hidden]{display:none!important}
:focus-visible{outline:3px solid var(--sun);outline-offset:2px;box-shadow:0 0 0 5px var(--primary-deep)}
#view:focus{outline:none;box-shadow:none}
.skip{position:absolute;left:12px;top:-60px;z-index:50;padding:10px 16px;background:var(--sun);color:var(--ink);border-radius:0 0 12px 12px;font-weight:700}
.skip:focus{top:0}
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}

/* 상단 */
.topbar{position:sticky;top:0;padding-top:env(safe-area-inset-top,0px);z-index:20;background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.topbar-inner{max-width:560px;margin:auto;height:52px;padding:0 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.app-name{font-weight:800;font-size:16px}
/* (시제품 표시 배지 — 정식 버전에서는 쓰지 않음) */
.proto-badge{font-size:12px;font-weight:600;background:var(--sun-soft);color:var(--warm-fg);padding:4px 10px;border-radius:999px;white-space:nowrap}

main{max-width:560px;margin:auto;padding:20px 16px 8px}
.loading{color:var(--muted);padding:40px 0;text-align:center}
.page-title{margin:4px 0 18px}
.page-title p{color:var(--muted);font-size:15px;margin-top:4px}
.section{margin-top:28px}
.section-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px}
.section-head p{color:var(--muted);font-size:14px}
.section-head a{display:inline-flex;align-items:center;min-height:44px;font-weight:700;white-space:nowrap}
.hint{color:var(--muted);font-size:14px}

/* 카드와 목록 */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px}
.list{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.row{display:flex;align-items:center;gap:12px;min-height:64px;padding:12px 14px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);text-decoration:none;color:inherit}
a.row:active{background:var(--pressed)}
.row-main{flex:1;min-width:0}
.row-title{font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.row-sub{display:block;font-size:14px;color:var(--muted);margin-top:2px}
.row-side{font-size:13px;color:var(--muted);text-align:right;white-space:nowrap}
.avatar{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:var(--primary-soft);color:var(--primary-deep);font-weight:800;flex-shrink:0}
.chev{width:20px;height:20px;flex-shrink:0;fill:none;stroke:var(--control);stroke-width:2}

/* 상태 표시 */
.chip{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:700;padding:3px 10px;border-radius:999px;white-space:nowrap}
.mood-bright{background:var(--bright-soft);color:var(--bright)}
.mood-normal{background:var(--normal-soft);color:var(--normal)}
.mood-hard{background:var(--hard-soft);color:var(--hard)}
.chip-follow{background:var(--sun-soft);color:var(--warm-fg)}
.chip-muted{background:var(--normal-soft);color:var(--muted)}

/* 버튼 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:10px 20px;border-radius:999px;border:1.5px solid var(--primary);background:var(--primary);color:var(--on-primary);font-weight:700;text-decoration:none;font-size:16px}
.btn:active{background:var(--primary-deep)}
.btn.secondary{background:var(--card);color:var(--primary)}
.btn.small{min-height:44px;padding:8px 16px;font-size:15px}
.btn.block{width:100%}
.btn.danger{background:var(--card);border-color:var(--danger);color:var(--danger)}
.btn-row{display:flex;gap:10px;flex-wrap:wrap}
.btn-row .btn{flex:1 1 auto}
.link-btn{background:none;border:0;padding:0 4px;min-height:44px;color:var(--primary);font-weight:700;text-decoration:underline;text-underline-offset:4px}

/* 오늘: 추천 */
.suggest .row{min-height:72px}
.since{display:block;font-size:13px;font-weight:700;color:var(--primary-deep)}
.row-side.since{display:inline}
.since.never{color:var(--hard)}
.watch-reason{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}

/* 학생 목록 */
.search{width:100%;min-height:48px;padding:10px 14px;border:1.5px solid var(--control);border-radius:12px;background:var(--card)}
.filters{display:flex;gap:8px;overflow-x:auto;padding:12px 0 4px;margin:0 -16px;padding-inline:16px;scrollbar-width:none}
.filters::-webkit-scrollbar{display:none}
.filter{flex-shrink:0;min-height:44px;padding:8px 16px;border-radius:999px;border:1.5px solid var(--line);background:var(--card);font-weight:600;color:var(--muted)}
.filter[aria-pressed=true]{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}

/* 학생 상세 */
.profile{display:flex;gap:14px;align-items:center}
.profile .avatar{width:56px;height:56px;font-size:20px}
.meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.memo{margin-top:12px;font-size:14px;color:var(--muted);background:var(--bg);border-radius:12px;padding:10px 12px}
.timeline{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.note-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
.note-date{font-weight:800}
.note-by{font-size:13px;color:var(--muted)}
.note-body{margin-top:10px;display:grid;gap:8px}
.note-body dt{font-size:13px;font-weight:700;color:var(--muted)}
.note-body dd{margin:0;white-space:pre-wrap}
.note-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}

/* 양식 */
.form{display:grid;gap:20px}
.field{display:grid;gap:8px}
.field>label,.field legend{font-weight:700;font-size:15px}
.req{color:var(--danger);font-weight:700}
.field input[type=text],.field input[type=date],.field input[type=tel],.field input[type=password],.field select,.field textarea{width:100%;min-height:48px;padding:10px 14px;border:1.5px solid var(--control);border-radius:12px;background:var(--card)}
.field input[type=password]{letter-spacing:.4em;font-size:20px}
.field textarea{min-height:96px;resize:vertical;line-height:1.6}
.field .help{font-size:13px;color:var(--muted)}
.field .error{font-size:14px;color:var(--danger);font-weight:700}
.field [aria-invalid=true]{border-color:var(--danger)}
fieldset{border:0;margin:0;padding:0}
.mood-picker{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.mood-picker input{position:absolute;opacity:0;pointer-events:none}
.mood-picker label{display:grid;place-items:center;gap:2px;min-height:76px;padding:8px;border:1.5px solid var(--line);border-radius:14px;background:var(--card);font-weight:700;font-size:15px;text-align:center}
.mood-picker .emoji{font-size:26px;line-height:1}
.mood-picker input:checked+label{border-width:2.5px}
.mood-picker input[value=bright]:checked+label{border-color:var(--bright);background:var(--bright-soft);color:var(--bright)}
.mood-picker input[value=normal]:checked+label{border-color:var(--normal);background:var(--normal-soft);color:var(--normal)}
.mood-picker input[value=hard]:checked+label{border-color:var(--hard);background:var(--hard-soft);color:var(--hard)}
.mood-picker input:focus-visible+label{outline:3px solid var(--sun);outline-offset:2px}
.check{display:flex;align-items:flex-start;gap:12px;min-height:48px;padding:12px 14px;border:1.5px solid var(--line);border-radius:14px;background:var(--card);font-weight:700}
.check input{width:22px;height:22px;margin:1px 0 0;accent-color:var(--primary);flex-shrink:0}
.check small{display:block;font-weight:400;color:var(--muted);font-size:14px}
.form-actions{display:grid;grid-template-columns:1fr 2fr;gap:10px;position:sticky;bottom:calc(var(--tab-h) + env(safe-area-inset-bottom));background:var(--bg);padding:12px 0;border-top:1px solid var(--line)}

/* 로그인 */
.login{min-height:70vh;display:grid;align-content:center;gap:20px}
.login .card{display:grid;gap:12px}
.account-btn{display:flex;justify-content:space-between;align-items:center;gap:10px;width:100%;min-height:56px;padding:10px 16px;border:1.5px solid var(--line);border-radius:14px;background:var(--card);text-align:left;font-weight:700}
.account-btn small{font-weight:600;color:var(--muted)}

/* 빈 상태와 안내 */
.empty{padding:20px;text-align:center;color:var(--muted);background:var(--card);border:1px dashed var(--line);border-radius:var(--r)}
.notice{font-size:14px;color:var(--muted);background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px}
.notice ul{margin:8px 0 0;padding-left:20px}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px;text-align:center}
.stat strong{display:block;font-size:22px;line-height:1.2}
.stat span{font-size:13px;color:var(--muted)}

/* 하단 탭 */
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;display:grid;grid-template-columns:repeat(4,1fr);background:var(--bar);border-top:1px solid var(--line);padding:6px max(8px,env(safe-area-inset-left)) calc(6px + env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-right))}
.tabbar a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:52px;border-radius:12px;color:var(--muted);text-decoration:none;font-size:12px;font-weight:600}
.tabbar svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.tabbar a[aria-current=page]{color:var(--primary-deep);background:var(--primary-soft);font-weight:800}
.tabbar a[data-tab=write] svg{background:var(--primary);color:var(--on-primary);border-radius:50%;padding:3px;width:28px;height:28px}
@media(min-width:600px){.tabbar{left:50%;right:auto;width:560px;transform:translateX(-50%);border:1px solid var(--line);border-bottom:0;border-radius:18px 18px 0 0}}

#toast{position:fixed;left:50%;bottom:calc(var(--tab-h) + 20px + env(safe-area-inset-bottom));transform:translateX(-50%);max-width:calc(100% - 32px);background:var(--toast-bg);color:var(--toast-fg);padding:12px 18px;border-radius:999px;font-size:15px;opacity:0;pointer-events:none;z-index:40}
#toast.show{opacity:1}

@media(prefers-reduced-motion:no-preference){#toast{transition:opacity .2s}.btn,.filter,.row{transition:background-color .15s}}

/* 4자리 번호 입력 */
.pin-screen{min-height:72vh;display:grid;align-content:center;justify-items:center;gap:20px;text-align:center}
.pin-screen h1{font-size:22px}
.pin-dots{display:flex;gap:16px;justify-content:center;padding:8px 0}
.pin-dots span{width:16px;height:16px;border-radius:50%;border:2px solid var(--control)}
.pin-dots span.on{background:var(--primary);border-color:var(--primary)}
.pin-error{min-height:1.6em;color:var(--danger);font-weight:700;font-size:15px}
.keypad{display:grid;grid-template-columns:repeat(3,76px);gap:14px;justify-content:center}
.key{height:76px;border-radius:50%;border:1.5px solid var(--line);background:var(--card);font-size:26px;font-weight:600;color:var(--ink);display:grid;place-items:center}
.key:active{background:var(--pressed)}
.key.ghost{border-color:transparent;background:transparent;font-size:16px;color:var(--muted)}
.key:disabled{opacity:.5}
@media(max-width:340px){.keypad{grid-template-columns:repeat(3,68px);gap:12px}.key{height:68px}}
.inline-form{display:flex;gap:8px;align-items:flex-end}
.inline-form .field{flex:1;min-width:0}
