:root{--page-bg:#fff;--surface:#fff;--chart-surface:#fcfcfb;--text-primary:#0b0b0b;--text-secondary:#52514e;--text-muted:#898781;--border:#0b0b0b1a;--accent:#2a78d6;--danger:#d03b3b;--status-good:#0ca30c;--status-warning:#fab219;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light only}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}img{-webkit-user-drag:none;user-drag:none;-webkit-user-select:none;user-select:none}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;overflow-y:scroll}body{color:var(--text-primary);background:#b0b0b0;margin:0;font-family:system-ui,-apple-system,Segoe UI,Noto Sans KR,Roboto,sans-serif}#root{background:#f0f0f0;flex-direction:column;width:100%;max-width:480px;min-height:100vh;margin:0 auto;display:flex}.page{flex:1;width:100%;padding:20px 8px 40px;position:relative;overflow-x:hidden}@media (width<=380px){.page{padding:14px 6px 32px}.page-header h1{font-size:16px}.teacher-student-name{font-size:15px}.teacher-student-action{min-width:48px;padding:6px 7px}.teacher-student-action span{font-size:9px}.subject-chip{padding:6px 12px;font-size:13px}.tabs a{padding:8px 4px;font-size:12px}.date-nav__label{font-size:13px}}.page-header{background:#fff;justify-content:space-between;align-items:center;gap:8px;min-height:70px;margin:-20px -8px 5px;padding:0 8px;display:flex;position:relative}.page-header h1{white-space:nowrap;pointer-events:none;margin:0;font-size:clamp(16px,4.5vw,19px);position:absolute;left:50%;transform:translate(-50%)}.back-link{min-height:38px;color:var(--text-secondary);white-space:nowrap;align-items:center;margin:-8px -4px;padding:8px 4px;font-size:14px;text-decoration:none;display:inline-flex}.logout-button,.button-secondary{color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #222;border-radius:8px;min-height:36px;padding:8px 14px;font-size:13px}.menu-list{flex-direction:column;gap:5px;margin:0;padding:0;list-style:none;display:flex}.menu-list a,.menu-list button{text-align:left;border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text-primary);cursor:pointer;border-radius:12px;padding:16px;font-size:16px;text-decoration:none;display:block;position:relative}.login-bg-page{flex-direction:column;justify-content:flex-end;display:flex}@media (width<=768px){.login-bg-page{padding-top:25vh;padding-bottom:100px}.login-img-btn{width:70%}}@media (height<=680px){.login-bg-page{padding-top:15vh;padding-bottom:60px}.login-bg-page .login-role-list{gap:7px;margin-bottom:28px}.login-img-btn{width:62%}}@media (height>=900px){.login-bg-page{padding-top:32vh;padding-bottom:120px}}.login-bg-page .login-role-list{flex-direction:column;gap:10px;margin-top:auto;margin-bottom:48px;display:flex}.login-hero{background:#fff;justify-content:center;align-items:center;margin:-20px -8px 78px;padding:2px 8px;display:flex;position:relative}.login-logo-hwarang{mix-blend-mode:multiply;width:auto;height:90px}.login-subtitle{color:var(--text-secondary);margin:0;font-size:14px}.login-deco-img{filter:brightness(.35)sepia()saturate(4)hue-rotate(195deg);width:104px;position:absolute;bottom:-78px;right:0}.login-social{justify-content:center;align-items:center;gap:12px;margin-bottom:10px;display:flex}.login-social--a .login-social__btn{color:#333;background:0 0;border:1px solid #00000026;border-radius:20px;align-items:center;gap:6px;padding:8px 18px;font-size:13px;font-weight:600;text-decoration:none;display:inline-flex}.login-social--a{margin-top:16px;margin-bottom:32px}.login-social--b{gap:0;margin-top:20px;margin-bottom:32px}.login-social--b .login-social__link{letter-spacing:.08em;color:#555;padding:4px 20px;font-size:13px;font-weight:600;text-decoration:none;transition:color .2s}.login-social--b .login-social__link:hover{color:#222}.login-social__divider{vertical-align:middle;background:#aaa;width:1px;height:13px;display:inline-block}.login-img-btn{cursor:pointer;background:0 0;border:none;width:60%;margin:0 auto;padding:0;display:block}.login-img-btn img{border:1px solid #0000001f;border-radius:16px;width:100%;height:auto;display:block}.role-icon-box{border:1px solid #222;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:58px;height:58px;display:flex}.role-icon-box--student,.role-icon-box--parent,.role-icon-box--teacher{background:0 0}.role-icon-img{object-fit:contain;filter:brightness(1.1)saturate(1.4);width:38px;height:38px}.role-text{flex-direction:column;flex:1;gap:3px;display:flex}.role-title{color:var(--text-primary);font-size:16px;font-weight:600}.role-subtitle{color:var(--text-secondary);font-size:13px}.role-chevron{color:var(--text-muted);font-size:22px;line-height:1}.student-home-page{background:#f2f2f2}.attendance-banner{margin:8px}.attendance-button{border:1px solid #0000;padding:13px 14px;font-size:17px;width:100%!important}.attendance-status{border-radius:10px;justify-content:center;align-items:center;min-height:46px;padding:0 16px;font-size:15px;font-weight:600;display:flex}.attendance-status--pending{color:#b8860b;background:#fff8e1;border:1px solid #f0d060}.attendance-status--confirmed{color:#2e7d32;background:#e8f5e9;border:1px solid #a5d6a7}.student-home-page .student-menu-list{margin:0 8px}.student-home-page .student-menu-list a{background:#fff;border-color:#222}.student-menu-list a{align-items:center;gap:14px;padding:16px;display:flex;box-shadow:0 2px 8px #00000012}.menu-icon-placeholder{font-size:24px}.menu-icon-rounded{object-fit:contain;mix-blend-mode:multiply;flex-shrink:0;width:52px;height:52px}.tabs{border-bottom:1px solid var(--border);gap:2px;margin-bottom:16px;display:flex}.tabs a{text-align:center;min-height:44px;color:var(--text-secondary);border-bottom:2px solid #0000;flex:1;justify-content:center;align-items:center;padding:10px 6px;font-size:13px;line-height:1.3;text-decoration:none;display:flex}@media (width>=420px){.tabs a{padding:10px 14px;font-size:14px}}.tabs a.active{color:var(--text-primary);border-bottom-color:var(--accent);font-weight:600}.subject-chips{flex-wrap:wrap;gap:8px;margin-bottom:16px;display:flex}.subject-chip{border:1.5px solid var(--border);cursor:pointer;color:#555;background:#fff;border-radius:20px;padding:8px 16px;font-size:14px;font-weight:600;transition:all .15s}.subject-chip--active{background:var(--primary,#6b5c45);color:#fff;border-color:var(--primary,#6b5c45)}.subject-chips-hint{text-align:center;padding:24px 0}.subject-inputs{flex-direction:column;gap:12px;margin-bottom:16px;display:flex}.subject-input-group{flex-direction:column;gap:6px;display:flex}.subject-input-label{color:#444;font-size:14px;font-weight:700}.subject-input-group textarea.study-input{min-height:80px}.study-save-bar{border-top:1px solid var(--border);z-index:90;background:#fff;flex-direction:column;gap:6px;width:100%;max-width:480px;padding:10px 16px;display:flex;position:fixed;bottom:64px;left:50%;transform:translate(-50%)}textarea.study-input{border:1px solid var(--border);background:var(--surface);width:100%;min-height:160px;color:var(--text-primary);resize:vertical;border-radius:10px;padding:12px;font-family:inherit;font-size:16px;position:relative}.hint{color:var(--text-muted);margin:6px 0 12px;font-size:13px}.primary-button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:10px;width:100%;min-height:46px;padding:12px 20px;font-size:15px;position:relative}@media (width>=420px){.primary-button{width:auto}}.primary-button:disabled{opacity:.5;cursor:default}.log-list{flex-direction:column;gap:5px;margin:0;padding:0;list-style:none;display:flex}.log-list a{border:1px solid var(--border);background:var(--surface);color:var(--text-primary);border-radius:10px;justify-content:space-between;align-items:center;padding:14px;text-decoration:none;display:flex;position:relative}.log-list .log-date{font-weight:600}.log-list .log-overall{color:var(--text-secondary);font-size:14px}.subject-section{border:1px solid var(--border);background:var(--surface);border-radius:10px;margin-bottom:10px;padding:12px 14px;position:relative}.subject-section h3{margin:0 0 6px;font-size:15px}.subject-section p{color:var(--text-secondary);white-space:pre-wrap;margin:0;font-size:14px}.subject-section__raw,.subject-section__plan{font-family:system-ui,-apple-system,Segoe UI,Noto Sans KR,Roboto,sans-serif;font-weight:600;color:var(--text-secondary)!important;margin-top:6px!important;font-size:14px!important}.subject-section__comment{font-family:system-ui,-apple-system,Segoe UI,Noto Sans KR,Roboto,sans-serif;font-weight:700;color:var(--text-primary)!important;margin-top:4px!important;font-size:15px!important}.subject-meter{align-items:center;gap:8px;display:flex}.subject-meter__track{background:var(--border);border-radius:5px;flex:1;height:10px;overflow:hidden}.subject-meter__fill{border-radius:5px;height:100%;transition:width .15s}.subject-meter__label{text-align:right;min-width:44px;color:var(--text-secondary);font-size:13px}.subject-section input[type=number]{border:1px solid var(--border);background:var(--surface);width:56px;min-height:32px;color:var(--text-primary);text-align:center;-moz-appearance:textfield;border-radius:8px;padding:4px 8px;font-size:15px}.subject-section input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.subject-section input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.state-message{color:var(--text-secondary);text-align:center;font-size:14px}.state-message--muted{color:var(--text-muted)}.state-message--error{color:var(--danger)}.login-form{flex-direction:column;gap:12px;margin-top:40px;display:flex;position:relative}.login-form input{border:1px solid var(--border);background:var(--surface);color:var(--text-primary);letter-spacing:2px;text-align:center;border-radius:10px;padding:12px;font-size:16px}.overall-chart{margin-bottom:20px}.overall-chart__hero{align-items:baseline;gap:8px;margin-bottom:4px;display:flex}.overall-chart__label{color:var(--text-secondary);font-size:14px}.overall-chart__value{font-size:28px;font-weight:600}.calendar__nav{justify-content:center;align-items:center;gap:16px;margin-bottom:12px;display:flex}.calendar__title{text-align:center;margin:0;font-size:16px;font-weight:600}.calendar__nav-btn{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;padding:4px 8px;font-size:22px;line-height:1}.calendar-weekdays{grid-template-columns:repeat(7,1fr);margin-bottom:6px;display:grid}.calendar-weekdays span{text-align:center;color:var(--text-muted);font-size:12px}.calendar-grid{grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.calendar-cell{aspect-ratio:1;border:1px solid var(--border);background:var(--surface);font:inherit;cursor:default;border-radius:8px;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:0;padding:4px 5px;display:flex}button.calendar-cell{cursor:pointer}.calendar-cell--blank{background:0 0;border:none}.calendar-cell__day{color:var(--text-primary);font-size:13px;line-height:1}.calendar-cell__mark{font-size:11px;font-weight:700;line-height:1}.calendar-cell--pending{border-color:var(--status-warning);background:#fab21933}.calendar-cell--pending .calendar-cell__mark{color:var(--status-warning)}.calendar-cell--confirmed,.calendar-cell--departed{border-color:var(--status-good);background:#0ca30c29}.calendar-cell--confirmed .calendar-cell__mark,.calendar-cell--departed .calendar-cell__mark{color:var(--status-good)}.calendar-cell--today{box-shadow:0 0 0 2px var(--accent) inset}.calendar-legend{color:var(--text-secondary);flex-wrap:wrap;gap:12px;margin-top:14px;font-size:12px;display:flex}.calendar-legend span{align-items:center;gap:5px;display:inline-flex}.calendar-swatch{border:1px solid var(--border);border-radius:3px;width:10px;height:10px;display:inline-block}.calendar-swatch--none{background:var(--surface)}.calendar-swatch--pending{background:var(--status-warning);border-color:var(--status-warning)}.calendar-swatch--confirmed{background:var(--status-good);border-color:var(--status-good)}.student-list-item{position:relative}.menu-list .student-list-item>a:first-child{padding-right:64px}.student-list-grade{color:var(--text-muted);margin-left:8px;font-size:13px}.day-status-badge{vertical-align:middle;border-radius:99px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.day-status-badge--pending{background:var(--warning,#f59e0b);color:#fff}.day-status-badge--studying{background:var(--accent);color:#fff}.day-status-badge--departed{background:var(--status-good);color:#fff}.attendance-pending-badge{background:var(--warning,#f59e0b);color:#fff;vertical-align:middle;border-radius:99px;margin-left:8px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.menu-list .student-list-item .student-list-edit{border:1px solid var(--border);width:auto;color:var(--text-secondary);background:#efefef;border-radius:6px;align-items:center;padding:12px 18px;font-size:13px;text-decoration:none;display:inline-flex;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.today-announce{border-radius:12px;margin:5px 0;padding:16px;font-size:14px;font-weight:600}.today-announce--cancel{color:#c0392b;background:#fdecea;border:1px solid #f5c6c2}.today-announce--time_change{color:#b8860b;background:#fff8e1;border:1px solid #f0d060}.announce-form{flex-direction:column;gap:20px;display:flex}.announce-field{flex-direction:column;gap:8px;display:flex}.announce-label{color:#444;font-size:14px;font-weight:700}.announce-date-input{border:1px solid var(--border);background:var(--surface);color:var(--text-primary);border-radius:10px;padding:10px 12px;font-size:16px}.announce-type-row{gap:8px;display:flex}.announce-student-grid{flex-wrap:wrap;gap:10px;padding:4px 0;display:flex}.announce-student-chip{cursor:pointer;background:var(--surface);border:1px solid var(--border);border-radius:8px;align-items:center;gap:6px;padding:7px 12px;font-size:15px;display:flex}.announce-student-chip input[type=checkbox]{cursor:pointer;flex-shrink:0;width:16px;height:16px}.announce-student-grade{color:var(--text-muted);margin-left:2px;font-size:12px}.calendar-cell__announce{text-align:center;word-break:keep-all;border-radius:3px;padding:0 2px;font-size:10px;font-weight:700;line-height:1}.calendar-cell__announce--cancel{color:#fff;background:#d03b3b}.calendar-cell__announce--time_change{color:#fff;background:#4f46e5}.calendar-swatch--cancel{background:#d03b3b;border-color:#d03b3b}.calendar-swatch--time-change{background:#4f46e5;border-color:#4f46e5}.teacher-student-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.teacher-student-item{background:var(--surface);border:1px solid var(--border);border-radius:12px;justify-content:space-between;align-items:center;gap:12px;padding:14px;display:flex}.teacher-student-info{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.teacher-student-name{color:var(--text-primary);font-size:clamp(14px,4vw,17px);font-weight:700}.teacher-student-meta{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.teacher-student-grade{color:var(--text-muted);font-size:13px}.teacher-student-actions{flex-shrink:0;gap:4px;display:flex}.teacher-student-action{color:var(--text-secondary);border:1px solid var(--border);background:#f7f7f7;border-radius:10px;flex-direction:column;align-items:center;gap:4px;min-width:60px;padding:8px 10px;text-decoration:none;display:flex}.teacher-student-action span{white-space:nowrap;font-size:10px;font-weight:600}.table-edit-input{border:1px solid var(--accent);width:100%;min-width:54px;color:var(--text-primary);background:#fff;border-radius:4px;padding:4px 5px;font-family:inherit;font-size:13px}.table-edit-input--pin{text-align:center;letter-spacing:2px;width:46px;font-family:monospace}.table-edit-select{border:1px solid var(--accent);color:var(--text-primary);background:#fff;border-radius:4px;padding:4px 2px;font-size:13px}.modal-overlay{z-index:200;background:#00000073;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.modal-card{background:#fff;border-radius:20px 20px 0 0;width:100%;max-width:480px;max-height:90vh;padding:20px 16px 36px;overflow-y:auto}.modal-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.modal-title{margin:0;font-size:18px;font-weight:700}.modal-close{color:var(--text-muted);cursor:pointer;background:0 0;border:none;padding:4px 8px;font-size:18px;line-height:1}.teacher-layout{flex-direction:column;flex:1;display:flex}.teacher-layout .page{padding-bottom:84px}.date-nav{justify-content:space-between;align-items:center;padding:4px 0 16px;display:flex}.date-nav__label{color:var(--text-primary);font-size:15px;font-weight:600}.date-nav__btn{border:1px solid var(--border);cursor:pointer;width:36px;height:36px;color:var(--text-primary);background:0 0;border-radius:8px;justify-content:center;align-items:center;font-size:20px;line-height:1;display:flex}.date-nav__btn:disabled{color:var(--text-muted);border-color:var(--border);cursor:default;opacity:.4}.teacher-tab-bar{border-top:1px solid var(--border);z-index:100;background:#fff;width:100%;max-width:480px;height:64px;display:flex;position:fixed;bottom:0;left:50%;transform:translate(-50%)}.teacher-tab{color:var(--text-muted);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:4px;padding:8px 4px;text-decoration:none;transition:color .12s;display:flex}.teacher-tab:not(:last-child){border-right:1px solid var(--border)}.teacher-tab--active{color:var(--accent)}.teacher-tab__label{font-size:11px;font-weight:600}.planner-grid{grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.planner-cell{aspect-ratio:1;background:var(--surface);border:1px solid var(--border);cursor:pointer;font:inherit;border-radius:8px;outline:none;flex-direction:column;justify-content:center;align-items:center;padding:4px 5px;display:flex;position:relative;overflow:hidden}.planner-cell--blank{pointer-events:none;background:0 0;border:none}.planner-cell--today{box-shadow:0 0 0 2px var(--accent) inset}.planner-cell--today .planner-day{color:var(--accent);font-weight:700}.planner-day{font-size:13px;line-height:1;position:absolute;top:4px;left:5px}.planner-cell--pick{background:#e8f0fb;border-color:#2a78d6}.planner-lines{flex-direction:column;gap:2px;width:78%;margin-top:4px;display:flex}.planner-line{border-radius:2px;height:4px}.planner-panel{background:var(--surface);border:1px solid var(--border);border-radius:14px;margin-top:14px;padding:14px 16px}.planner-panel__label{color:var(--text-muted);margin:0 0 10px;font-size:12px}.parent-contact{border-top:1px solid var(--border);margin-top:28px;padding-top:20px}.parent-contact__label{color:var(--text-muted);margin:0 0 10px;font-size:13px}.parent-contact__row{justify-content:space-between;align-items:center;gap:12px;display:flex}.parent-contact__phone{color:var(--text-primary);font-size:16px}.parent-contact__edit{flex-direction:column;gap:10px;display:flex}.parent-contact__input{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text-primary);letter-spacing:1px;border-radius:10px;padding:12px;font-size:16px}.parent-contact__actions{gap:8px;display:flex}
