/* 몽글 물리 공용 스타일 — 교사(index.html)·학생(s.html) 모두 사용 */
    * { box-sizing: border-box; font-family: 'Pretendard', -apple-system, 'Malgun Gothic', sans-serif; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent; }
    [hidden] { display: none !important; }
    button { font: inherit; color: inherit; }
    .num { font-variant-numeric: tabular-nums; }

    /* 🪟 모달 · 확인창 · 토스트 (몽글 클래스와 동일) */
    .modal { display: flex; position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.7); justify-content: center; align-items: center; z-index: 300; }
    .modal-content { background-color: var(--bg-container); width: 92%; max-width: 390px; border-radius: 16px; padding: 20px; border: 1px solid var(--border-color); max-height: 88vh; overflow-y: auto; scrollbar-width: none; color: var(--text-main); }
    .modal-top-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; padding-bottom: 10px; border-bottom: 1px solid var(--border-color); }
    .modal-top-header h3 { font-size: 14.5px; font-weight: 700; color: var(--text-main); }
    .close-top-link { color: var(--text-muted); font-size: 11px; font-weight: 700; cursor: pointer; background-color: rgba(100, 116, 139, 0.12); padding: 5px 9px; border-radius: 6px; white-space: nowrap; border: none; }
    .close-top-link i { font-size: 10px; margin-right: 3px; }
    .form-group { margin-bottom: 14px; }
    .form-group label { display: block; font-size: 11.5px; font-weight: 600; color: var(--text-muted); margin-bottom: 6px; padding-left: 2px; }
    .form-group input, .form-group select { width: 100%; padding: 11px; border-radius: 8px; border: 1px solid var(--border-color); background-color: var(--bg-input); color: var(--text-main); font-size: 13px; outline: none; }
    .form-group input:focus, .form-group select:focus { border-color: var(--accent-color); }
    .chip-pick { display: flex; flex-wrap: wrap; gap: 6px; }
    .recognized-chip { padding: 9px 14px; border-radius: 20px; border: 1.5px solid var(--border-color); background-color: var(--bg-body); color: var(--text-muted); font-size: 12.5px; font-weight: 700; cursor: pointer; }
    .recognized-chip.active { background: var(--accent-gradient); border-color: transparent; color: #FFFFFF; }
    .modal-btns { display: flex; gap: 8px; margin-top: 16px; }
    .m-btn { flex: 1; padding: 12px; border-radius: 8px; border: none; font-weight: 700; cursor: pointer; font-size: 14px; text-align: center; }
    .m-btn.cancel { background-color: var(--border-color); color: var(--text-main); }
    .m-btn.save { background: var(--accent-gradient); color: #fff; }
    .m-btn:disabled { opacity: 0.55; }
    .app-confirm-box { background-color: var(--bg-container); width: 85%; max-width: 320px; border-radius: 16px; border: 1px solid var(--border-color); padding: 22px; text-align: center; box-shadow: 0 10px 25px rgba(0,0,0,0.2); }
    .app-confirm-text { font-size: 13.5px; color: var(--text-main); font-weight: 600; line-height: 1.6; margin-bottom: 20px; white-space: pre-line; }
    .app-confirm-btns { display: flex; gap: 10px; }
    .app-confirm-btn { flex: 1; padding: 11px; border-radius: 8px; border: none; font-size: 13px; font-weight: 700; cursor: pointer; }
    .app-confirm-btn.yes { background-color: var(--danger-color); color: #fff; }
    .app-confirm-btn.no { background-color: var(--border-color); color: var(--text-muted); }
    .app-toast-bar { position: fixed; bottom: calc(92px + env(safe-area-inset-bottom)); left: 50%; transform: translateX(-50%) translateY(20px); background-color: #0F172A; color: #F1F5F9; padding: 12px 18px; border-radius: 20px; font-size: 12px; font-weight: 700; box-shadow: 0 6px 20px rgba(0,0,0,0.25); z-index: 10500; pointer-events: none; opacity: 0; transition: all 0.25s ease-out; max-width: 90%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .app-toast-bar.show { opacity: 1; transform: translateX(-50%) translateY(0); }
    html.stu .app-toast-bar { background-color: #2E2420; }


    /* ───────────── 용수철 실험실 (교사·학생 공용) ───────────── */
    .lab { display: flex; flex-direction: column; gap: 12px; }
    .lgrid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; }
    html.stu .lgrid { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); align-items: start; }
    @media (max-width: 900px) { html.stu .lgrid { grid-template-columns: minmax(0, 1fr); } }
    @media (min-width: 901px) {
      html.stu .lgrid .stage { position: sticky; top: 12px; }
      html.stu .lgrid .steps { max-height: calc(100vh - var(--lab-top, 96px)); overflow-y: auto; overscroll-behavior: contain; }
      html.stu .lgrid .steps .step-tabs { position: sticky; top: -14px; z-index: 3; background: var(--bg-card); margin: 0 -14px; padding: 8px 14px 8px; }
    }
    /* 조건 칩 → 그 부분만 바꾸는 작은 창 */
    .cond-strip { position: absolute; left: 10px; right: 10px; top: 10px; z-index: 6; display: flex; flex-wrap: wrap; align-items: center; gap: 5px; pointer-events: none; }
    .cond-strip .cond-chip { pointer-events: auto; }
    .cond-chip { display: inline-flex; align-items: center; gap: 6px; padding: 6px 11px; border-radius: 999px; border: 1.5px solid var(--border-color); background: color-mix(in srgb, var(--bg-container) 92%, transparent); color: var(--text-main); font: inherit; font-size: 12.5px; font-weight: 800; cursor: pointer; font-variant-numeric: tabular-nums; box-shadow: 0 3px 10px rgba(0,0,0,0.06); white-space: nowrap; }
    .cond-chip > i:first-child { color: var(--accent-color); font-size: 11px; }
    .cond-chip .cc-caret { font-size: 9px; color: var(--text-muted); transition: transform .15s; }
    .cond-chip:hover { border-color: var(--accent-color); }
    .cond-chip.on { background: var(--accent-color); border-color: var(--accent-color); color: #fff; }
    .cond-chip.on i { color: #fff !important; }
    .cond-chip.on .cc-caret { transform: rotate(180deg); }
    .show-btn { position: absolute; left: 10px; bottom: 10px; z-index: 6; }
    .set-pop { position: absolute; z-index: 8; display: flex; flex-direction: column; background: var(--bg-container); border: 1.5px solid var(--border-color); border-radius: 18px; box-shadow: 0 14px 34px rgba(0,0,0,0.18); animation: popIn .15s ease-out; overflow: hidden; }
    .set-pop[hidden] { display: none; }
    .set-head { display: flex; align-items: center; justify-content: space-between; padding: 8px 6px 4px 14px; font-size: 13px; font-weight: 800; color: var(--text-muted); }
    .set-body { overflow-y: auto; overscroll-behavior: contain; padding: 2px 12px 12px; touch-action: pan-y pinch-zoom; }
    .set-body > div { display: flex; flex-direction: column; gap: 10px; }
    .set-body > div[hidden] { display: none; }
    .set-body .lcard-h > span { display: none !important; }
    .set-body .lcard-h { justify-content: flex-start; }
    .set-head span { font-size: 14px; color: var(--text-main); }
    @keyframes popIn { from { transform: translateY(-6px); opacity: 0; } to { transform: none; opacity: 1; } }
    /* 계산기 */
    .calc-float { width: 236px; right: 10px; bottom: 10px; }
    .calc-scr { background: var(--bg-body); border: 1px solid var(--border-color); border-radius: 12px; padding: 6px 10px; text-align: right; min-width: 0; }
    .calc-exp { font-size: 12px; color: var(--text-muted); min-height: 16px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; font-variant-numeric: tabular-nums; }
    .calc-res { font-size: 22px; font-weight: 800; color: var(--text-main); overflow-x: auto; white-space: nowrap; scrollbar-width: none; font-variant-numeric: tabular-nums; }
    .calc-keys { display: grid; grid-template-columns: repeat(5, 1fr); gap: 4px; }
    .ck { padding: 9px 0; border-radius: 10px; border: 1px solid var(--border-color); background: var(--bg-card); color: var(--text-main); font: inherit; font-size: 13.5px; font-weight: 800; cursor: pointer; touch-action: manipulation; }
    .ck.num { background: var(--bg-body); }
    .ck.eq { background: var(--accent-color); border-color: var(--accent-color); color: #fff; }
    .ck:active { transform: scale(0.95); }
    .lpanel { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
    .lcard { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 16px; padding: 14px; display: flex; flex-direction: column; gap: 10px; min-width: 0; }
    html.stu .lcard { border-width: 1.5px; border-radius: 18px; }
    .lcard-h { display: flex; justify-content: space-between; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13px; font-weight: 800; color: var(--text-main); }
    .lcard-h > span:first-child { display: inline-flex; align-items: center; gap: 7px; }
    .lcard-h > span:first-child i { color: var(--accent-color); font-size: 13px; width: 16px; text-align: center; }
    .lcard-h b { font-size: 15px; font-weight: 800; color: var(--accent-color); font-variant-numeric: tabular-nums; }
    .stage { padding: 0; overflow: hidden; gap: 0; }
    .stage canvas { display: block; width: 100%; height: 460px; touch-action: pan-y pinch-zoom; cursor: default; background: var(--bg-card); }
    html.stu .stage canvas { height: 540px; }
    @media (max-width: 520px) { html.stu .stage canvas { height: 470px; } }
    .stage-view { position: relative; }
    .sw-float { position: absolute; right: 10px; bottom: 10px; z-index: 5; width: 214px; background: var(--bg-container); border: 1.5px solid var(--border-color); border-radius: 16px; padding: 8px 10px 10px; box-shadow: 0 10px 26px rgba(0,0,0,0.16); display: flex; flex-direction: column; gap: 6px; }
    .sw-grip { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 800; color: var(--text-muted); cursor: move; touch-action: none; user-select: none; -webkit-user-select: none; }
    .sw-grip > span:first-child { flex: 1; display: inline-flex; align-items: center; gap: 5px; }
    .sw-grip i { color: var(--accent-color); }
    .sw-x { background: none; border: none; color: var(--text-muted); font-size: 13px; padding: 2px 4px; cursor: pointer; }
    .sw-float .watch { font-size: 32px; text-align: center; }
    .sw-btns { display: flex; gap: 5px; }
    .sw-btns .pbtn { flex: 1; justify-content: center; padding: 8px 4px; }
    .sw-tip { font-size: 10px; color: var(--text-muted); text-align: center; }
    @media (hover: none) { .sw-tip { display: none; } }
    .stage-bar { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; padding: 10px; border-top: 1px solid var(--border-color); background: var(--bg-card); }
    .stage-bar .sp { flex: 1; }
    .pull-btn.go { animation: pulse 1.2s ease-in-out infinite; }
    @keyframes pulse { 50% { box-shadow: 0 0 0 5px var(--bg-accent-alpha); } }
    .prow { display: flex; flex-wrap: wrap; gap: 6px; }
    .pbtn { padding: 7px 12px; border-radius: 20px; border: 1.5px solid var(--border-color); background-color: var(--bg-body); color: var(--text-muted); font-size: 12.5px; font-weight: 700; cursor: pointer; white-space: nowrap; display: inline-flex; align-items: center; gap: 5px; transition: transform .1s; }
    .pbtn:active { transform: scale(0.97); }
    .pbtn.on, .pbtn.solid { background: var(--accent-gradient); border-color: transparent; color: #fff; }
    .pbtn.sm { padding: 5px 10px; font-size: 11.5px; }
    .spring-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
    .spring-btn { justify-content: space-between; border-radius: 12px; padding: 8px 10px; font-size: 13px; font-weight: 800; }
    .spring-btn .dots { font-size: 6px; letter-spacing: 1px; color: currentColor; opacity: 0.9; }
    .spring-btn .dots i { font-style: normal; opacity: 0.25; }
    .mini-toggle { display: flex; align-items: center; gap: 7px; font-size: 12px; font-weight: 700; color: var(--text-muted); cursor: pointer; }
    .mini-toggle input, .sel input { accent-color: var(--accent-color); width: 15px; height: 15px; }
    .mslider { display: flex; align-items: center; gap: 8px; touch-action: pan-y; user-select: none; -webkit-user-select: none; }
    .mslider:focus-visible { outline: 2px solid var(--accent-color); outline-offset: 3px; border-radius: 10px; }
    .ms-btn { width: 32px; height: 32px; flex: none; border-radius: 50%; border: 1.5px solid var(--border-color); background: var(--bg-container); color: var(--text-main); font-size: 17px; font-weight: 800; line-height: 1; cursor: pointer; touch-action: manipulation; }
    .ms-btn:active { background: var(--bg-accent-alpha); border-color: var(--accent-color); }
    .ms-track { position: relative; flex: 1; height: 6px; border-radius: 3px; background: var(--border-color); margin: 14px 4px; }
    .ms-fill { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 3px; background: var(--accent-color); }
    .ms-thumb { position: absolute; top: 50%; width: 26px; height: 26px; border-radius: 50%; background: #fff; border: 3px solid var(--accent-color); transform: translate(-50%, -50%); box-shadow: 0 2px 6px rgba(0,0,0,0.18); cursor: grab; transition: transform .1s; }
    .mslider.active .ms-thumb { transform: translate(-50%, -50%) scale(1.18); cursor: grabbing; }
    .tgrid { display: flex; flex-wrap: wrap; gap: 6px; }
    .tchip { padding: 7px 11px; border-radius: 20px; border: 1.5px solid var(--border-color); background: var(--bg-container); color: var(--text-muted); font-size: 12px; font-weight: 700; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; }
    .tchip::before { content: ""; width: 8px; height: 8px; border-radius: 50%; border: 1.5px solid currentColor; }
    .tchip.on { border-color: var(--accent-color); color: var(--accent-color); background: var(--bg-accent-alpha); }
    .tchip.on::before { background: currentColor; }
    .legend { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 11.5px; color: var(--text-muted); }
    .legend i { display: inline-block; width: 12px; height: 4px; border-radius: 2px; margin-right: 4px; vertical-align: middle; }
    .watch { font-size: 36px; font-weight: 800; font-variant-numeric: tabular-nums; line-height: 1.1; letter-spacing: -0.5px; color: var(--text-main); }
    .count { font-size: 12.5px; font-weight: 800; color: var(--accent-color); background: var(--bg-accent-alpha); padding: 3px 9px; border-radius: 12px; }
    .lhint { font-size: 11.5px; color: var(--text-muted); line-height: 1.55; }
    .theory { background: var(--bg-accent-alpha); }
    .kv { display: grid; grid-template-columns: auto 1fr; gap: 5px 12px; font-size: 12.5px; }
    .kv span:nth-child(odd) { color: var(--text-muted); }
    .kv span:nth-child(even) { font-weight: 800; text-align: right; font-variant-numeric: tabular-nums; }
    .tw { overflow-x: auto; scrollbar-width: thin; border: 1px solid var(--border-color); border-radius: 12px; background: var(--bg-container); }
    .ptable { width: 100%; border-collapse: collapse; font-size: 12px; min-width: 480px; }
    .ptable th { padding: 8px 6px; font-size: 10.5px; font-weight: 800; color: var(--text-muted); background: var(--bg-body); text-align: right; white-space: nowrap; }
    .ptable td { padding: 8px 6px; border-top: 1px solid var(--border-color); text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; color: var(--text-main); }
    .ptable th:first-child, .ptable td:first-child { text-align: left; padding-left: 10px; color: var(--text-muted); }
    .ptable td.t { font-weight: 800; }
    .ptable td b { color: var(--accent-color); }
    .ptable td.e { text-align: center; color: var(--text-muted); padding: 18px 8px; white-space: normal; }
    .ptable td input[type=number] { width: 48px; text-align: right; border: 1px solid var(--border-color); border-radius: 8px; background: var(--bg-input); color: var(--text-main); padding: 4px 6px; font-size: 12px; }
    .ptable td input[type=checkbox] { accent-color: var(--accent-color); width: 16px; height: 16px; }
    .icon-btn-plain { background: none; border: none; color: var(--text-muted); font-size: 14px; cursor: pointer; padding: 6px; display: inline-flex; align-items: center; justify-content: center; }
    .icon-btn-plain:active { color: var(--danger-color); }
    /* 단계 패널 */
    .steps { gap: 12px; }
    .step-tabs { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
    .step-tab { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 9px 2px; border-radius: 14px; border: 1.5px solid var(--border-color); background: var(--bg-body); color: var(--text-muted); font-size: 12px; font-weight: 800; cursor: pointer; line-height: 1.25; text-align: center; }
    .step-tab span { width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; background: var(--border-color); color: var(--text-main); font-size: 12px; }
    .step-tab.on { border-color: var(--accent-color); color: var(--accent-color); background: var(--bg-accent-alpha); }
    .step-tab.on span { background: var(--accent-color); color: #fff; }
    [data-pane] { display: flex; flex-direction: column; gap: 10px; }
    [data-pane][hidden] { display: none !important; }
    .step-guide { font-size: 12px; color: var(--text-muted); line-height: 1.6; background: var(--bg-body); border-radius: 12px; padding: 10px 12px; }
    .step-guide > b:first-child { display: block; color: var(--text-main); font-size: 13px; margin-bottom: 2px; }
    .step-guide b { color: var(--text-main); }
    .read-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
    .read-cond { flex: 1 1 100%; font-size: 12px; color: var(--text-muted); }
    .read-cond b { color: var(--accent-color); }
    .read-in { flex: 1; display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700; color: var(--text-muted); min-width: 0; }
    .read-in input, .kset input { width: 90px; min-width: 0; border: 1.5px solid var(--border-color); background: var(--bg-input); color: var(--text-main); border-radius: 10px; padding: 8px 10px; font-size: 15px; font-weight: 800; text-align: right; font-variant-numeric: tabular-nums; }
    .read-in input:focus, .kset input:focus { outline: none; border-color: var(--accent-color); }
    .read-in em, .kset em { font-style: normal; font-size: 12px; font-weight: 700; color: var(--text-muted); }
    .kfit { display: flex; flex-direction: column; gap: 6px; }
    .chart-wrap.small svg { height: 220px; }
    html.stu .chart-wrap.small svg { height: 240px; }
    .kset { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 13px; font-weight: 700; color: var(--text-main); background: var(--bg-accent-alpha); border-radius: 12px; padding: 10px 12px; }
    .kset b { color: var(--accent-color); }
    .ef-h { font-size: 12px; font-weight: 800; color: var(--text-main); }
    .kgrid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; margin-top: 6px; }
    .kcell { display: flex; flex-direction: column; align-items: center; gap: 1px; padding: 8px 2px; border-radius: 12px; border: 1.5px dashed var(--border-color); background: var(--bg-container); color: var(--text-muted); cursor: pointer; }
    .kcell span { font-size: 11px; font-weight: 800; }
    .kcell b { font-size: 14px; font-weight: 800; color: var(--text-muted); font-variant-numeric: tabular-nums; }
    .kcell small { font-size: 9px; }
    .kcell.done { border-style: solid; border-color: var(--accent-color); }
    .kcell.done b { color: var(--accent-color); }
    .kcell.cur { box-shadow: 0 0 0 2px var(--bg-accent-alpha); background: var(--bg-accent-alpha); }
    .exp-form { display: flex; flex-direction: column; gap: 8px; border: 1.5px solid var(--accent-color); border-radius: 14px; padding: 12px; background: var(--bg-container); }
    .ef-ctrl { font-size: 12px; color: var(--text-main); line-height: 1.7; }
    .tag-ctrl { display: inline-block; font-size: 10.5px; font-weight: 800; padding: 1px 7px; border-radius: 6px; background: var(--accent-color); color: #fff; }
    .tag-ctrl.keep { background: var(--text-muted); }
    .exp-card { border: 1.5px solid var(--border-color); border-radius: 14px; padding: 10px 12px; display: flex; flex-direction: column; gap: 7px; background: var(--bg-container); }
    .exp-card.on { border-color: var(--accent-color); box-shadow: 0 0 0 3px var(--bg-accent-alpha); }
    .exp-h { display: flex; align-items: center; gap: 8px; }
    .exp-pick { flex: 1; text-align: left; background: none; border: none; font-size: 14px; font-weight: 800; color: var(--text-main); cursor: pointer; display: flex; align-items: center; gap: 7px; padding: 0; }
    .exp-pick i { color: var(--accent-color); }
    .exp-live { font-size: 10.5px; font-weight: 800; color: #fff; background: var(--accent-color); padding: 2px 8px; border-radius: 10px; }
    .exp-meta { font-size: 11.5px; color: var(--text-muted); line-height: 1.7; }
    .empty-mini { text-align: center; font-size: 12px; color: var(--text-muted); padding: 18px 8px; }
    .axis-pick { display: grid; grid-template-columns: auto 1fr; gap: 6px 8px; align-items: center; margin-top: 8px; font-size: 11.5px; font-weight: 800; color: var(--text-muted); }
    [data-ctl] > .prow:first-child { margin-bottom: 2px; }
    .concl { display: flex; flex-direction: column; gap: 7px; margin-top: 8px; border-top: 1px dashed var(--border-color); padding-top: 10px; }
    .concl-h { font-size: 12.5px; font-weight: 800; color: var(--text-main); }
    .concl-ta { width: 100%; border: 1.5px solid var(--border-color); background: var(--bg-input); color: var(--text-main); border-radius: 12px; padding: 10px 12px; font-size: 13px; line-height: 1.55; resize: vertical; font-family: inherit; }
    .concl-ta:focus { outline: none; border-color: var(--accent-color); }
    .formula { margin-top: 8px; background: var(--bg-accent-alpha); border-radius: 12px; padding: 12px; text-align: center; font-size: 18px; font-weight: 800; color: var(--text-main); }
    .formula b { color: var(--accent-color); }
    .formula .lhint { font-size: 12px; font-weight: 600; margin-top: 4px; }
    .sw-target { font-size: 10.5px; font-weight: 800; color: var(--accent-color); text-align: center; }
    .spdot { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 5px; vertical-align: 0; }
    .sp-legend { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 11.5px; font-weight: 700; color: var(--text-muted); }
    .sp-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 4px; vertical-align: -1px; }
    .quiz { display: flex; flex-direction: column; gap: 10px; background: var(--bg-container); border: 1.5px solid var(--border-color); border-radius: 14px; padding: 12px; }
    .quiz .ef-h i { color: #F59E0B; }
    .qrow { display: flex; flex-direction: column; gap: 6px; }
    .qtext { font-size: 13px; font-weight: 700; color: var(--text-main); line-height: 1.6; }
    .qtext b { color: var(--text-muted); } .qtext b.ok { color: #10B981; } .qtext b.no { color: #E5484D; }
    .qfb { font-size: 11.5px; font-weight: 700; } .qfb.ok { color: #10B981; } .qfb.no { color: #D97706; }
    .hooke { background: var(--bg-accent-alpha); border-radius: 14px; padding: 14px; text-align: center; display: flex; flex-direction: column; gap: 6px; }
    .hooke-f { font-size: 26px; font-weight: 800; color: var(--accent-color); letter-spacing: 1px; }
    .kcalc { width: 78px; text-align: right; border: 1.5px solid var(--border-color); border-radius: 8px; background: var(--bg-input); color: var(--text-main); padding: 5px 7px; font-size: 13px; font-weight: 800; }
    .kcalc:focus { outline: none; border-color: var(--accent-color); }
    .okc { color: #10B981; font-size: 15px; } .noc { color: #E5484D; font-size: 15px; }
    .ef-ctrls { display: flex; flex-direction: column; gap: 6px; }
    .ef-field { display: flex; align-items: center; gap: 8px; font-size: 12.5px; font-weight: 700; color: var(--text-muted); flex-wrap: wrap; }
    .ef-field > span { min-width: 92px; color: var(--text-main); }
    .ef-field em { font-style: normal; font-size: 12px; }
    .ef-in { border: 1.5px solid var(--border-color); background: var(--bg-input); color: var(--text-main); border-radius: 10px; padding: 7px 9px; font-size: 13.5px; font-weight: 700; width: 96px; font-family: inherit; }
    .ef-in.wide { width: 100%; }
    .ef-in:focus { outline: none; border-color: var(--accent-color); }
    .exp-tools, .exp-plan { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
    .exp-plan > span { font-size: 11px; font-weight: 800; color: var(--text-muted); margin-right: 2px; }
    .exp-warn { font-size: 11.5px; font-weight: 700; color: #D97706; }
    /* 교사: 모둠 기록 요약 */
    .kchip { display: inline-flex; align-items: center; gap: 3px; font-size: 11.5px; font-weight: 800; padding: 3px 9px; border-radius: 10px; background: rgba(16,185,129,0.14); color: #10B981; }
    .kchip small { font-weight: 700; opacity: 0.8; }
    .kchip.bad { background: rgba(245,158,11,0.15); color: #D97706; }
    .sub-exp { margin-top: 8px; display: flex; flex-direction: column; gap: 4px; }
    .sub-exp-h { font-size: 12.5px; color: var(--text-main); }
    .sub-exp .rel { color: var(--accent-color); font-weight: 800; }
    /* 그래프 */
    .sub-toggle-container { display: flex; background-color: var(--bg-body); border-radius: 10px; padding: 3px; margin-bottom: 10px; border: 1px solid var(--border-color); }
    .sub-toggle-btn { flex: 1; text-align: center; background: none; border: none; color: var(--text-muted); font-size: 12.5px; font-weight: 700; padding: 8px 0; border-radius: 8px; cursor: pointer; transition: all 0.15s; }
    .sub-toggle-btn.active { background-color: var(--bg-card); color: var(--accent-color); box-shadow: 0 2px 5px rgba(0,0,0,0.06); }
    .ctrls { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; margin-bottom: 6px; }
    .sel { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700; color: var(--text-muted); min-width: 0; }
    .sel select { border: 1.5px solid var(--border-color); background: var(--bg-input); color: var(--text-main); border-radius: 10px; padding: 6px 8px; font-size: 12px; font-weight: 600; max-width: 100%; min-width: 0; }
    .chart-wrap { overflow-x: auto; }
    .chart-wrap svg { display: block; width: 100%; min-width: 300px; height: 280px; }
    html.stu .chart-wrap svg { height: 320px; }
    .chart-wrap .grid { stroke: var(--border-color); }
    .chart-wrap .axis { stroke: var(--text-muted); }
    .chart-wrap text { fill: var(--text-muted); font-size: 10.5px; font-variant-numeric: tabular-nums; }
    .chart-wrap .ttl { fill: var(--text-main); font-size: 11.5px; font-weight: 700; }
    .chart-wrap .pt { fill: var(--pt); stroke: var(--bg-card); stroke-width: 2; }
    .chart-wrap .fitline { stroke: var(--grav); stroke-width: 2; stroke-dasharray: 6 4; fill: none; }
    .fit { font-size: 12.5px; line-height: 1.55; color: var(--text-main); }
    .fit b { color: var(--accent-color); }
    .board .fit { font-size: 18px; }
    .board .chart-wrap text { font-size: 13px; }
    .board .chart-wrap .ttl { font-size: 15px; }
    @media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } }
    /* 🙋 질문 (학생·교사) */
    .s-ask { position: relative; display: inline-flex; align-items: center; gap: 6px; padding: 8px 13px; border-radius: 999px; border: none; background: var(--accent-color); color: #fff; font: inherit; font-size: 13px; font-weight: 800; cursor: pointer; white-space: nowrap; box-shadow: 0 4px 12px rgba(0,0,0,0.12); }
    .s-ask em { position: absolute; top: -6px; right: -6px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: #E5484D; color: #fff; font-style: normal; font-size: 11px; line-height: 18px; text-align: center; }
    .s-ask em[hidden] { display: none; }
    .q-h { font-size: 12.5px; font-weight: 800; color: var(--text-muted); margin: 16px 0 8px; }
    .q-item { border: 1px solid var(--border-color); border-radius: 12px; padding: 10px 12px; margin-bottom: 8px; background: var(--bg-card); }
    .q-text, .q-body { font-size: 13.5px; font-weight: 600; color: var(--text-main); line-height: 1.5; white-space: pre-wrap; word-break: break-word; }
    .q-meta { font-size: 11px; color: var(--text-muted); margin-top: 4px; }
    .q-ans { margin-top: 8px; padding: 8px 10px; border-radius: 10px; background: color-mix(in srgb, var(--accent-color) 12%, transparent); font-size: 13px; line-height: 1.5; color: var(--text-main); white-space: pre-wrap; word-break: break-word; }
    .q-ans b { color: var(--accent-color); margin-right: 4px; }
    .q-empty { font-size: 12.5px; color: var(--text-muted); text-align: center; padding: 14px 0; }
    .q-card { background: var(--bg-card); border: 1.5px solid var(--accent-color); border-radius: 14px; padding: 12px; margin-bottom: 10px; }
    .q-card.done { border-color: var(--border-color); }
    .q-top { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-muted); margin-bottom: 6px; }
    .q-top b { font-size: 13.5px; color: var(--text-main); }
    .q-top .icon-btn-plain { margin-left: auto; }
    .q-st { font-size: 10.5px; font-weight: 800; padding: 2px 8px; border-radius: 999px; background: var(--accent-color); color: #fff; }
    .q-st.ok { background: var(--border-color); color: var(--text-muted); }
    .q-reply textarea { width: 100%; margin-top: 8px; padding: 9px 10px; border-radius: 10px; border: 1px solid var(--border-color); background: var(--bg-input, var(--bg-body)); color: var(--text-main); font: inherit; font-size: 13px; resize: vertical; }
    .q-btns { display: flex; gap: 6px; justify-content: flex-end; margin-top: 6px; }
    .q-link { background: none; border: none; color: var(--text-muted); font: inherit; font-size: 11.5px; text-decoration: underline; cursor: pointer; }
    .q-dot { display: inline-block; min-width: 18px; padding: 0 5px; border-radius: 9px; background: #E5484D; color: #fff; font-size: 11px; line-height: 18px; }
    .q-dot.soft { background: var(--accent-color); }
    .sub-acts .sub-detail-toggle { margin-top: 0; }
    .sub-acts { margin-top: 6px; display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
    .sub-view-btn { display: inline-flex; align-items: center; gap: 5px; padding: 6px 10px; border-radius: 999px; border: 1px solid var(--accent-color); background: transparent; color: var(--accent-color); font: inherit; font-size: 11.5px; font-weight: 800; cursor: pointer; }
    /* 운동 그래프 */
    .motion-panel { border-top: 1px solid var(--border-color); padding: 8px 10px 10px; display: flex; flex-direction: column; gap: 6px; background: var(--bg-card); }
    .motion-panel[hidden] { display: none; }
    .mp-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; font-size: 13px; font-weight: 800; color: var(--text-main); }
    .mp-head i { color: var(--accent-color); }
    .mp-head small { font-size: 11px; color: var(--text-muted); font-weight: 700; }
    .motion-panel canvas { display: block; width: 100%; height: 198px; flex: 1; min-height: 0; border-radius: 12px; background: var(--bg-body); touch-action: pan-y pinch-zoom; }
    .mp-hint { font-size: 11.5px; color: var(--text-muted); line-height: 1.5; }
    .mp-hint b { color: var(--text-main); }
    :root { --vel: #2F80ED; }
    .fstep { display: inline-flex; gap: 6px; }
    .fstep[hidden] { display: none; }
    /* 학습 목표 · 활동지 */
    .steps-top { display: flex; align-items: center; gap: 6px; }
    .steps-top .sp { flex: 1; }
    .goal-btn { display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px; border-radius: 999px; border: 1.5px solid var(--accent-color); background: color-mix(in srgb, var(--accent-color) 10%, transparent); color: var(--accent-color); font: inherit; font-size: 12.5px; font-weight: 800; cursor: pointer; }
    .goal-modal { max-width: 520px; }
    .goal-q { font-size: 13px; line-height: 1.6; padding: 10px 12px; border-radius: 12px; background: var(--bg-body); margin-bottom: 12px; color: var(--text-main); }
    .goal-row { display: flex; gap: 10px; padding: 10px 6px; border-bottom: 1px solid var(--border-color); align-items: flex-start; }
    .goal-row:last-child { border-bottom: 0; }
    .goal-row b { font-size: 13.5px; color: var(--text-main); }
    .goal-row p { font-size: 13px; color: var(--text-muted); line-height: 1.55; margin-top: 2px; }
    .goal-row.cur { background: color-mix(in srgb, var(--accent-color) 9%, transparent); border-radius: 12px; }
    .goal-n { flex-shrink: 0; width: 24px; height: 24px; border-radius: 50%; background: var(--accent-color); color: #fff; font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; }
    .sheet-ui { display: none !important; }
    .sheet-chip { position: absolute; right: 10px; top: 10px; z-index: 6; align-items: center; gap: 6px; padding: 7px 14px; border-radius: 999px; border: 1.5px solid var(--accent-color); background: color-mix(in srgb, var(--bg-container) 92%, transparent); color: var(--accent-color); font: inherit; font-size: 13px; font-weight: 800; cursor: pointer; box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
    .sheet-chip.on { background: var(--accent-color); color: #fff; }
    html.stu .lab:not(.sheet-closed) .sheet-chip.sheet-ui { display: none !important; }   /* 활동지가 열려 있으면 '닫기'로 닫아요 */
    @media (min-width: 901px) {
      html.stu .lab.bar-dock { gap: 0; }
      html.stu .lab.bar-dock .lgrid .stage { position: relative; top: auto; }
      html.stu .lab.bar-dock .stage-bar { position: relative; z-index: 6; flex-wrap: nowrap; overflow-x: auto; background: var(--bg-card); border: 1.5px solid var(--border-color); border-radius: 0 0 18px 18px; padding: 10px 14px; }
      html.stu .lab.bar-dock .lgrid .stage, html.stu .lab.bar-dock .lgrid .steps { border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-bottom: none; }   /* 실험 화면·활동지 아래에 조작 막대가 바로 붙어요 */
      html.stu .lab.bar-dock .stage-bar .pbtn { flex-shrink: 0; }
    }
    @media (min-width: 901px) {
      html.stu .sheet-ui:not([hidden]) { display: inline-flex !important; }
      html.stu .lab.sheet-closed .lgrid { grid-template-columns: minmax(0, 1fr); }
      html.stu .lab.sheet-closed .steps { display: none; }
      html.stu .lab:not(.sheet-closed) .lgrid { grid-template-columns: minmax(0, 1.15fr) minmax(360px, 1fr); }
    }
    /* ✏️ 발표 도구 */
    .pres-cv { position: fixed; inset: 0; width: 100vw; height: 100vh; z-index: 8000; pointer-events: none; }   /* 창(모달)이 열려도 그 위에 쓸 수 있어요 */
    .pres-cv.draw { pointer-events: auto; touch-action: none; }
    html.pres-pointer, html.pres-pointer * { cursor: none !important; }
    .pres-bar { position: fixed; left: 8px; top: 50%; transform: translateY(-50%); z-index: 9001; display: flex; flex-direction: column; gap: 4px; padding: 6px; border-radius: 18px; background: var(--bg-container); border: 1.5px solid var(--border-color); box-shadow: 0 10px 28px rgba(0,0,0,0.16); }
    .pres-b { display: flex; flex-direction: column; align-items: center; gap: 2px; width: 52px; padding: 7px 0 5px; border-radius: 12px; border: none; background: transparent; color: var(--text-main); font: inherit; font-size: 10px; font-weight: 800; cursor: pointer; }
    .pres-b i { font-size: 16px; color: var(--accent-color); }
    .pres-b.on { background: var(--accent-color); color: #fff; }
    .pres-b.on i { color: #fff; }
    .pres-colors { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; padding: 4px 6px; }
    .pres-c { width: 18px; height: 18px; border-radius: 50%; border: 2px solid var(--bg-container); box-shadow: 0 0 0 1.5px var(--border-color); cursor: pointer; justify-self: center; }
    .pres-c.on { box-shadow: 0 0 0 2.5px var(--text-main); }
    .pres-bar.fold > :not(.pres-fold):not(.pres-grip) { display: none; }
    .pres-grip { display: flex; align-items: center; justify-content: center; height: 22px; margin: -2px 0 2px; border-radius: 10px; color: var(--text-muted); cursor: grab; touch-action: none; font-size: 13px; }
    .pres-grip:hover { background: var(--bg-body); }
    .pres-bar.drag { opacity: .85; } .pres-bar.drag .pres-grip { cursor: grabbing; }
    .pres-fold { padding: 4px 0; }
    @media (min-width: 901px) { html.stu body:has(.pres-bar) .s-wrap { padding-left: 76px; } }
    /* 운동 그래프 팝업 */
    .mp-float { width: 460px; height: 300px; left: 10px; bottom: 10px; right: auto; resize: both; overflow: hidden; min-width: 280px; min-height: 190px; max-width: calc(100% - 8px); max-height: calc(100% - 8px); gap: 6px; }
    .mp-float .sw-grip small { font-size: 10.5px; font-weight: 700; color: var(--text-muted); }
    .mp-rows .pbtn { padding: 4px 9px; font-size: 11.5px; }
    .mp-float canvas { display: block; width: 100%; height: auto !important; flex: 1; min-height: 0; border-radius: 12px; background: var(--bg-body); touch-action: pan-y pinch-zoom; }
    .mp-float .mp-hint { font-size: 10.5px; line-height: 1.4; }
    /* 발표 도구: 도구 막대 위에서는 포인터 대신 보통 커서 */
    html.pres-pointer .pres-bar, html.pres-pointer .pres-bar * { cursor: pointer !important; }
    .pres-cv.draw { touch-action: pinch-zoom; }
    /* 앱 안 전체화면(iframe)에서는 오른쪽 위 닫기 버튼 자리를 비워요 */
    .pres-tip { position: fixed; z-index: 9002; transform: translateX(-50%); padding: 4px 10px; border-radius: 999px; background: #2F80ED; color: #fff; font-size: 12px; font-weight: 800; pointer-events: none; box-shadow: 0 4px 12px rgba(0,0,0,0.18); }
    .pres-tip[hidden] { display: none; }
    .pres-snap:not(.on) i { color: var(--text-muted); }
    .pres-snap.on { background: transparent; color: var(--text-main); }
    .pres-snap.on i { color: #2F80ED; }
    /* 질문 분류 · 평가 */
    .qb-tabs { display: flex; gap: 6px; margin-bottom: 10px; flex-wrap: wrap; }
    .qb-tab { padding: 7px 12px; border-radius: 999px; border: 1.5px solid var(--border-color); background: var(--bg-card); color: var(--text-muted); font: inherit; font-size: 12.5px; font-weight: 800; cursor: pointer; }
    .qb-tab b { color: var(--text-main); margin-left: 2px; }
    .qb-tab.on { background: var(--accent-color); border-color: var(--accent-color); color: #fff; }
    .qb-tab.on b { color: #fff; }
    .grade-modal { max-width: 520px; }
    .gr-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; font-size: 13px; color: var(--text-muted); font-weight: 700; }
    .gr-top b { font-size: 22px; color: var(--accent-color); }
    .gr-row { padding: 10px 0; border-bottom: 1px solid var(--border-color); display: flex; flex-direction: column; gap: 6px; }
    .gr-h b { font-size: 13.5px; color: var(--text-main); display: block; }
    .gr-h span { font-size: 11.5px; color: var(--text-muted); }
    .gr-ev { display: flex; flex-wrap: wrap; gap: 4px; }
    .gr-ev span { font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 999px; background: var(--bg-body); color: var(--text-muted); border: 1px solid var(--border-color); }
    .gr-lv { display: flex; gap: 6px; align-items: center; }
    .gr-lv em { font-style: normal; font-size: 11.5px; color: var(--accent-color); font-weight: 700; margin-left: 4px; }
    .grade-modal .concl-ta { margin-top: 10px; width: 100%; }
    .g-badge { display: inline-flex; align-items: center; gap: 4px; padding: 3px 9px; border-radius: 999px; font-size: 11.5px; font-weight: 800; background: color-mix(in srgb, var(--accent-color) 14%, transparent); color: var(--accent-color); border: none; cursor: pointer; }
    .g-badge.none { background: var(--bg-body); color: var(--text-muted); border: 1px dashed var(--border-color); }
    .sub-list-item { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border: 1px solid var(--border-color); border-radius: 12px; margin-bottom: 8px; background: var(--bg-card); }
    .sub-list-item .t { flex: 1; min-width: 0; }
    .sub-list-item .t b { font-size: 14px; color: var(--text-main); }
    .sub-list-item .t span { display: block; font-size: 11.5px; color: var(--text-muted); }
    /* 반 전체 분석: 모둠별 색 이름표 */
    .who-legend { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 4px 0 6px; }
    .who-legend:empty { display: none; }
    .who-chip { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border-radius: 999px; border: 1.5px solid var(--border-color); background: var(--bg-card); color: var(--text-main); font: inherit; font-size: 12px; font-weight: 800; cursor: pointer; }
    .who-chip i { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }
    .who-chip small { color: var(--text-muted); font-weight: 700; }
    .who-chip.on { border-color: var(--text-main); box-shadow: 0 0 0 1px var(--text-main); }
    .who-chip.off { opacity: .45; }
    .who-tip { font-size: 11px; color: var(--text-muted); }
    .board .who-chip { font-size: 15px; padding: 6px 14px; }
    .board .who-chip i { width: 13px; height: 13px; }
    .pres-ptr { position: fixed; inset: 0; width: 100vw; height: 100vh; z-index: 9000; pointer-events: none; }
    /* 꾹 눌러도 글자 선택·복사 메뉴가 뜨지 않게 (입력칸은 그대로) */
    .lab, .pres-bar, .sw-float, .set-pop { -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
    .lab input, .lab textarea, .lab [contenteditable] { -webkit-user-select: text; user-select: text; -webkit-touch-callout: default; }
    .lab button, .pres-bar button, .cond-chip, .ck { touch-action: manipulation; -webkit-tap-highlight-color: transparent; }
    .pres-finger.on { background: transparent; color: var(--text-main); box-shadow: inset 0 0 0 2px var(--accent-color); }
    /* ✍️ 쓰기 칸: 테마(크림색) 카드 */
    .write-box { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; padding: 12px 14px; border-radius: 14px; border: 1.5px solid color-mix(in srgb, var(--accent-color) 35%, var(--border-color)); background: var(--bg-body); }
    .write-box .ef-h { color: var(--accent-color); font-size: 13px; }
    .write-box .ef-h i { color: var(--accent-color); }
    .write-box .concl-ta { background: var(--bg-card); }
    .write-box .concl-ta:focus { border-color: var(--accent-color); }
    .write-q { display: flex; flex-direction: column; gap: 6px; font-size: 13px; font-weight: 700; color: var(--text-main); line-height: 1.5; }
    .write-q textarea { width: 100%; }
    .sw-float.free { position: fixed; z-index: 120; }   /* 끌어서 옮긴 창은 화면 어디든 */
    html.stu .lgrid .stage { z-index: 5; }   /* 옮긴 도구 창이 활동지 위에 보이게 */
    .stage { position: relative; }
    @media (min-width: 901px) { html.stu .lgrid .stage { position: sticky; } }
    .ck.press { transform: scale(0.92); filter: brightness(0.92); }
    .nowrap { white-space: nowrap; }
    /* ② 용수철 고르기 · ③ 변인 고르기 */
    .kpick-row { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; }
    .kpick-row .kp-h, .var-pick .kp-h { grid-column: 1 / -1; font-size: 12.5px; font-weight: 800; color: var(--text-muted); }
    .ptable tr.chosen td { background: color-mix(in srgb, var(--accent-color) 10%, transparent); }
    .k-chosen { font-size: 11.5px; font-weight: 800; color: var(--accent-color); }
    .var-pick { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
    .vp { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 10px 4px; border-radius: 14px; border: 1.5px solid var(--border-color); background: var(--bg-card); color: var(--text-main); font: inherit; cursor: pointer; }
    .vp b { font-size: 13px; } .vp span { font-size: 11px; color: var(--text-muted); font-weight: 700; }
    .vp { position: relative; border: 1.5px dashed var(--border-color); background: var(--bg-container); color: var(--text-muted); }
    .vp b { color: var(--text-muted); }
    .vp.going { border-style: solid; }
    .vp.done { border: 1.5px solid var(--accent-color); }
    .vp.done b { color: var(--accent-color); }
    .vp.on { box-shadow: 0 0 0 2px var(--bg-accent-alpha); background: var(--bg-accent-alpha); }
    .vp-ok { position: absolute; top: -7px; right: -7px; width: 20px; height: 20px; border-radius: 50%; background: var(--accent-color); color: #fff; font-size: 11px; font-weight: 900; display: flex; align-items: center; justify-content: center; font-style: normal; box-shadow: 0 0 0 2px var(--bg-card); }
    .var-pick .kp-h small { font-weight: 700; color: var(--text-muted); opacity: .8; margin-left: 4px; }
    /* 🧮 주기 공식 만들기 */
    .fb { display: flex; flex-direction: column; gap: 8px; }
    .fb-eq { align-self: center; display: flex; align-items: center; gap: 8px; font-size: 20px; font-weight: 800; padding: 10px 18px; border-radius: 14px; background: var(--bg-body); border: 1.5px solid var(--border-color); font-family: "Times New Roman", serif; }
    .fb-eq b { color: var(--accent-color); }
    .fb-frac { display: inline-flex; flex-direction: column; align-items: center; line-height: 1.15; }
    .fb-frac span:first-child { border-bottom: 2px solid currentColor; padding: 0 6px 2px; }
    .fb-frac span:last-child { padding: 2px 6px 0; }
    .fb-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
    .fb-v { min-width: 104px; font-size: 12.5px; font-weight: 800; color: var(--text-main); }
    .ptable th.mv, .ptable td.mv { background: color-mix(in srgb, var(--accent-color) 12%, transparent); font-weight: 800; }
    .ptable td.diff { background: rgba(229,72,77,0.16); color: #D93036; font-weight: 800; }
    .exp-h b { flex: 1; }
    .ptable.ktable { min-width: 0; }
    .ktable th, .ktable td { padding-left: 4px; padding-right: 4px; }
    .ktable td:last-child { padding-right: 8px; }
    .ktable .pbtn.sm { padding: 5px 10px; }
    .ktable td { white-space: nowrap; }
    .ptable td input.kin-wide { width: 74px; min-width: 74px; text-align: center; font-size: 13px; }
    .k-chosen { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; border-radius: 999px; background: color-mix(in srgb, var(--accent-color) 14%, transparent); }
    .t-graph { margin-top: 14px; padding-top: 12px; border-top: 1.5px dashed var(--border-color); display: flex; flex-direction: column; gap: 6px; }
    .t-graph[hidden] { display: none; }
    html.stu .lab:not(.sheet-closed) .sheet-chip { display: none !important; }   /* 활동지를 열면 버튼은 숨기고, 활동지의 '닫기'로 닫아요 */
    .copy-row { margin-top: -2px; align-items: center; gap: 8px; }
    .kcell { position: relative; }
    .kcard .read-cond { display: none; }
    .kcard .read-row { margin: 0; }
    .step-tab { position: relative; }
    .step-tab.done::after { content: "✓"; position: absolute; top: -7px; right: -7px; width: 20px; height: 20px; border-radius: 50%; background: var(--accent-color); color: #fff; font-size: 11px; font-weight: 900; display: flex; align-items: center; justify-content: center; box-shadow: 0 0 0 2px var(--bg-card); }
    html.stu, html.stu body { overscroll-behavior-y: none; }   /* 화면을 쓸어내려도 새로고침되지 않아요 (실험 중 기록이 날아가지 않게) */
    .grp-row { flex-wrap: nowrap; overflow-x: auto; overscroll-behavior-x: contain; padding-bottom: 4px; scrollbar-width: thin; -webkit-overflow-scrolling: touch; }   /* 제출한 모둠이 많으면 한 줄로, 좌우로 밀어서 봐요 */
    .grp-row .pbtn { flex-shrink: 0; white-space: nowrap; }
    .grp-dot { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 5px; vertical-align: 1px; }
