:root{--bg: #f5f6f8;--surface: #ffffff;--border: #e3e6ea;--text: #1f2733;--text-muted: #6b7480;--accent: #2f6df6;--accent-soft: #eaf1ff;--shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 1px 3px rgba(16, 24, 40, .06);--radius: 10px;--brand: #db3512;--brand-border: #c22f10;--brand-soft: #fbe7e1;--sidebar-text: rgba(255, 255, 255, .82);--sidebar-text-strong: #ffffff;--sidebar-hover: rgba(255, 255, 255, .14);--sidebar-active-bg: rgba(255, 255, 255, .18);--sidebar-w: 196px;--sidebar-w-collapsed: 60px;--danger: #b3123a;--danger-soft: #fbe3e8}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Noto Sans KR,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Apple SD Gothic Neo,Malgun Gothic,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5}.app{display:flex;height:100%;overflow:hidden}.sidebar{width:var(--sidebar-w);flex-shrink:0;background:var(--brand);border-right:1px solid var(--brand-border);padding:16px 14px;display:flex;flex-direction:column;gap:20px;transition:width .18s ease,padding .18s ease}.sidebar__brand{display:flex;align-items:center;gap:9px;padding:0 6px;min-height:32px}.sidebar__lockup{display:flex;align-items:flex-end;gap:9px}.sidebar__logo{height:19px;width:auto;max-width:100%;flex-shrink:0;display:block;transition:height .18s ease}.sidebar__brand-text{font-size:17px;font-weight:600;letter-spacing:.06em;line-height:1;white-space:nowrap;overflow:hidden;color:var(--sidebar-text-strong);position:relative;top:1px}.sidebar__brand-spacer{flex:1}.sidebar__toggle{margin-left:auto;width:28px;height:28px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.3);border-radius:8px;background:transparent;color:var(--sidebar-text);cursor:pointer;padding:0;transition:background .12s ease,color .12s ease}.sidebar__toggle:hover{background:var(--sidebar-hover);color:var(--sidebar-text-strong)}.sidebar__toggle svg{width:16px;height:16px}.sidebar__nav{display:flex;flex-direction:column;gap:4px}.sidebar__link{display:flex;align-items:center;gap:12px;padding:9px 12px;border-radius:8px;color:var(--sidebar-text);text-decoration:none;font-weight:500;white-space:nowrap;overflow:hidden}.sidebar__link:hover{background:var(--sidebar-hover);color:var(--sidebar-text-strong)}.sidebar__link--active{background:var(--sidebar-active-bg);color:var(--sidebar-text-strong)}.sidebar__link-icon{flex-shrink:0;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.sidebar__link-icon svg{width:18px;height:18px}.app.is-collapsed .sidebar{width:var(--sidebar-w-collapsed);padding:16px 8px}.app.is-collapsed .sidebar__brand-text,.app.is-collapsed .sidebar__brand-spacer,.app.is-collapsed .sidebar__link-label{display:none}.app.is-collapsed .sidebar__logo{height:14px}.app.is-collapsed .sidebar__brand{flex-direction:column;gap:10px;padding:0;align-items:center}.app.is-collapsed .sidebar__toggle{margin-left:0}.app.is-collapsed .sidebar__link{justify-content:center;padding:9px 0}.content{flex:1;padding:28px 32px;overflow:auto}.page-title{margin:0 0 4px;font-size:22px;font-weight:700}.page-subtitle{margin:0 0 24px;color:var(--text-muted)}.section{margin-bottom:28px}.section__title{margin:0 0 12px;font-size:15px;font-weight:600}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.source-meta{display:flex;flex-wrap:wrap;gap:8px 28px;margin:0 0 14px;padding:12px 16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.source-meta>div{display:flex;flex-direction:column;gap:2px}.source-meta dt{font-size:12px;color:var(--text-muted);font-weight:500}.source-meta dd{margin:0;font-weight:600}.source-meta a{color:var(--accent);text-decoration:none}.source-meta a:hover{text-decoration:underline}.table-meta{margin:0;padding:10px 16px;color:var(--text-muted);font-size:13px;border-bottom:1px solid var(--border)}.error{color:var(--danger);margin:0 0 14px}.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px}.kpi{padding:18px 18px 16px}.kpi__label{color:var(--text-muted);font-size:13px;margin-bottom:8px}.kpi__value{font-size:28px;font-weight:700;letter-spacing:-.02em}.kpi-sections{display:flex;flex-wrap:wrap;gap:14px;align-items:stretch}.kpi-card{padding:12px 14px}.kpi-table{width:auto;border-collapse:collapse;font-size:13px}.kpi-table th,.kpi-table td{padding:4px 12px;border:none;text-align:center;white-space:nowrap}.kpi-table thead th{background:transparent;color:var(--text-muted);font-weight:600;vertical-align:bottom}.kpi-table tbody tr:nth-child(2n),.kpi-table tbody tr:hover{background:transparent}.kpi-table thead th.kpi-table__corner{text-align:left;font-size:15px;font-weight:600;color:var(--text);vertical-align:bottom}.kpi-table th[scope=row]{text-align:left;color:var(--text-muted);font-weight:500}.kpi-table__value{font-size:20px;font-weight:700;letter-spacing:-.02em}.kpi-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}.kpi-stat{padding:16px 18px}.kpi-stat__label{color:var(--text-muted);font-size:13px;font-weight:600;margin-bottom:8px}.kpi-stat__value{font-size:26px;font-weight:700;letter-spacing:-.02em}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:13px}thead th{text-align:left;padding:11px 14px;background:var(--brand-soft);border-bottom:1px solid var(--brand-border);color:var(--brand);font-weight:600;white-space:nowrap}tbody td{padding:11px 14px;border-bottom:1px solid var(--border);white-space:nowrap}tbody tr:last-child td{border-bottom:none}tbody tr:nth-child(2n){background:#fafbfc}tbody tr:nth-child(2n) .sticky-col{background:#fafbfc}tbody tr:hover,tbody tr:hover .sticky-col{background:#e8edf3}.sticky-col{position:sticky;z-index:1;background:#fff}thead th.sticky-col{background:var(--brand-soft);z-index:2}.sticky-col--last:after{content:"";position:absolute;top:0;right:0;bottom:0;width:1px;background:var(--border);box-shadow:2px 0 4px -1px #00000014;pointer-events:none}.placeholder-cell{color:#c5cad1}.table-empty-hint{text-align:center;color:var(--text-muted);padding:28px 0}.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 0 8px 8px}.toolbar--stack{flex-direction:column;align-items:stretch}.toolbar__row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.toolbar__search-wrap{position:relative;display:inline-flex;align-items:center}.toolbar__search-icon{position:absolute;left:11px;width:16px;height:16px;color:var(--text-muted);pointer-events:none}.toolbar__search{font:inherit;height:38px;padding:0 10px 0 32px;min-width:150px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:border-color .12s,box-shadow .12s}.toolbar__search:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.toolbar__search::-webkit-search-cancel-button{-webkit-appearance:none}.toolbar__select{font:inherit;height:38px;padding:0 28px 0 10px;min-width:130px;border:1px solid var(--border);border-radius:8px;background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236b7480' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") no-repeat right 11px center;color:var(--text);-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:border-color .12s,box-shadow .12s}.toolbar__select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.btn.toolbar__reset{display:inline-flex;align-items:center;justify-content:center;padding:0;width:38px;height:38px}.toolbar__reset svg{width:16px;height:16px}.claim-cell{display:flex;flex-direction:column;gap:6px;min-width:180px}.claim-cell__chips{display:flex;flex-wrap:wrap;gap:4px}.claim-cell__picker{display:flex;gap:4px}.claim-cell__picker .input-cell{min-width:0}.chip{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border:1px solid var(--border);border-radius:999px;background:var(--surface);cursor:pointer;font:inherit}.chip:hover{background:var(--bg)}.chip__type{font-size:11px;color:var(--text-muted)}.room-input{display:flex;flex-direction:column;gap:3px;min-width:110px}.room-input .input-cell{min-width:0;width:100%}.chip__x{font-size:11px;color:var(--text-muted)}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;background:var(--bg);color:var(--text-muted);border:1px solid var(--border)}.badge--blue{background:var(--accent-soft);color:var(--accent);border-color:transparent}.badge--green{background:#fafdfb;color:#46a771;border-color:transparent}.badge--amber{background:#fff4e2;color:#c47d12;border-color:transparent}.badge--red{background:#fef8fa;color:#d65a74;border-color:transparent}.col-2{display:grid;grid-template-columns:1fr 1fr;gap:20px}@media (max-width: 1000px){.col-2{grid-template-columns:1fr}}.field{display:inline-flex;align-items:center;gap:8px;margin-bottom:14px}label{color:var(--text-muted);font-weight:500}select,input[type=text]{font:inherit;padding:7px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);min-width:200px}select:focus,input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.input-cell{padding:5px 8px;min-width:120px}.input-cell--yes{background:#fafdfb;color:#46a771}.input-cell--no{background:#fef8fa;color:#d65a74}.btn{font:inherit;font-weight:600;padding:9px 18px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);cursor:pointer}.btn:hover{background:var(--bg)}.btn--primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn--primary:hover{background:#245fe0}.btn:disabled{opacity:.6;cursor:default}.btn--sm{padding:7px 14px;font-size:13px}.sync-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:116px;flex-shrink:0}.spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.setting-row{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:18px 20px}.setting-label{color:var(--text-muted);font-size:13px;margin-bottom:4px}.setting-value{font-size:16px;font-weight:600}.setting-hint{color:var(--text-muted);font-size:13px;margin:0 0 12px}.page-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.page-header .page-title{margin:0}.page-semester{display:flex;align-items:center;gap:8px}.page-semester__label{font-size:13px;font-weight:600}.page-semester__select{min-width:0;width:auto}.user-card{max-width:460px;padding:14px}.user-chips{display:flex;flex-wrap:wrap;gap:8px;margin:0}.user-chips__empty{color:var(--text-muted);padding:8px 0}.chip{display:inline-flex;align-items:center;gap:6px;padding:5px 6px 5px 12px;border:1px solid var(--border);border-radius:999px;background:var(--bg);font-weight:600;font-size:13px}.chip__del{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:none;border-radius:50%;background:transparent;color:var(--text-muted);cursor:pointer;font-size:11px}.chip__del:hover{background:var(--danger-soft);color:var(--danger)}.user-create{display:flex;gap:8px;margin-top:16px}.user-create input{flex:1;min-width:0}.user-add-trigger{width:100%;margin-top:12px;font:inherit;font-weight:600;padding:7px 12px;border:1px dashed var(--border);border-radius:7px;background:var(--surface);color:var(--text-muted);cursor:pointer;font-size:13px}.user-add-trigger:hover{border-color:var(--accent);color:var(--accent)}.input-cell--narrow{min-width:48px}.input-cell--tight{min-width:0;width:fit-content}.guide-cell{display:inline-flex;align-items:center;gap:6px}.guide-cell__icon{font-size:14px;line-height:1}.edit-cell{display:flex;align-items:center;gap:6px;min-width:180px}.edit-cell .input-cell{flex:1;min-width:0}.edit-cell--stacked{flex-direction:column;align-items:stretch}.edit-cell__actions{display:flex;gap:6px}.edit-cell--stacked .edit-cell__actions{justify-content:flex-end}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:24px;background:#0f172a73}.modal-card{width:100%;max-width:440px;max-height:90vh;overflow:auto;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 32px #0f172a33}.modal-card__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 20px;border-bottom:1px solid var(--border)}.modal-card__title{margin:0;font-size:16px;font-weight:700}.modal-card__close{flex-shrink:0;width:32px;height:32px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text-muted);cursor:pointer}.modal-card__close:hover{background:var(--bg);color:var(--text)}.modal-card__body{padding:16px 20px}.info-list{margin:0;display:flex;flex-direction:column;gap:12px}.info-list__row{display:grid;grid-template-columns:110px 1fr;gap:12px;align-items:baseline}.info-list__label{margin:0;color:var(--text-muted);font-size:13px;font-weight:600}.info-list__value{margin:0;color:var(--text);white-space:pre-wrap;word-break:break-word}.info-list__memo{margin-top:16px;padding-top:16px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:8px}.info-list__memo textarea.input-cell{width:100%;min-height:96px;resize:vertical;white-space:pre-wrap}.extra-info-cell{display:flex;align-items:center;gap:8px}.extra-info-cell__peek{color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:0 0 120px;width:120px}.doc-tabs{display:flex;gap:8px;margin:16px 0 8px;position:sticky;top:-28px;background:var(--bg);padding:12px 0;z-index:10;border-bottom:1px solid var(--border)}.doc-tab{font:inherit;font-weight:600;padding:9px 18px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text-muted);cursor:pointer}.doc-tab.is-active{background:var(--brand);border-color:var(--brand-border);color:#fff}.doc-page{max-width:1100px}.doc-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px 24px;margin-bottom:18px}.doc-h2{font-size:17px;font-weight:700;margin:0 0 4px;display:flex;align-items:center;gap:8px}.doc-lead{color:var(--text-muted);margin:0 0 16px}.doc-step{display:flex;gap:14px;padding:14px 0;border-top:1px solid var(--border)}.doc-step:first-of-type{border-top:none}.doc-step__body{flex:1}.doc-step__title{font-weight:700;margin:0 0 4px}.doc-step__body p{margin:0 0 8px}.doc-demo{background:var(--bg);border:1px dashed var(--border);border-radius:8px;padding:12px 14px;margin:10px 0 4px;display:flex;flex-wrap:wrap;gap:10px;align-items:center}.doc-demo__cap{width:100%;font-size:12px;color:var(--text-muted);font-weight:600;margin-bottom:2px}.doc-note{background:var(--brand-soft);border-left:3px solid var(--brand);border-radius:6px;padding:10px 14px;margin:12px 0;font-size:13px}.doc-note strong{color:var(--brand)}.doc-warn{background:var(--danger-soft);border-left:3px solid var(--danger);border-radius:6px;padding:10px 14px;margin:12px 0;font-size:13px}.doc-warn strong{color:var(--danger)}.map-table td,.map-table th{white-space:normal;vertical-align:top}.map-table code{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.map-table .src{color:var(--text-muted)}.src-tag{display:inline-block;font-size:11px;font-weight:700;padding:1px 7px;border-radius:999px;white-space:nowrap}.src-tag--sheet{background:var(--accent-soft);color:var(--accent)}.src-tag--status{background:#fff4e2;color:#c47d12}.src-tag--derived{background:#eef7f1;color:#46a771}.map-cell{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.map-cell--center{justify-content:center}.map-cell .src-tag{flex:none}.map-table .col-type{text-align:center}.legend{display:flex;flex-wrap:wrap;gap:14px;margin:0 0 16px;font-size:13px}.legend span{display:inline-flex;align-items:center;gap:6px}ul.tight{margin:4px 0 0;padding-left:18px}ul.tight li{margin-bottom:4px}
