:root{--brand-primary:#036;--brand-accent:#c00;--brand-surface-dark:#2c2c2c;--ink:#333;--muted-ink:#666;--line:#dcdfe3;--band:#f5f5f5;--paper:#fff;--ok:#12734a;--font-body:var(--font-sans,"Noto Sans KR"),system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}*{box-sizing:border-box}body{margin:0;font-family:var(--font-body);color:var(--ink);background:var(--band);line-height:1.65;font-size:15px}a{color:var(--brand-primary);text-decoration:none}a:hover{text-decoration:underline}.shell{max-width:68rem;margin:0 auto;padding:0 1.25rem}.site-header .utility{background:var(--brand-surface-dark);color:#fff;font-size:.75rem}.site-header .utility .shell{display:flex;justify-content:space-between;align-items:center;min-height:2rem}.utility-locales{display:flex;gap:.9rem}.utility-locales a{color:hsla(0,0%,100%,.85)}.site-header .masthead{background:var(--paper);border-bottom:1px solid var(--line)}.site-header .masthead .shell{display:flex;align-items:center;justify-content:space-between;min-height:4.5rem}.brand{display:grid;grid-gap:.1rem;gap:.1rem}.brand:hover{text-decoration:none}.brand-mark{font-size:1.5rem;font-weight:700;letter-spacing:.01em;color:var(--brand-primary);line-height:1.2}.brand-sub{font-size:.78rem;color:var(--muted-ink)}.gnb{background:var(--brand-primary)}.gnb ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap}.gnb a{display:block;padding:.8rem 1.4rem;color:#fff;font-weight:500;font-size:.95rem;border-bottom:3px solid transparent}.gnb a:hover{text-decoration:none;background:hsla(0,0%,100%,.08);border-bottom-color:var(--brand-accent)}.site-footer{margin-top:3rem;background:var(--brand-surface-dark);color:hsla(0,0%,100%,.75);font-size:.8rem}.site-footer .shell{padding:1.5rem 1.25rem 2rem}.site-footer strong{color:#fff;font-weight:600}.site-footer p{margin:.35rem 0 0}.page{max-width:68rem;margin:0 auto;padding:2rem 1.25rem 3rem}h1{color:var(--brand-primary);font-size:1.6rem;margin:0 0 .4rem}h1,h2{font-weight:700}h2{display:flex;align-items:center;gap:.5rem;font-size:1.02rem;color:var(--ink);margin:2rem 0 .8rem}h2:before{content:"";width:4px;height:1.05em;background:var(--brand-primary);flex:none}.lede{max-width:46rem;margin-top:0}.breadcrumb,.lede{color:var(--muted-ink)}.breadcrumb{margin:0 0 .8rem;font-size:.83rem}.card{background:var(--paper);border:1px solid var(--line);border-top:2px solid var(--brand-primary);box-shadow:0 1px 3px rgba(0,0,0,.05);padding:1.1rem 1.3rem;margin:0 0 1rem}.card h2{margin:0 0 .8rem;font-size:.98rem}.card.session{display:flex;align-items:center;justify-content:space-between;gap:1rem;font-size:.875rem;border-top-color:var(--line)}.modules{list-style:none;padding:0;margin:0;background:var(--paper);border:1px solid var(--line)}.modules li{display:grid;grid-template-columns:4.5rem 1fr auto;grid-gap:1rem;gap:1rem;align-items:center;padding:.75rem 1.1rem;border-bottom:1px solid var(--line)}.modules li:last-child{border-bottom:0}.code{font-weight:700;color:var(--brand-primary)}.status{font-size:.78rem;color:var(--muted-ink)}dl{display:grid;grid-template-columns:8rem 1fr;grid-gap:.5rem 1rem;gap:.5rem 1rem;margin:0}dt{color:var(--muted-ink)}dd{margin:0}.locales{display:flex;gap:1rem;flex-wrap:wrap}.signin{max-width:26rem}.signin label{display:block;margin:0 0 .75rem;font-size:.875rem;color:var(--muted-ink)}.search input,.signin input,.term-select select{display:block;width:100%;margin-top:.25rem;padding:.55rem .65rem;border:1px solid var(--line);border-radius:0;background:var(--paper);font:inherit;color:var(--ink)}.score:focus,.search input:focus,.signin input:focus,.term-select select:focus{outline:2px solid var(--brand-primary);outline-offset:-1px}.term-select{display:block;max-width:22rem;margin:0 0 1rem;font-size:.875rem;color:var(--muted-ink)}button{padding:.5rem 1.1rem;border:1px solid var(--brand-primary);border-radius:0;background:var(--brand-primary);color:#fff;font:inherit;font-size:.875rem;font-weight:500;cursor:pointer}button:hover:not(:disabled){filter:brightness(1.15)}button:disabled{opacity:.55;cursor:progress}.actions button.danger,.offerings button.danger,button.danger{background:var(--paper);border-color:var(--brand-accent);color:var(--brand-accent)}.headline{margin:0;font-size:1.15rem;font-weight:700;color:var(--brand-primary)}.muted{color:var(--muted-ink);font-size:.875rem}.error{border-left:3px solid var(--brand-accent);background:color-mix(in srgb,var(--brand-accent) 6%,var(--paper));color:var(--brand-accent)}.error,.notice{margin:0 0 .75rem;padding:.5rem .75rem;font-size:.875rem}.notice{border-left:3px solid var(--ok);background:color-mix(in srgb,var(--ok) 7%,var(--paper));color:var(--ok)}.badge{flex:none;padding:.1rem .55rem;border-radius:2px;font-size:.72rem;font-weight:500;background:var(--band);border:1px solid var(--line)}.badge.open{background:var(--ok);border-color:var(--ok);color:#fff}.badge.scheduled{background:color-mix(in srgb,var(--brand-primary) 12%,var(--paper));border-color:color-mix(in srgb,var(--brand-primary) 30%,var(--paper));color:var(--brand-primary)}.badge.closed{color:var(--muted-ink)}.entries,.windows{list-style:none;margin:0;padding:0;display:grid;grid-gap:.5rem;gap:.5rem}.entries li,.windows li{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem}.summary{display:flex;flex-wrap:wrap;gap:1.5rem;margin:0}.summary div{display:grid;grid-gap:.125rem;gap:.125rem}.summary dt{font-size:.75rem;color:var(--muted-ink)}.summary dd{margin:0;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.search label{display:grid;grid-gap:.25rem;gap:.25rem;font-size:.875rem;margin-bottom:.75rem;color:var(--muted-ink)}.offerings{list-style:none;margin:0;padding:0;display:grid;grid-gap:0;gap:0}.offerings li{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.6rem 0;border-top:1px solid var(--line)}.offerings li:first-child{border-top:0}.offerings li>div{flex:1 1 16rem;display:grid;grid-gap:.125rem;gap:.125rem}.offerings li.stacked{align-items:flex-start}.roster{flex:1 1 100%;font-size:.875rem}.roster ol{margin:.25rem 0 0;padding-left:1.25rem;display:grid;grid-gap:.125rem;gap:.125rem}.timetable-scroll{overflow-x:auto}.timetable{border-collapse:collapse;font-size:.8125rem;min-width:32rem;background:var(--paper)}.timetable td,.timetable th{border:1px solid var(--line);padding:.35rem .5rem;vertical-align:top;min-width:5.5rem}.timetable thead th{background:var(--brand-primary);color:#fff;font-weight:500}.timetable tbody th{font-weight:500;color:var(--muted-ink);background:var(--band);min-width:3rem;text-align:center}.timetable td.filled{background:color-mix(in srgb,var(--ok) 10%,var(--paper))}.timetable td.filled span,.timetable td.filled strong{display:block;line-height:1.3}.score{width:4rem;padding:.25rem .4rem;border:1px solid var(--line);border-radius:0;font:inherit;text-align:right}.score:disabled{background:var(--band);color:var(--muted-ink)}.actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.85rem}.quicklinks{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));grid-gap:1rem;gap:1rem}.quicklinks a{display:grid;grid-gap:.35rem;gap:.35rem;padding:1.15rem 1.25rem;background:var(--paper);border:1px solid var(--line);border-top:2px solid var(--brand-primary);box-shadow:0 1px 3px rgba(0,0,0,.05);height:100%}.quicklinks a:hover{text-decoration:none;border-top-color:var(--brand-accent);box-shadow:0 2px 8px rgba(0,0,0,.09)}.quicklinks strong{color:var(--brand-primary);font-size:1.02rem}.quicklinks span{color:var(--muted-ink);font-size:.83rem;line-height:1.5}.dialog-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:60;padding:1rem}.dialog{background:var(--paper);border-top:3px solid var(--brand-primary);box-shadow:0 8px 28px rgba(0,0,0,.25);width:100%;max-width:26rem;padding:1.2rem 1.35rem 1.35rem}.dialog.danger{border-top-color:var(--brand-accent)}.dialog h3{margin:0 0 .5rem;font-size:1.05rem;color:var(--brand-primary)}.dialog.danger h3{color:var(--brand-accent)}.dialog p{margin:0 0 .75rem;font-size:.9rem;color:var(--ink)}.dialog label{display:grid;grid-gap:.3rem;gap:.3rem;font-size:.85rem;color:var(--muted-ink)}.dialog textarea{border:1px solid var(--line);border-radius:0;padding:.5rem .6rem;font:inherit;resize:vertical}.dialog textarea:focus{outline:2px solid var(--brand-primary);outline-offset:-1px}.dialog .actions{justify-content:flex-end;margin-top:1rem}button.ghost{background:var(--paper);border-color:var(--line);color:var(--muted-ink)}button.danger-solid{background:var(--brand-accent);border-color:var(--brand-accent);color:#fff}.timetable-scroll .timetable tbody th[scope=row],.timetable-scroll .timetable thead th:first-child{position:-webkit-sticky;position:sticky;left:0;z-index:1}