:root{--green:#174d3b;--green2:#21684f;--green3:#2f7b60;--soft:#eef5f1;--soft2:#f7faf8;--line:#dfe8e3;--text:#26362f;--muted:#748078;--danger:#b33a3a;--danger-soft:#fff2f2;--warning:#8a6400;--warning-soft:#fff8df;--shadow:0 10px 28px rgba(23,77,59,.07)}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Arial,"Noto Sans KR",sans-serif;color:var(--text)}body{background:radial-gradient(circle at top right,rgba(33,104,79,.09),transparent 30%),linear-gradient(180deg,#eef5f1,#f8faf9 42%,#fff);font-size:14px;line-height:1.5}button,input,select,textarea{font:inherit}button,a,input,select,textarea{ -webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button{cursor:pointer;border:1px solid var(--line);border-radius:11px;background:#fff;color:var(--green);padding:10px 14px;font-weight:800;min-height:42px;transition:background .15s,box-shadow .15s}button:hover:not(:disabled){background:var(--soft);border-color:#accaba}button:disabled{opacity:.45;cursor:not-allowed}button.primary{color:#fff;background:linear-gradient(135deg,var(--green),#10392b);border-color:transparent;box-shadow:0 5px 14px #174d3b15}button.primary:hover:not(:disabled){background:var(--green2)}button.danger{background:var(--danger-soft);color:var(--danger);border-color:#efd1d1}button.tiny{min-height:32px;padding:5px 9px;font-size:12px}.text-button{border:0;background:transparent;padding:4px;min-height:28px;font-size:12px}.icon-button{padding:4px 13px;font-size:24px}input,select,textarea{color:var(--text);background:white;border:1px solid #d8e5de;border-radius:10px;padding:10px 11px;max-width:100%;min-width:0}input:not([type=checkbox]):not([type=radio]),select{min-height:42px}input[type=checkbox]{width:17px;height:17px;accent-color:var(--green)}input:focus,textarea:focus,select:focus,button:focus-visible,a:focus-visible{outline:2px solid var(--green3);outline-offset:2px}label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--muted);font-weight:700}.checklabel{display:inline-flex;align-items:center;flex-direction:row;gap:7px;color:var(--text);font-size:13px}textarea{resize:vertical;line-height:1.5}h1,h2,h3,p{margin:0}h2{font-size:19px;color:var(--green)}h3{font-size:15px;color:var(--green)}small,.muted{color:var(--muted)}small{font-size:12px}.app-shell{max-width:1540px;margin:0 auto;padding:max(18px,env(safe-area-inset-top)) 22px max(32px,env(safe-area-inset-bottom))}.page-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.brand{display:flex;gap:10px;align-items:baseline}.brand strong{font-size:20px;letter-spacing:.08em;color:var(--green)}.brand span{font-size:11px;color:var(--muted);font-weight:800;letter-spacing:.07em}.head-actions,.actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.home-btn{display:inline-flex;align-items:center;min-height:38px;padding:8px 15px;background:#fff;border:1px solid var(--line);color:var(--green);border-radius:999px;text-decoration:none;font-weight:800;font-size:12px}.chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;background:var(--soft);color:var(--green);border:1px solid var(--line);border-radius:99px;font-size:11px;font-weight:800}.chip.amber{color:var(--warning);background:var(--warning-soft);border-color:#eee0a6}.chip.red{color:var(--danger);background:var(--danger-soft);border-color:#efd1d1}.hero{display:flex;justify-content:space-between;gap:20px;padding:23px 26px;margin-bottom:18px;background:linear-gradient(135deg,var(--green),var(--green2));color:#fff;border-radius:20px;box-shadow:0 10px 26px #174d3b25}.eyebrow{font-size:10px;letter-spacing:.12em;color:#ffffffb8;font-weight:800;margin-bottom:8px}.hero h1{font-size:30px;line-height:1.2}.hero p{font-size:13px;color:#ffffffc9;margin-top:9px}.hero-aside{border-left:1px solid #ffffff33;padding:5px 0 5px 25px;display:flex;flex-direction:column;justify-content:center;gap:4px;min-width:220px}.hero-aside span,.hero-aside small{color:#ffffffb8;font-size:11px}.hero-aside strong{font-size:20px}.tabs{display:flex;gap:7px;margin-bottom:18px;overflow:auto}.tabs button{border-radius:12px;white-space:nowrap;flex:1}.tabs button.active{color:#fff;background:var(--green);border-color:var(--green)}.notice{background:var(--warning-soft);color:#745719;border:1px solid #eee0a6;padding:13px 16px;border-radius:12px;margin-bottom:14px;font-size:13px;white-space:pre-line}.notice.error{background:var(--danger-soft);color:var(--danger);border-color:#efd1d1}.panel{padding:19px;background:#ffffffed;border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);margin-bottom:16px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.panel-head p{color:var(--muted);font-size:12px;margin-top:4px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.metric{padding:15px;background:white;border:1px solid var(--line);border-radius:14px}.metric strong{display:block;font-size:25px;line-height:1.25;color:var(--green);margin:5px 0}.metric span{font-size:11px;color:var(--muted);font-weight:700}.formgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}.full{grid-column:1/-1}.spaced{margin-top:14px}.subpanel{background:var(--soft2);padding:13px;border:1px solid var(--line);border-radius:12px}.teacher-picks{display:flex;flex-wrap:wrap;gap:8px}.teacher-pick{padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:white;display:flex;flex-direction:row;align-items:center;gap:7px;color:var(--green)}.profile-option{padding:12px;background:white;border:1px solid var(--line);border-radius:12px;display:block;cursor:pointer}.profile-option strong{font-size:14px;color:var(--green)}.profile-option p{font-size:11px;color:var(--muted);margin-top:6px}.profile-option:has(input:checked){border-color:#71a28b;background:var(--soft2)}.toolbar{display:flex;align-items:end;gap:10px;flex-wrap:wrap}.toolbar label{min-width:140px}.toolbar .grow{flex:1}.kpi-row{margin-bottom:16px}.empty{padding:30px 15px;text-align:center;color:var(--muted);border:1px dashed #cddcd4;border-radius:13px;background:var(--soft2)}.empty h3{font-size:18px;margin-bottom:8px}.empty .actions{justify-content:center;margin-top:17px}.table-scroll{overflow:auto;max-width:100%;border:1px solid var(--line);border-radius:12px}table{border-collapse:collapse;width:100%;font-size:12px;text-align:left}th{padding:10px 12px;white-space:nowrap;color:var(--green);background:var(--soft2);font-size:11px;font-weight:800}td{padding:11px 12px;border-top:1px solid var(--line);vertical-align:top}td strong{color:var(--green)}td small{display:block}tr:hover td{background:#f7faf850}.table-scroll input,.table-scroll select{min-width:100px;padding:7px;font-size:12px}.table-scroll input[type=checkbox]{min-width:17px}.bad-row td{background:#fff9ef}.nowrap{white-space:nowrap}.comparison td:first-child,.comparison th:first-child{position:sticky;left:0;background:var(--soft2);z-index:1}.candidate-row{display:flex;gap:10px;overflow:auto;margin:12px 0}.candidate-tile{min-width:215px;max-width:275px;flex:1;border:1px solid var(--line);border-radius:13px;padding:13px;background:#fff}.candidate-tile.active{border:2px solid var(--green);padding:12px;background:var(--soft2)}.candidate-tile h3{font-size:13px;margin:6px 0}.candidate-tile p{color:var(--muted);font-size:11px;line-height:1.5}.candidate-tile .tiny{margin-top:9px}.reason{padding:12px 15px;background:var(--soft2);border-left:3px solid var(--green2);border-radius:0 10px 10px 0;margin-bottom:13px}.reason p{font-size:12px;margin:3px 0}.reason small{display:block;margin-top:7px}.board-scroll{overflow:auto;max-height:780px;border:1px solid var(--line);border-radius:12px;background:#fff}.board{display:flex;min-width:max-content;position:relative}.time-ruler{width:64px;flex:0 0 64px;background:var(--soft2);position:sticky;left:0;z-index:4}.ruler-top{height:60px;display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--line);font-size:11px;font-weight:800;color:var(--green)}.ruler-body{position:relative}.time-label{position:absolute;left:7px;font-size:10px;color:var(--muted);transform:translateY(-5px)}.daygroup{border-right:5px solid #e2ece6}.day-label{height:28px;display:flex;justify-content:center;align-items:center;font-size:11px;font-weight:800;background:#e5f0e9;border-bottom:1px solid #cddfd3;color:var(--green)}.lanes{display:flex}.lane-wrap{width:120px}.teacher-label{height:32px;display:flex;align-items:center;justify-content:center;border-right:1px solid var(--line);font-size:11px;font-weight:800;color:var(--green);background:var(--soft2);overflow:hidden;white-space:nowrap}.lane{position:relative;width:120px;border-right:1px solid var(--line);background:repeating-linear-gradient(to bottom,#fff 0,#fff 39.5px,#e7ede9 40px,#fff 40.5px);overflow:hidden}.availability{position:absolute;left:0;right:0;background:#eff6f1a8;pointer-events:none}.unavailable{position:absolute;inset:0;background:repeating-linear-gradient(135deg,#f1f3f2 0,#f1f3f2 5px,#eaeeeb 5px,#eaeeeb 6px);pointer-events:none}.lesson{position:absolute;left:3px;right:3px;min-height:12px;padding:4px 5px;border:1px solid #a8cebb;border-left:3px solid var(--green2);border-radius:6px;line-height:1.25;text-align:left;overflow:hidden;background:#e6f2ea;color:var(--green);box-shadow:none;font-size:10px;cursor:grab}.lesson:hover{z-index:5;box-shadow:0 4px 9px #174d3b22}.lesson strong{display:block;font-size:11px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lesson small{display:block;font-size:9px;color:#456556}.lesson.changed{border-color:#c8a855;background:#fff7dd;border-left-color:#a87916}.lesson.conflict{border-color:var(--danger);background:var(--danger-soft);border-left-color:var(--danger)}.timeblock{position:absolute;left:0;right:0;border-top:1px dashed #b7bdb9;background:#dce2deb8;font-size:9px;padding:1px 3px;pointer-events:none;z-index:2;overflow:hidden}.timeblock.optional{background:#eee8d188;border-color:#cfb97a}.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:11px;color:var(--muted);margin-top:10px}.legend i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;background:#b9d7c4}.legend i.amber{background:#dfc17b}.legend i.gray{background:#c8d0cb}.errors{border-radius:12px;background:var(--danger-soft);border:1px solid #efd1d1;padding:12px 15px;color:var(--danger);font-size:12px;margin:12px 0;max-height:180px;overflow:auto}.errors p{margin:4px 0}.pastebox{min-height:170px;width:100%;background:var(--soft2);border:2px dashed #b7cfc0;padding:17px;font-family:monospace;font-size:13px;line-height:1.55}.section-note{font-size:12px;color:var(--muted);margin:10px 0}.import-preview{max-height:490px;overflow:auto}.import-preview th{position:sticky;top:0;z-index:1}.import-preview input[type=text]{width:140px}.import-preview input[type=time]{width:115px}.status-line{color:var(--muted);font-size:12px;margin-top:8px;white-space:pre-line}.helptext{color:var(--muted);font-size:12px;line-height:1.7}.helptext strong{color:var(--green)}.inline{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.daychecks{display:flex;gap:12px;flex-wrap:wrap}.divider{height:1px;background:var(--line);margin:18px 0}dialog{width:min(760px,95vw);max-height:90vh;border:1px solid var(--line);border-radius:20px;padding:20px;color:var(--text);box-shadow:0 25px 70px #102c2044}dialog::backdrop{background:#19372b66;backdrop-filter:blur(3px)}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:17px}.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}.modal-error{white-space:pre-line;margin-top:12px;font-size:12px;color:var(--danger)}dialog pre{white-space:pre-wrap;font-size:12px}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:200;max-width:90vw;padding:12px 22px;border-radius:13px;background:var(--green);color:white;box-shadow:var(--shadow);font-size:13px;white-space:pre-line}footer{font-size:11px;color:var(--muted);text-align:center;padding:14px}.hidden{display:none!important}.loading{animation:pulse 1.1s infinite}@keyframes pulse{50%{opacity:.55}}.w80{width:80px}.select-multiple{width:100%;min-height:110px}.busy-controls{pointer-events:none;opacity:.6}
@media(max-width:900px){.grid2{grid-template-columns:1fr}.grid4{grid-template-columns:repeat(2,1fr)}.hero-aside{min-width:190px}.app-shell{padding-left:12px;padding-right:12px}.brand span{display:none}}
@media(max-width:560px){body{font-size:13px}.app-shell{padding:12px 8px 25px}.hero{padding:17px 15px;border-radius:17px}.hero h1{font-size:25px}.hero-aside{display:none}.hero p{font-size:12px}.panel{padding:12px;border-radius:16px}.tabs{gap:5px}.tabs button{font-size:11px;padding:9px 10px;flex:none}.panel-head{align-items:flex-start;gap:10px}.panel-head .actions{justify-content:flex-end}.panel-head h2{font-size:17px}.toolbar label{min-width:120px;flex:1}.metric{padding:12px}.metric strong{font-size:21px}.formgrid{grid-template-columns:1fr}.grid3{grid-template-columns:1fr}.profile-option p{font-size:10px}.hero h1{font-size:24px}.teacher-pick{padding:6px 8px}.comparison td{min-width:120px}.head-actions .chip{font-size:10px}.brand strong{font-size:18px}.section-head{gap:9px}.lane-wrap,.lane{width:118px}.time-ruler{width:50px;flex-basis:50px}dialog{padding:15px}.pastebox{font-size:12px}.modal-actions{flex-wrap:wrap}.modal-actions button{flex:1}.candidate-tile{min-width:205px}}
@media print{body{background:white}.tabs,.head-actions,.no-print,.toolbar,.candidate-row,footer{display:none!important}.app-shell{max-width:none;padding:0}.hero{box-shadow:none}.board-scroll{overflow:visible;max-height:none}.panel{box-shadow:none;break-inside:avoid}.board{zoom:.55}.lesson{-webkit-print-color-adjust:exact;print-color-adjust:exact}.time-ruler{position:static}}
