/* 구성원 공간의 탐색과 업무·관리 화면을 일관된 간격과 색상으로 정리한다. */
.portal { --portal-ink:#16293f; --portal-muted:#55616c; --portal-accent:#0d6849; --portal-line:#dce4e7; --portal-paper:#fff; --portal-bg:#f5f7f8; margin:0; background:var(--portal-bg); color:var(--portal-ink); font-family:Pretendard,system-ui,-apple-system,sans-serif; font-size:15px; line-height:1.6; }
.portal * { box-sizing:border-box; }
.portal a,.portal button { -webkit-tap-highlight-color:transparent; }
.portal :focus-visible { outline:3px solid #72b998; outline-offset:3px; }
.portal-topbar { min-height:80px; padding:16px 32px; display:flex; justify-content:space-between; align-items:center; gap:20px; background:var(--portal-paper); border-bottom:1px solid var(--portal-line); }
.portal-brand a { display:flex; align-items:center; gap:12px; text-decoration:none; }
.portal-brand img { width:34px; height:42px; }
.portal-brand strong { font-size:17px; letter-spacing:-.6px; display:block; }
.portal-brand small { display:block; color:var(--portal-muted); font-size:12px; }
.portal-account { display:flex; align-items:center; gap:20px; font-size:13px; }
.portal-account-name { display:flex; align-items:center; gap:10px; font-weight:600; }
.portal-account-name span { font-size:12px; font-weight:400; color:var(--portal-muted); }
.portal-public-link { color:var(--portal-muted); font-size:13px; }
.portal-nav { position:absolute; left:0; top:81px; width:220px; min-height:calc(100vh - 81px); padding:30px 18px; }
.portal-nav-caption { padding:0 14px; margin:0 0 14px; font-size:12px; color:var(--portal-muted); }
.portal-nav ul { display:grid; gap:5px; }
.portal-nav-link { display:block; padding:11px 14px; border-radius:7px; font-size:14px; color:var(--portal-muted); }
.portal-nav-link:hover { background:#eaf0ee; color:var(--portal-ink); }
.portal-nav-link.is-active { color:var(--portal-accent); background:#e1eee7; font-weight:700; }
.portal-nav-return { display:block; margin:24px 14px 0; padding-top:22px; border-top:1px solid var(--portal-line); font-size:12px; color:var(--portal-muted); }
.portal-signed-in #portal-main,.portal-signed-in .portal-footer { margin-left:220px; }
#portal-main { min-width:0; min-height:calc(100dvh - 210px); }
.portal #portal-main>section { width:100%; max-width:1180px; padding:38px 40px 24px; margin:0 auto; }
.portal #portal-main>section.max-w-3xl { max-width:840px; }
.portal h1 { font-size:28px; line-height:1.35; letter-spacing:-1px; font-weight:700; }
.portal h2 { letter-spacing:-.4px; }
.portal .text-base { color:var(--portal-ink); }
.portal .portal-page-heading { margin-bottom:28px; }
.portal .portal-page-heading p { margin-top:8px; color:var(--portal-muted); }
.portal .portal-page-top { display:flex; align-items:flex-start; justify-content:space-between; gap:20px; }
.portal .portal-role { font-size:12px; border:1px solid var(--portal-line); padding:5px 10px; border-radius:6px; white-space:nowrap; }
.portal .portal-panel { background:var(--portal-paper); border:1px solid var(--portal-line); border-radius:12px; padding:26px; }
.portal .portal-panel-heading { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:20px; }
.portal .portal-panel-heading h2 { font-size:18px; font-weight:650; }
.portal .portal-panel-heading a { font-size:13px; color:var(--portal-accent); }
.portal .portal-metrics { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); border-top:1px solid var(--portal-line); border-bottom:1px solid var(--portal-line); margin:26px 0 30px; }
.portal .portal-metrics a { padding:20px 16px; min-width:0; }
.portal .portal-metrics a:first-child { padding-left:0; }
.portal .portal-metrics a:hover { background:#edf2ef; }
.portal .portal-metrics span { display:block; font-size:13px; color:var(--portal-muted); }
.portal .portal-metrics strong { display:block; margin-top:7px; font-size:30px; font-weight:600; font-variant-numeric:tabular-nums; }
.portal .portal-dashboard-grid { display:grid; grid-template-columns:minmax(0,1.6fr) minmax(230px,1fr); gap:24px; }
.portal .portal-empty { padding:32px 0; color:var(--portal-muted); font-size:14px; }
.portal .portal-empty p+p { margin-top:8px; font-size:13px; }
.portal .portal-shortcuts { display:grid; gap:0; }
.portal .portal-shortcuts a { display:flex; align-items:center; justify-content:space-between; padding:13px 0; border-bottom:1px solid var(--portal-line); font-size:14px; }
.portal .portal-shortcuts a:last-child { border-bottom:0; }
.portal .portal-shortcuts a:hover { color:var(--portal-accent); }
.portal .portal-button { display:inline-flex; justify-content:center; align-items:center; min-height:42px; padding:9px 16px; border:1px solid transparent; border-radius:7px; font-size:14px; font-weight:600; white-space:nowrap; background:var(--portal-accent); color:#fff; cursor:pointer; text-decoration:none; }
.portal .portal-button:hover { background:#095438; }
.portal .portal-button-secondary { border-color:var(--portal-line); color:var(--portal-ink); background:var(--portal-paper); }
.portal .portal-button-secondary:hover { border-color:var(--portal-accent); background:#edf3ef; }
.portal button:disabled { opacity:.55; cursor:wait; }
.portal .portal-button:active { transform:translateY(1px); }
.portal .portal-content-links { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); margin:24px 0 32px; border-top:1px solid var(--portal-line); }
.portal .portal-content-link { display:grid; grid-template-columns:1fr auto; align-items:start; gap:6px 20px; padding:22px 16px 22px 0; border-bottom:1px solid var(--portal-line); }
.portal .portal-content-link:nth-child(even) { padding-left:24px; }
.portal .portal-content-link strong { font-size:16px; }
.portal .portal-content-link span { font-size:22px; font-variant-numeric:tabular-nums; color:var(--portal-accent); }
.portal .portal-content-link p { font-size:13px; color:var(--portal-muted); grid-column:1 / -1; }
.portal .portal-content-link:hover strong { color:var(--portal-accent); }
.portal .portal-professor { display:flex; align-items:center; gap:18px; margin:24px 0; padding:20px 24px; border:1px solid #bdd7c8; border-radius:10px; background:#eef5f0; }
.portal .portal-professor img { width:56px; height:72px; object-fit:cover; border-radius:5px; }
.portal .portal-professor div { flex:1; min-width:0; }
.portal .portal-professor h2 { font-size:16px; font-weight:650; }
.portal .portal-professor p { font-size:13px; color:var(--portal-muted); margin-top:4px; }
.portal .portal-settings-grid { display:grid; grid-template-columns:minmax(0,1.5fr) minmax(230px,1fr); gap:24px; align-items:start; }
.portal .portal-settings-grid h2 { font-size:18px; font-weight:650; margin-bottom:8px; }
.portal .portal-settings-grid p { color:var(--portal-muted); font-size:13px; }
.portal .portal-sync-metrics { display:flex; flex-wrap:wrap; gap:24px; margin:20px 0; }
.portal .portal-sync-metrics dt { font-size:12px; color:var(--portal-muted); }
.portal .portal-sync-metrics dd { font-size:24px; font-weight:600; font-variant-numeric:tabular-nums; }
.portal .portal-sync-meta { padding:14px 0; margin-bottom:10px; border-top:1px solid var(--portal-line); }
.portal .portal-sync-meta p+p { margin-top:5px; }
.portal .portal-key-settings { border-top:1px solid var(--portal-line); margin-top:24px; padding-top:18px; }
.portal .portal-key-settings summary { cursor:pointer; font-size:13px; font-weight:600; }
.portal .portal-key-settings form { margin-top:16px; }
.portal .portal-message { margin:20px 0; border-left:3px solid var(--portal-accent); padding:12px 16px; background:#eaf3ed; font-size:14px; }
.portal .portal-message-error { border-color:#b64234; background:#fff0ed; color:#853326; }
.portal #portal-main input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]),.portal #portal-main select,.portal #portal-main textarea { border-color:#bdcbd0; min-height:44px; border-radius:7px; color:var(--portal-ink); background:var(--portal-paper); }
.portal #portal-main input::placeholder,.portal #portal-main textarea::placeholder { color:#68747e; }
.portal #portal-main input[type=file] { font-size:13px; max-width:100%; }
.portal #portal-main input[type=file]::file-selector-button { border:0; border-radius:6px; background:var(--portal-accent); color:#fff; padding:10px 14px; margin:0 12px 8px 0; cursor:pointer; }
.portal #portal-main button[type=submit]:not(.portal-button) { background:var(--portal-accent); color:#fff; min-height:42px; border-radius:7px; }
.portal #portal-main button[type=submit]:hover { filter:brightness(.92); }
.portal #portal-main button[type=submit][class*="text-red"] { background:#fff5f2; color:#a83428; border-color:#e7bcb5; }
.portal #portal-main table { font-size:13px; }
.portal #portal-main th { font-size:12px; letter-spacing:.01em; }
.portal .portal-edit-form { padding:26px; border:1px solid var(--portal-line); background:var(--portal-paper); border-radius:12px; }
.portal .portal-photo-field { padding-bottom:24px; border-bottom:1px solid var(--portal-line); }
.portal .portal-photo-layout { display:flex; align-items:center; gap:22px; margin-top:14px; }
.portal .portal-photo-preview { width:112px; height:144px; flex-shrink:0; background:var(--portal-bg); border:1px solid var(--portal-line); border-radius:7px; overflow:hidden; display:flex; align-items:center; justify-content:center; }
.portal .portal-photo-preview img { max-width:100%; }
.portal .portal-footer { color:var(--portal-muted); margin-top:24px; border-top:1px solid var(--portal-line); }
.portal .portal-footer>div { padding:22px 40px; }
.portal .portal-footer>div>p:last-child { display:none; }
.portal #portal-main>.portal-login { max-width:980px; min-height:calc(100dvh - 180px); display:grid; grid-template-columns:1fr 1fr; align-items:center; gap:64px; padding:50px 40px; }
.portal .portal-login-intro h1 { font-size:36px; max-width:320px; line-height:1.4; margin-bottom:18px; }
.portal .portal-login-intro>p { color:var(--portal-muted); max-width:310px; font-size:15px; }
.portal .portal-login-intro ul { margin-top:36px; display:grid; gap:14px; color:var(--portal-muted); font-size:14px; }
.portal .portal-login-intro li { border-bottom:1px solid var(--portal-line); padding-bottom:12px; }
.portal .portal-login-form { padding:30px; background:var(--portal-paper); border:1px solid var(--portal-line); border-radius:12px; }
.portal .portal-login-form h2 { font-size:22px; font-weight:650; }
.portal .portal-breadcrumb { display:flex; gap:10px; color:var(--portal-muted); font-size:13px; margin-bottom:18px; }
.portal .news-editor-form { display:grid; grid-template-columns:minmax(0,1fr) 260px; gap:24px; align-items:start; }
.portal .news-editor-form label:not(.news-check) { display:block; font-size:14px; font-weight:600; margin:24px 0 8px; }
.portal .news-editor-form label:first-child { margin-top:0; }
.portal .news-editor-form label>span { color:var(--portal-accent); font-size:11px; }
.portal .news-editor-form input:not([type=checkbox]):not([type=hidden]),.portal .news-editor-form textarea,.portal .news-editor-form select { width:100%; padding:10px 12px; border:1px solid var(--portal-line); }
.portal .news-editor-form input[type=file] { border:0!important; padding:8px 0!important; }
.portal .news-field-help { font-size:12px; line-height:1.6; color:var(--portal-muted); margin:6px 0 10px; }
.portal .news-check { display:flex; gap:10px; align-items:center; font-size:13px; margin:22px 0 8px; }
.portal .news-check input { width:16px; height:16px; accent-color:var(--portal-accent); }
.portal .news-editor-settings { position:sticky; top:24px; }
.portal .news-editor-settings h2 { font-size:18px; font-weight:650; }
.portal .news-editor-actions { display:grid; gap:10px; border-top:1px solid var(--portal-line); margin-top:24px; padding-top:20px; }
.portal .news-editor-actions>a { text-align:center; font-size:13px; color:var(--portal-muted); margin-top:8px; }
.portal .news-upload-section { border-top:1px solid var(--portal-line); margin-top:26px; padding-top:20px; }
.portal .news-editor-image { max-width:220px; max-height:160px; object-fit:contain; border-radius:6px; }
.portal .news-current-file { font-size:13px; color:var(--portal-accent); overflow-wrap:anywhere; }
.portal .news-admin-list>li { padding:24px 0; border-top:1px solid var(--portal-line); display:flex; justify-content:space-between; align-items:center; gap:24px; }
.portal .news-admin-meta { display:flex; flex-wrap:wrap; gap:12px; align-items:center; font-size:12px; color:var(--portal-muted); }
.portal .news-admin-list h3 { font-size:16px; font-weight:600; margin-top:12px; overflow-wrap:anywhere; }
.portal .news-status { padding:3px 8px; background:#edf0f2; border-radius:4px; }
.portal .news-status.is-public { background:#e2efe7; color:var(--portal-accent); }
.portal .news-admin-actions { display:flex; flex-wrap:wrap; align-items:center; gap:16px; flex-shrink:0; font-size:12px; }
.portal .news-delete { padding:7px 12px; }
.portal .order-import { margin:26px 0; border:1px solid var(--portal-line); border-radius:9px; background:white; }
.portal .order-import summary { padding:16px 20px; cursor:pointer; font-size:14px; }
.portal .order-import summary span:first-child { font-weight:600; }
.portal .order-import summary span:last-child { color:var(--portal-muted); font-size:12px; margin-left:20px; }
.portal .order-import-body { padding:0 22px 24px; }
.portal .order-import-template { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:16px; border-top:1px solid var(--portal-line); padding:22px 0; }
.portal .order-import strong,.portal .order-import label { font-size:14px; font-weight:600; }
.portal .order-import p { color:var(--portal-muted); font-size:12px; margin-top:7px; }
.portal .order-import-upload { border-top:1px solid var(--portal-line); padding-top:22px; }
.portal .order-import-controls { display:flex; align-items:center; gap:14px; margin-top:12px; }
.portal .order-import-controls input { min-width:0; flex:1; padding:6px 0; }
.portal .order-import-controls button { flex-shrink:0; }
.portal .dashboard-heading { display:flex; align-items:center; justify-content:space-between; gap:20px; margin-bottom:26px; }
.portal .dashboard-heading>div>p { font-size:10px; font-weight:600; letter-spacing:.16em; color:var(--portal-accent); margin-bottom:8px; }
.portal .dashboard-heading time { font-size:13px; color:var(--portal-muted); }
.portal .dashboard-welcome { padding:32px; background:#162f3b; color:#fff; border-radius:12px; display:flex; align-items:center; justify-content:space-between; gap:30px; }
.portal .dashboard-role { font-size:11px; color:#b6dbc6; border:1px solid #557769; padding:4px 8px; border-radius:4px; }
.portal .dashboard-welcome h2 { font-size:27px; font-weight:650; letter-spacing:-.8px; margin-top:15px; }
.portal .dashboard-welcome p { color:#c2d0d6; font-size:14px; margin-top:9px; }
.portal .dashboard-welcome-links { display:grid; min-width:180px; }
.portal .dashboard-welcome-links a { display:flex; justify-content:space-between; gap:24px; padding:13px 0; border-bottom:1px solid #52656c; font-size:13px; }
.portal .dashboard-stat-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:18px; margin:22px 0 28px; }
.portal .dashboard-stat { border:1px solid var(--portal-line); border-radius:10px; padding:22px; background:white; }
.portal .dashboard-stat:hover { border-color:#9abcaa; }
.portal .dashboard-stat-top { display:flex; align-items:center; justify-content:space-between; gap:12px; font-size:13px; color:var(--portal-muted); }
.portal .dashboard-stat svg { width:24px; height:24px; color:#338368; }
.portal .dashboard-stat>strong { display:block; font-size:34px; font-weight:600; margin-top:15px; line-height:1.2; font-variant-numeric:tabular-nums; }
.portal .dashboard-stat small { font-size:12px; font-weight:400; color:var(--portal-muted); margin-left:8px; }
.portal .dashboard-stat>p { display:flex; justify-content:space-between; margin-top:20px; font-size:12px; color:var(--portal-muted); }
.portal .dashboard-content-grid { display:grid; grid-template-columns:minmax(0,1.35fr) minmax(0,1fr); gap:22px; }
.portal .dashboard-content-grid .portal-panel { min-height:240px; }
.portal .dashboard-empty { padding:24px 0; color:var(--portal-muted); font-size:13px; }
.portal .dashboard-empty>span { display:block; font-size:26px; color:#9db4a7; margin-bottom:10px; }
.portal .dashboard-empty a { display:inline-block; margin-top:15px; color:var(--portal-accent); text-decoration:underline; text-underline-offset:4px; }
.portal .dashboard-notice-list li+li { border-top:1px solid var(--portal-line); }
.portal .dashboard-notice-list a { display:block; padding:16px 0; }
.portal .dashboard-notice-list a>div { display:flex; justify-content:space-between; font-size:11px; color:var(--portal-muted); }
.portal .dashboard-notice-list a>div>span { color:var(--portal-accent); }
.portal .dashboard-notice-list h3 { font-size:15px; font-weight:600; margin-top:10px; overflow-wrap:anywhere; }
.portal .dashboard-agenda li { display:flex; align-items:center; gap:18px; padding:17px 0; border-top:1px solid var(--portal-line); }
.portal .dashboard-agenda li>time { width:42px; flex-shrink:0; text-align:center; }
.portal .dashboard-agenda time small { display:block; font-size:10px; color:var(--portal-muted); }
.portal .dashboard-agenda time strong { font-size:24px; font-weight:600; }
.portal .dashboard-agenda li a { font-size:14px; font-weight:550; }
.portal .dashboard-agenda li p { font-size:11px; color:var(--portal-muted); margin-top:5px; }
.portal .dashboard-quick { margin-top:32px; }
.portal .dashboard-quick h2 { font-size:16px; font-weight:600; margin-bottom:16px; }
.portal .dashboard-quick>div { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); border-block:1px solid var(--portal-line); }
.portal .dashboard-quick a { padding:23px 18px; border-right:1px solid var(--portal-line); }
.portal .dashboard-quick a:last-child { border-right:0; }
.portal .dashboard-quick strong { display:flex; justify-content:space-between; font-size:13px; font-weight:600; }
.portal .dashboard-quick strong span { color:var(--portal-accent); }
.portal .dashboard-quick p { font-size:11px; color:var(--portal-muted); margin-top:7px; }
.portal .dashboard-admin-links { display:flex; flex-wrap:wrap; gap:20px; margin-top:24px; color:var(--portal-muted); font-size:12px; }
@media(max-width:1000px) {
  .portal .news-editor-form { grid-template-columns:minmax(0,1fr); }
  .portal .news-editor-settings { position:static; }
  .portal .news-admin-list>li { flex-direction:column; align-items:stretch; }
  .portal .dashboard-content-grid { grid-template-columns:minmax(0,1fr); }
  .portal .dashboard-quick>div { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .portal-topbar { padding:16px 22px; }
  .portal-nav { width:180px; padding:26px 12px; }
  .portal-signed-in #portal-main,.portal-signed-in .portal-footer { margin-left:180px; }
  .portal #portal-main>section { padding:28px 24px; }
  .portal .portal-settings-grid,.portal .portal-dashboard-grid { grid-template-columns:1fr; }
}
@media(max-width:700px) {
  .portal .dashboard-heading { flex-wrap:wrap; gap:12px; }
  .portal .dashboard-heading time { font-size:12px; }
  .portal .dashboard-welcome { padding:24px; display:block; }
  .portal .dashboard-welcome h2 { font-size:23px; }
  .portal .dashboard-welcome-links { display:flex; flex-wrap:wrap; gap:20px; margin-top:12px; }
  .portal .dashboard-welcome-links a { gap:12px; font-size:12px; }
  .portal .dashboard-stat-grid { grid-template-columns:minmax(0,1fr); gap:10px; }
  .portal .dashboard-stat { display:grid; grid-template-columns:minmax(0,1fr) auto; padding:16px 18px; gap:8px 18px; }
  .portal .dashboard-stat-top svg { display:none; }
  .portal .dashboard-stat>strong { grid-column:2; grid-row:1/3; margin:0; align-self:center; font-size:28px; }
  .portal .dashboard-stat>p { grid-column:1; margin:0; }
  .portal .dashboard-stat>p>span { display:none; }
  .portal .dashboard-quick a { padding:18px 10px; }
  .portal .dashboard-quick strong { font-size:12px; }
  .portal .dashboard-quick a:nth-child(2n) { border-right:0; }
  .portal .order-import summary span:last-child { display:block; margin:5px 0 0 16px; }
  .portal .order-import-body { padding:0 18px 20px; }
  .portal .order-import-controls { flex-direction:column; align-items:stretch; }
  .portal .order-import-template { align-items:flex-start; flex-direction:column; }
  .portal-topbar { min-height:74px; padding:14px 18px; gap:12px; }
  .portal-brand strong { font-size:15px; }
  .portal-brand a { gap:9px; }
  .portal-brand img { width:28px; height:36px; }
  .portal-account { gap:10px; }
  .portal-account-name { display:none; }
  .portal-account .portal-button { font-size:12px; padding:7px 10px; min-height:36px; }
  .portal-nav { position:static; width:100%; min-height:0; padding:10px 16px; border-bottom:1px solid var(--portal-line); background:var(--portal-paper); }
  .portal-nav-caption,.portal-nav-return { display:none; }
  .portal-nav ul { display:flex; overflow-x:auto; gap:4px; scrollbar-width:thin; }
  .portal-nav li { flex-shrink:0; }
  .portal-nav-link { white-space:nowrap; padding:9px 12px; font-size:13px; }
  .portal-signed-in #portal-main,.portal-signed-in .portal-footer { margin-left:0; }
  .portal #portal-main>section { padding:26px 18px; }
  .portal h1 { font-size:24px; }
  .portal .portal-page-top { flex-wrap:wrap; gap:12px; }
  .portal .portal-metrics { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .portal .portal-metrics a { padding:14px 10px!important; }
  .portal .portal-metrics strong { font-size:26px; }
  .portal .portal-panel,.portal .portal-edit-form { padding:20px; }
  .portal .portal-content-links { grid-template-columns:1fr; }
  .portal .portal-content-link:nth-child(even) { padding-left:0; }
  .portal .portal-professor { display:grid; grid-template-columns:auto minmax(0,1fr); padding:18px; }
  .portal .portal-professor .portal-button { grid-column:1 / -1; }
  .portal .portal-photo-layout { align-items:flex-start; flex-direction:column; gap:16px; }
  .portal .portal-footer>div { padding:20px 18px; }
  .portal #portal-main>.portal-login { display:block; min-height:0; padding:32px 18px; }
  .portal .portal-login-intro h1 { font-size:26px; max-width:none; margin-bottom:10px; }
  .portal .portal-login-intro ul { display:none; }
  .portal .portal-login-form { margin-top:26px; padding:24px; }
}
