보기 편한 학사 일정 웹 페이지 만들기

소개

수업 때 엘리 교수님이 말씀해주신 학사일정 페이지...

불편해서 저도 만들어서 배포해 보았습니다.

진행 방법

어떤 도구를 사용했고, 어떻게 활용하셨나요?

claude 사용했습니다.

Tip: 사용한 프롬프트 전문을 꼭 포함하고, 내용을 짧게 소개해 주세요.

한국어로 된 문자 메시지의 스크린샷

Tip: 활용 이미지나 캡처 화면을 꼭 남겨주세요.

한국 달력이 화면에 표시됩니다

Tip: 코드 전문은 코드블록에 감싸서 작성해주세요. ( / 을 눌러 '코드 블록'을 선택)


<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>2026학년도 학사력 — 4·5·6·7월</title>
  <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700;900&family=DM+Mono:wght@400;500&display=swap" rel="stylesheet"/>
  <style>
    :root {
      --bg: #f0f4f8;
      --surface: #ffffff;
      --surface2: #e8edf3;
      --border: #d8dee8;
      --text: #1a2030;
      --muted: #8892a8;

      --apr: #2563eb;
      --apr-light: #eff6ff;
      --apr-bd: #bfdbfe;

      --may: #16a34a;
      --may-light: #f0fdf4;
      --may-bd: #bbf7d0;

      --jun: #dc2626;
      --jun-light: #fef2f2;
      --jun-bd: #fecaca;

      --jul: #7c3aed;
      --jul-light: #f5f3ff;
      --jul-bd: #ddd6fe;

      --holiday: #ef4444;
      --makeup:  #f59e0b;
      --event:   #7c3aed;
      --exam:    #0891b2;
      --shadow: 0 2px 12px rgba(0,0,0,0.07);
    }

    * { box-sizing: border-box; margin: 0; padding: 0; }
    html { scroll-behavior: smooth; }

    body {
      background: var(--bg);
      color: var(--text);
      font-family: 'Noto Sans KR', sans-serif;
      line-height: 1.6;
      min-height: 100vh;
    }

    /* ── 헤더 ── */
    .page-header {
      background: linear-gradient(135deg, #1e3a5f 0%, #1e40af 60%, #4f46e5 100%);
      padding: 48px 24px 40px;
      text-align: center;
      position: relative;
      overflow: hidden;
    }

    .page-header::before {
      content: '';
      position: absolute; inset: 0;
      background:
        radial-gradient(ellipse at 20% 50%, rgba(255,255,255,0.06) 0%, transparent 55%),
        radial-gradient(ellipse at 80% 20%, rgba(255,255,255,0.04) 0%, transparent 50%);
      pointer-events: none;
    }

    .header-label {
      font-family: 'DM Mono', monospace;
      font-size: 11px; letter-spacing: .2em;
      text-transform: uppercase;
      color: rgba(255,255,255,0.45);
      margin-bottom: 12px;
    }

    .page-header h1 {
      font-size: clamp(1.8rem,4vw,2.8rem);
      font-weight: 900; color: #fff;
      letter-spacing: -.03em;
      line-height: 1.1; margin-bottom: 10px;
    }

    .page-header h1 span { color: #93c5fd; }

    .header-sub {
      font-size: 14px; color: rgba(255,255,255,0.55);
      margin-bottom: 24px;
    }

    .month-tabs {
      display: flex; justify-content: center;
      gap: 8px; flex-wrap: wrap;
    }

    .mtab {
      padding: 7px 20px; border-radius: 20px;
      border: 1.5px solid rgba(255,255,255,0.2);
      background: rgba(255,255,255,0.08);
      color: rgba(255,255,255,0.65);
      font-size: 13px; font-weight: 600;
      cursor: pointer; text-decoration: none;
      transition: all .2s;
    }

    .mtab:hover, .mtab.active {
      background: rgba(255,255,255,0.2);
      color: #fff; border-color: rgba(255,255,255,0.45);
    }

    /* ── 래퍼 ── */
    .wrapper {
      max-width: 1080px;
      margin: 0 auto;
      padding: 36px 20px 80px;
    }

    /* ── 범례 ── */
    .legend {
      display: flex; gap: 16px; flex-wrap: wrap;
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 12px;
      padding: 13px 20px;
      margin-bottom: 32px;
      box-shadow: var(--shadow);
    }

    .legend-item {
      display: flex; align-items: center; gap: 7px;
      font-size: 13px; color: var(--muted);
    }

    .legend-dot {
      width: 10px; height: 10px; border-radius: 50%;
      flex-shrink: 0;
    }

    /* ── 월 섹션 ── */
    .month-section {
      margin-bottom: 52px;
      animation: fadeUp .5s ease both;
    }

    .month-section:nth-child(2) { animation-delay: .05s; }
    .month-section:nth-child(3) { animation-delay: .10s; }
    .month-section:nth-child(4) { animation-delay: .15s; }
    .month-section:nth-child(5) { animation-delay: .20s; }

    .month-header {
      display: flex; align-items: center;
      gap: 14px; margin-bottom: 18px;
    }

    .month-badge {
      font-family: 'DM Mono', monospace;
      font-size: 13px; font-weight: 700;
      padding: 6px 18px; border-radius: 8px;
      border: 2px solid;
    }

    .mb-apr { background: var(--apr-light); border-color: var(--apr-bd); color: var(--apr); }
    .mb-may { background: var(--may-light); border-color: var(--may-bd); color: var(--may); }
    .mb-jun { background: var(--jun-light); border-color: var(--jun-bd); color: var(--jun); }
    .mb-jul { background: var(--jul-light); border-color: var(--jul-bd); color: var(--jul); }

    .month-title { font-size: 1.5rem; font-weight: 800; letter-spacing: -.02em; }

    .month-count {
      margin-left: auto;
      font-family: 'DM Mono', monospace;
      font-size: 12px; color: var(--muted);
      background: var(--surface2);
      border: 1px solid var(--border);
      border-radius: 20px;
      padding: 4px 14px;
    }

    /* ── 캘린더 ── */
    .cal-wrap {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 16px;
      overflow: hidden;
      box-shadow: var(--shadow);
      margin-bottom: 14px;
    }

    .cal-head {
      display: grid; grid-template-columns: repeat(7,1fr);
      background: var(--surface2);
      border-bottom: 1px solid var(--border);
    }

    .cal-head-cell {
      padding: 10px 0; text-align: center;
      font-family: 'DM Mono', monospace;
      font-size: 11px; font-weight: 700;
      letter-spacing: .1em; text-transform: uppercase;
      color: var(--muted);
    }

    .cal-head-cell:first-child { color: var(--holiday); }
    .cal-head-cell:last-child  { color: #6366f1; }

    .cal-grid { display: grid; grid-template-columns: repeat(7,1fr); }

    .cal-cell {
      min-height: 88px;
      border-right: 1px solid var(--border);
      border-bottom: 1px solid var(--border);
      padding: 7px;
      transition: background .15s;
    }

    .cal-cell:nth-child(7n) { border-right: none; }
    .cal-cell:hover { background: var(--surface2); }
    .cal-cell.empty { background: rgba(0,0,0,0.015); }

    .cal-date {
      font-family: 'DM Mono', monospace;
      font-size: 14px; font-weight: 700;
      width: 27px; height: 27px;
      display: flex; align-items: center; justify-content: center;
      border-radius: 50%;
      margin-bottom: 3px;
    }

    .cal-cell.is-sun .cal-date { color: var(--holiday); }
    .cal-cell.is-sat .cal-date { color: #6366f1; }
    .cal-cell.is-holiday .cal-date { background: var(--holiday); color: #fff; }
    .cal-cell.is-makeup  .cal-date { background: var(--makeup);  color: #fff; }
    .cal-cell.is-exam    .cal-date { background: var(--exam);    color: #fff; }

    .ev-tag {
      display: block;
      font-size: 10px; font-weight: 600;
      padding: 2px 5px; border-radius: 4px;
      margin-bottom: 2px; line-height: 1.4;
      white-space: nowrap; overflow: hidden;
      text-overflow: ellipsis;
    }

    .ev-holiday { background: rgba(239,68,68,0.1);  color: #b91c1c; }
    .ev-makeup  { background: rgba(245,158,11,0.12); color: #92400e; }
    .ev-event   { background: rgba(124,58,237,0.1);  color: #5b21b6; }
    .ev-exam    { background: rgba(8,145,178,0.1);   color: #0e7490; }
    .ev-info    { background: rgba(37,99,235,0.08);  color: #1d4ed8; }
    .ev-grade   { background: rgba(16,185,129,0.1);  color: #065f46; }

    /* ── 이벤트 목록 ── */
    .event-list {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 14px;
      overflow: hidden;
      box-shadow: var(--shadow);
    }

    .event-list-header {
      padding: 11px 18px;
      background: var(--surface2);
      border-bottom: 1px solid var(--border);
      font-family: 'DM Mono', monospace;
      font-size: 10px; color: var(--muted);
      letter-spacing: .15em; text-transform: uppercase;
    }

    .ev-item {
      display: flex; align-items: flex-start;
      gap: 13px; padding: 12px 18px;
      border-bottom: 1px solid rgba(0,0,0,0.04);
      transition: background .15s;
    }

    .ev-item:last-child { border-bottom: none; }
    .ev-item:hover { background: var(--surface2); }

    .ev-date-badge {
      font-family: 'DM Mono', monospace;
      font-size: 13px; font-weight: 700;
      min-width: 52px; color: var(--muted);
      flex-shrink: 0; padding-top: 1px;
    }

    .ev-dot {
      width: 8px; height: 8px; border-radius: 50%;
      flex-shrink: 0; margin-top: 5px;
    }

    .ev-content { flex: 1; }
    .ev-name { font-size: 14px; font-weight: 600; margin-bottom: 2px; }
    .ev-desc { font-size: 12px; color: var(--muted); line-height: 1.6; }

    /* ── 배너 ── */
    .day-banner {
      display: flex; align-items: center;
      gap: 14px; padding: 14px 18px;
      border-radius: 10px; margin-top: 12px;
      border: 1px solid;
    }

    .db-apr { background: var(--apr-light); border-color: var(--apr-bd); }
    .db-may { background: var(--may-light); border-color: var(--may-bd); }
    .db-jun { background: var(--jun-light); border-color: var(--jun-bd); }
    .db-jul { background: var(--jul-light); border-color: var(--jul-bd); }

    .db-num {
      font-family: 'DM Mono', monospace;
      font-size: 1.5rem; font-weight: 700;
      flex-shrink: 0;
    }

    .db-apr .db-num { color: var(--apr); }
    .db-may .db-num { color: var(--may); }
    .db-jun .db-num { color: var(--jun); }
    .db-jul .db-num { color: var(--jul); }

    .db-text { font-size: 13px; color: var(--muted); line-height: 1.6; }
    .db-text strong { color: var(--text); }

    /* ── 하단 요약 ── */
    .summary-box {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 16px;
      padding: 24px 28px;
      box-shadow: var(--shadow);
    }

    .summary-label {
      font-family: 'DM Mono', monospace;
      font-size: 10px; letter-spacing: .15em;
      text-transform: uppercase; color: var(--muted);
      margin-bottom: 18px;
    }

    .summary-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(200px,1fr));
      gap: 14px;
    }

    .sum-card {
      padding: 16px; border-radius: 10px;
      border: 1px solid;
    }

    .sc-title {
      font-size: 12px; font-weight: 700;
      margin-bottom: 8px;
    }

    .sc-body {
      font-size: 13px; color: #3a3a34;
      line-height: 1.8;
    }

    @media (max-width: 640px) {
      .cal-cell { min-height: 62px; padding: 4px; }
      .cal-date { font-size: 12px; width: 22px; height: 22px; }
      .ev-tag   { font-size: 9px; padding: 1px 4px; }
    }

    @keyframes fadeUp {
      from { opacity: 0; transform: translateY(18px); }
      to   { opacity: 1; transform: translateY(0); }
    }
  </style>
</head>
<body>

<!-- 헤더 -->
<div class="page-header">
  <div class="header-label">2026학년도 학사력</div>
  <h1>4월 · 5월 · 6월 · <span>7월</span></h1>
  <p class="header-sub">2026학년도 1학기 주요 일정 안내</p>
  <div class="month-tabs">
    <a href="#apr" class="mtab">4월</a>
    <a href="#may" class="mtab">5월</a>
    <a href="#jun" class="mtab">6월</a>
    <a href="#jul" class="mtab">7월</a>
  </div>
</div>

<div class="wrapper">

  <!-- 범례 -->
  <div class="legend">
    <div class="legend-item"><div class="legend-dot" style="background:var(--holiday);"></div>공휴일·휴일</div>
    <div class="legend-item"><div class="legend-dot" style="background:var(--makeup);"></div>보강일</div>
    <div class="legend-item"><div class="legend-dot" style="background:var(--exam);"></div>시험·평가</div>
    <div class="legend-item"><div class="legend-dot" style="background:var(--apr);"></div>수업 관련</div>
    <div class="legend-item"><div class="legend-dot" style="background:#10b981;"></div>성적·행정</div>
    <div class="legend-item"><div class="legend-dot" style="background:var(--jul);"></div>방학·휴무</div>
  </div>

  <!-- ══════════ 4월 ══════════ -->
  <div class="month-section" id="apr">
    <div class="month-header">
      <div class="month-badge mb-apr">APR</div>
      <div class="month-title">4월</div>
      <div class="month-count">30일</div>
    </div>

    <div class="cal-wrap">
      <div class="cal-head">
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div>
      </div>
      <div class="cal-grid">
        <!-- 4/1(수)부터 시작 — 앞 빈칸 3개(일,월,화) -->
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell"><div class="cal-date">1</div></div>
        <div class="cal-cell"><div class="cal-date">2</div></div>
        <div class="cal-cell"><div class="cal-date">3</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">4</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">5</div></div>
        <div class="cal-cell"><div class="cal-date">6</div></div>
        <div class="cal-cell"><div class="cal-date">7</div></div>
        <div class="cal-cell"><div class="cal-date">8</div></div>
        <div class="cal-cell"><div class="cal-date">9</div></div>
        <div class="cal-cell"><div class="cal-date">10</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">11</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">12</div></div>
        <div class="cal-cell"><div class="cal-date">13</div></div>
        <div class="cal-cell"><div class="cal-date">14</div></div>
        <div class="cal-cell"><div class="cal-date">15</div></div>
        <div class="cal-cell"><div class="cal-date">16</div></div>
        <div class="cal-cell"><div class="cal-date">17</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">18</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">19</div></div>
        <div class="cal-cell"><div class="cal-date">20</div></div>
        <div class="cal-cell"><div class="cal-date">21</div></div>
        <div class="cal-cell"><div class="cal-date">22</div></div>
        <div class="cal-cell"><div class="cal-date">23</div></div>
        <div class="cal-cell"><div class="cal-date">24</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">25</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">26</div></div>
        <div class="cal-cell"><div class="cal-date">27</div></div>
        <div class="cal-cell"><div class="cal-date">28</div></div>
        <div class="cal-cell"><div class="cal-date">29</div></div>
        <div class="cal-cell"><div class="cal-date">30</div></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
      </div>
    </div>

    <div class="event-list">
      <div class="event-list-header">📋 4월 주요 일정</div>
      <div class="ev-item">
        <div class="ev-date-badge">4월</div>
        <div class="ev-dot" style="background:var(--apr);"></div>
        <div class="ev-content">
          <div class="ev-name">5주차 ~ 9주차 정규 수업</div>
          <div class="ev-desc">공휴일 없이 전체 정규 수업 진행</div>
        </div>
      </div>
    </div>

    <div class="day-banner db-apr">
      <div class="db-num"></div>
      <div class="db-text"><strong>4월은 공휴일 없는 정상 수업 기간</strong>이에요. 5주차~9주차 수업이 빠짐없이 진행돼요.</div>
    </div>
  </div>

  <!-- ══════════ 5월 ══════════ -->
  <div class="month-section" id="may">
    <div class="month-header">
      <div class="month-badge mb-may">MAY</div>
      <div class="month-title">5월</div>
      <div class="month-count">31일</div>
    </div>

    <div class="cal-wrap">
      <div class="cal-head">
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div>
      </div>
      <div class="cal-grid">
        <!-- 5/1(금)부터 — 앞 빈칸 5개(일~목) -->
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <!-- 5/1 금 — 근로자의날 -->
        <div class="cal-cell is-holiday">
          <div class="cal-date">1</div>
          <span class="ev-tag ev-holiday">근로자의날</span>
          <span class="ev-tag ev-makeup">보강 6/12</span>
        </div>
        <div class="cal-cell is-sat"><div class="cal-date">2</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">3</div></div>
        <!-- 5/4 월 — 재량휴업일 -->
        <div class="cal-cell is-holiday">
          <div class="cal-date">4</div>
          <span class="ev-tag ev-holiday">재량휴업일</span>
          <span class="ev-tag ev-makeup">보강 6/15</span>
        </div>
        <!-- 5/5 화 — 어린이날 -->
        <div class="cal-cell is-holiday">
          <div class="cal-date">5</div>
          <span class="ev-tag ev-holiday">어린이날</span>
          <span class="ev-tag ev-makeup">보강 6/9</span>
        </div>
        <!-- 5/6 수 — 수업일수 60일 -->
        <div class="cal-cell">
          <div class="cal-date">6</div>
          <span class="ev-tag ev-info">수업일수 60일</span>
        </div>
        <div class="cal-cell"><div class="cal-date">7</div></div>
        <div class="cal-cell"><div class="cal-date">8</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">9</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">10</div></div>
        <div class="cal-cell"><div class="cal-date">11</div></div>
        <div class="cal-cell"><div class="cal-date">12</div></div>
        <div class="cal-cell"><div class="cal-date">13</div></div>
        <div class="cal-cell"><div class="cal-date">14</div></div>
        <div class="cal-cell"><div class="cal-date">15</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">16</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">17</div></div>
        <div class="cal-cell"><div class="cal-date">18</div></div>
        <div class="cal-cell"><div class="cal-date">19</div></div>
        <div class="cal-cell"><div class="cal-date">20</div></div>
        <div class="cal-cell"><div class="cal-date">21</div></div>
        <div class="cal-cell"><div class="cal-date">22</div></div>
        <div class="cal-cell is-sat">
          <div class="cal-date">23</div>
          <span class="ev-tag ev-info">수업일수 90일</span>
        </div>

        <div class="cal-cell is-sun"><div class="cal-date">24</div></div>
        <!-- 5/25 월 — 대체공휴일(부처님오신날) -->
        <div class="cal-cell is-holiday">
          <div class="cal-date">25</div>
          <span class="ev-tag ev-holiday">대체공휴일</span>
          <span class="ev-tag ev-holiday">부처님오신날</span>
          <span class="ev-tag ev-makeup">보강 6/16</span>
        </div>
        <!-- 5/26 화 — 일반 수업일 -->
        <div class="cal-cell">
          <div class="cal-date">26</div>
        </div>
        <div class="cal-cell"><div class="cal-date">27</div></div>
        <div class="cal-cell"><div class="cal-date">28</div></div>
        <div class="cal-cell"><div class="cal-date">29</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">30</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">31</div></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
      </div>
    </div>

    <div class="event-list">
      <div class="event-list-header">📋 5월 주요 일정</div>
      <div class="ev-item">
        <div class="ev-date-badge">5/1</div>
        <div class="ev-dot" style="background:var(--holiday);"></div>
        <div class="ev-content">
          <div class="ev-name">근로자의 날</div>
          <div class="ev-desc">공휴일 · 보강일 : 6월 12일(금)</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">5/4</div>
        <div class="ev-dot" style="background:var(--holiday);"></div>
        <div class="ev-content">
          <div class="ev-name">재량휴업일</div>
          <div class="ev-desc">휴업 · 보강일 : 6월 15일(월)</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">5/5</div>
        <div class="ev-dot" style="background:var(--holiday);"></div>
        <div class="ev-content">
          <div class="ev-name">어린이날</div>
          <div class="ev-desc">공휴일 · 보강일 : 6월 9일(화)</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">5/6</div>
        <div class="ev-dot" style="background:var(--apr);"></div>
        <div class="ev-content">
          <div class="ev-name">수업일수 60일 달성</div>
          <div class="ev-desc">1학기 누적 수업일수 60일</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">5/23</div>
        <div class="ev-dot" style="background:var(--apr);"></div>
        <div class="ev-content">
          <div class="ev-name">수업일수 90일 달성</div>
          <div class="ev-desc">1학기 누적 수업일수 90일</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">5/25</div>
        <div class="ev-dot" style="background:var(--holiday);"></div>
        <div class="ev-content">
          <div class="ev-name">부처님오신날 대체공휴일</div>
          <div class="ev-desc">공휴일 · 보강일 : 6월 16일(화)</div>
        </div>
      </div>
    </div>

    <div class="day-banner db-may">
      <div class="db-num">4일</div>
      <div class="db-text">
        <strong>5월 휴일 4일</strong> (근로자의날·재량휴업일·어린이날·대체공휴일)<br/>
        모든 보강은 6월에 진행돼요.
      </div>
    </div>
  </div>

  <!-- ══════════ 6월 ══════════ -->
  <div class="month-section" id="jun">
    <div class="month-header">
      <div class="month-badge mb-jun">JUN</div>
      <div class="month-title">6월</div>
      <div class="month-count">30일</div>
    </div>

    <div class="cal-wrap">
      <div class="cal-head">
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div>
      </div>
      <div class="cal-grid">
        <!-- 6/1(월)부터 — 앞 빈칸 1개(일) -->
        <div class="cal-cell empty"></div>
        <!-- 6/1 월 — 수업일수 90일 -->
        <div class="cal-cell">
          <div class="cal-date">1</div>
          <span class="ev-tag ev-info">수업일수 90일</span>
        </div>
        <div class="cal-cell"><div class="cal-date">2</div></div>
        <!-- 6/3 수 — 전국동시지방선거 -->
        <div class="cal-cell is-holiday">
          <div class="cal-date">3</div>
          <span class="ev-tag ev-holiday">지방선거</span>
          <span class="ev-tag ev-makeup">보강 6/11</span>
        </div>
        <div class="cal-cell"><div class="cal-date">4</div></div>
        <div class="cal-cell"><div class="cal-date">5</div></div>
        <!-- 6/6 토 — 현충일 -->
        <div class="cal-cell is-holiday">
          <div class="cal-date">6</div>
          <span class="ev-tag ev-holiday">현충일</span>
        </div>

        <div class="cal-cell is-sun"><div class="cal-date">7</div></div>
        <div class="cal-cell"><div class="cal-date">8</div></div>
        <!-- 6/9 화 — 보강(어린이날) -->
        <div class="cal-cell is-makeup">
          <div class="cal-date">9</div>
          <span class="ev-tag ev-makeup">보강(어린이날)</span>
        </div>
        <!-- 6/10 수 — 보강(개교기념일 3/18) -->
        <div class="cal-cell is-makeup">
          <div class="cal-date">10</div>
          <span class="ev-tag ev-makeup">보강(개교기념일)</span>
        </div>
        <!-- 6/11 목 — 보강(지방선거) -->
        <div class="cal-cell is-makeup">
          <div class="cal-date">11</div>
          <span class="ev-tag ev-makeup">보강(지방선거)</span>
        </div>
        <!-- 6/12 금 — 보강(근로자의날) -->
        <div class="cal-cell is-makeup">
          <div class="cal-date">12</div>
          <span class="ev-tag ev-makeup">보강(근로자의날)</span>
        </div>
        <div class="cal-cell is-sat"><div class="cal-date">13</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">14</div></div>
        <!-- 6/15 월 — 보강(재량휴업일) -->
        <div class="cal-cell is-makeup">
          <div class="cal-date">15</div>
          <span class="ev-tag ev-makeup">보강(재량휴업일)</span>
        </div>
        <!-- 6/16 화 — 보강(부처님오신날) -->
        <div class="cal-cell is-makeup">
          <div class="cal-date">16</div>
          <span class="ev-tag ev-makeup">보강(부처님오신날)</span>
        </div>
        <!-- 6/17 수 — 기말고사 시작 -->
        <div class="cal-cell is-exam">
          <div class="cal-date">17</div>
          <span class="ev-tag ev-exam">기말고사</span>
        </div>
        <div class="cal-cell is-exam">
          <div class="cal-date">18</div>
          <span class="ev-tag ev-exam">기말고사</span>
        </div>
        <div class="cal-cell is-exam">
          <div class="cal-date">19</div>
          <span class="ev-tag ev-exam">기말고사</span>
        </div>
        <div class="cal-cell is-sat"><div class="cal-date">20</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">21</div></div>
        <div class="cal-cell is-exam">
          <div class="cal-date">22</div>
          <span class="ev-tag ev-exam">기말고사</span>
        </div>
        <div class="cal-cell is-exam">
          <div class="cal-date">23</div>
          <span class="ev-tag ev-exam">기말고사</span>
        </div>
        <div class="cal-cell"><div class="cal-date">24</div></div>
        <div class="cal-cell"><div class="cal-date">25</div></div>
        <!-- 6/26 금 — 성적입력 시작 -->
        <div class="cal-cell">
          <div class="cal-date">26</div>
          <span class="ev-tag ev-grade">성적입력 시작</span>
        </div>
        <div class="cal-cell is-sat"><div class="cal-date">27</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">28</div></div>
        <div class="cal-cell">
          <div class="cal-date">29</div>
          <span class="ev-tag ev-grade">성적입력</span>
        </div>
        <div class="cal-cell">
          <div class="cal-date">30</div>
          <span class="ev-tag ev-grade">성적입력</span>
        </div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
      </div>
    </div>

    <div class="event-list">
      <div class="event-list-header">📋 6월 주요 일정</div>
      <div class="ev-item">
        <div class="ev-date-badge">6/3</div>
        <div class="ev-dot" style="background:var(--holiday);"></div>
        <div class="ev-content">
          <div class="ev-name">전국동시지방선거</div>
          <div class="ev-desc">선거일 휴일 · 보강일 : 6월 11일(목)</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">6/6</div>
        <div class="ev-dot" style="background:var(--holiday);"></div>
        <div class="ev-content">
          <div class="ev-name">현충일 (토요일)</div>
          <div class="ev-desc">공휴일</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">6/9~16</div>
        <div class="ev-dot" style="background:var(--makeup);"></div>
        <div class="ev-content">
          <div class="ev-name">보강 기간 (6일)</div>
          <div class="ev-desc">
            6/9(어린이날) · 6/10(개교기념일) · 6/11(지방선거)<br/>
            6/12(근로자의날) · 6/15(재량휴업일) · 6/16(부처님오신날 대체)
          </div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">6/17~23</div>
        <div class="ev-dot" style="background:var(--exam);"></div>
        <div class="ev-content">
          <div class="ev-name">기말고사</div>
          <div class="ev-desc">1학기 기말시험 기간</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">6/26~</div>
        <div class="ev-dot" style="background:#10b981;"></div>
        <div class="ev-content">
          <div class="ev-name">성적 입력 및 강의평가</div>
          <div class="ev-desc">기말고사 종료 후 성적 입력 및 강의평가 시작</div>
        </div>
      </div>
    </div>

    <div class="day-banner db-jun">
      <div class="db-num">6일</div>
      <div class="db-text">
        <strong>6월 보강 6일</strong> (9·10·11·12·15·16일)<br/>
        기말고사 6/17~23 · 성적입력 6/26~
      </div>
    </div>
  </div>

  <!-- ══════════ 7월 ══════════ -->
  <div class="month-section" id="jul">
    <div class="month-header">
      <div class="month-badge mb-jul">JUL</div>
      <div class="month-title">7월</div>
      <div class="month-count">31일</div>
    </div>

    <div class="cal-wrap">
      <div class="cal-head">
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div><div class="cal-head-cell"></div>
        <div class="cal-head-cell"></div>
      </div>
      <div class="cal-grid">
        <!-- 7/1(수)부터 — 앞 빈칸 3개(일,월,화) -->
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <div class="cal-cell empty"></div>
        <!-- 7/1 수 — 성적열람 및 정정 시작 -->
        <div class="cal-cell">
          <div class="cal-date">1</div>
          <span class="ev-tag ev-grade">성적열람·정정</span>
        </div>
        <div class="cal-cell">
          <div class="cal-date">2</div>
          <span class="ev-tag ev-grade">성적열람·정정</span>
        </div>
        <div class="cal-cell">
          <div class="cal-date">3</div>
          <span class="ev-tag ev-grade">성적열람·정정</span>
        </div>
        <div class="cal-cell is-sat"><div class="cal-date">4</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">5</div></div>
        <div class="cal-cell"><div class="cal-date">6</div></div>
        <div class="cal-cell"><div class="cal-date">7</div></div>
        <div class="cal-cell"><div class="cal-date">8</div></div>
        <div class="cal-cell"><div class="cal-date">9</div></div>
        <div class="cal-cell"><div class="cal-date">10</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">11</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">12</div></div>
        <div class="cal-cell"><div class="cal-date">13</div></div>
        <!-- 7/14~16 전과 신청, 재입학 신청 -->
        <div class="cal-cell">
          <div class="cal-date">14</div>
          <span class="ev-tag ev-event">전과·재입학 신청</span>
        </div>
        <div class="cal-cell">
          <div class="cal-date">15</div>
          <span class="ev-tag ev-event">전과·재입학 신청</span>
        </div>
        <div class="cal-cell">
          <div class="cal-date">16</div>
          <span class="ev-tag ev-event">전과·재입학 신청</span>
        </div>
        <div class="cal-cell"><div class="cal-date">17</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">18</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">19</div></div>
        <div class="cal-cell"><div class="cal-date">20</div></div>
        <div class="cal-cell"><div class="cal-date">21</div></div>
        <div class="cal-cell"><div class="cal-date">22</div></div>
        <div class="cal-cell"><div class="cal-date">23</div></div>
        <div class="cal-cell"><div class="cal-date">24</div></div>
        <div class="cal-cell is-sat"><div class="cal-date">25</div></div>

        <div class="cal-cell is-sun"><div class="cal-date">26</div></div>
        <!-- 7/27~31 하계 집중휴무기간 -->
        <div class="cal-cell is-holiday">
          <div class="cal-date">27</div>
          <span class="ev-tag ev-event">하계휴무(예정)</span>
        </div>
        <div class="cal-cell is-holiday">
          <div class="cal-date">28</div>
          <span class="ev-tag ev-event">하계휴무(예정)</span>
        </div>
        <div class="cal-cell is-holiday">
          <div class="cal-date">29</div>
          <span class="ev-tag ev-event">하계휴무(예정)</span>
        </div>
        <div class="cal-cell is-holiday">
          <div class="cal-date">30</div>
          <span class="ev-tag ev-event">하계휴무(예정)</span>
        </div>
        <div class="cal-cell is-holiday">
          <div class="cal-date">31</div>
          <span class="ev-tag ev-event">하계휴무(예정)</span>
        </div>
      </div>
    </div>

    <div class="event-list">
      <div class="event-list-header">📋 7월 주요 일정</div>
      <div class="ev-item">
        <div class="ev-date-badge">7/1~3</div>
        <div class="ev-dot" style="background:#10b981;"></div>
        <div class="ev-content">
          <div class="ev-name">성적 열람 및 정정 · 강의평가</div>
          <div class="ev-desc">1학기 최종 성적 확인 및 정정 기간</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">7/14~16</div>
        <div class="ev-dot" style="background:var(--event);"></div>
        <div class="ev-content">
          <div class="ev-name">전과 신청 · 재입학 신청</div>
          <div class="ev-desc">학적 변동 관련 신청 기간</div>
        </div>
      </div>
      <div class="ev-item">
        <div class="ev-date-badge">7/27~31</div>
        <div class="ev-dot" style="background:var(--jul);"></div>
        <div class="ev-content">
          <div class="ev-name">하계 집중휴무기간 (예정)</div>
          <div class="ev-desc">하계 방학 집중휴무 기간 (예정)</div>
        </div>
      </div>
    </div>

    <div class="day-banner db-jul">
      <div class="db-num">🌊</div>
      <div class="db-text">
        <strong>7월은 1학기 마무리 기간</strong>이에요.<br/>
        성적정정(1~3일) · 전과신청(14~16일) · 하계휴무(27~31일)
      </div>
    </div>
  </div>

  <!-- 하단 요약 -->
  <div class="summary-box">
    <div class="summary-label">📌 4~7월 핵심 요약</div>
    <div class="summary-grid">
      <div class="sum-card" style="background:var(--apr-light);border-color:var(--apr-bd);">
        <div class="sc-title" style="color:var(--apr);">4월 — 정규 수업</div>
        <div class="sc-body">공휴일 없음<br/>5주차~9주차 정상 수업</div>
      </div>
      <div class="sum-card" style="background:var(--may-light);border-color:var(--may-bd);">
        <div class="sc-title" style="color:var(--may);">5월 — 공휴일 4일</div>
        <div class="sc-body">
          5/1 근로자의날<br/>
          5/4 재량휴업일<br/>
          5/5 어린이날<br/>
          5/25 대체공휴일(부처님오신날)
        </div>
      </div>
      <div class="sum-card" style="background:var(--jun-light);border-color:var(--jun-bd);">
        <div class="sc-title" style="color:var(--jun);">6월 — 보강·기말</div>
        <div class="sc-body">
          6/9~16 보강 6일<br/>
          6/17~23 기말고사<br/>
          6/26~ 성적입력
        </div>
      </div>
      <div class="sum-card" style="background:var(--jul-light);border-color:var(--jul-bd);">
        <div class="sc-title" style="color:var(--jul);">7월 — 학기 마무리</div>
        <div class="sc-body">
          7/1~3 성적열람·정정<br/>
          7/14~16 전과·재입학 신청<br/>
          7/27~31 하계 집중휴무(예정)
        </div>
      </div>
    </div>
  </div>

</div>

<script>
  const tabs = document.querySelectorAll('.mtab');
  const ids  = ['apr','may','jun','jul'];

  window.addEventListener('scroll', () => {
    let current = '';
    ids.forEach(id => {
      const el = document.getElementById(id);
      if (el && window.scrollY >= el.offsetTop - 130) current = id;
    });
    tabs.forEach((t,i) => t.classList.toggle('active', ids[i] === current));
  });
</script>
</body>
</html>

결과와 배운 점

원본 파일도 얼마나 복잡하게 되어 있는지, claude도 헛갈리더라구요.

만들어서 보내드렸는데 교수님들이 좋아하셨습니다.

좋은 소스 주셔서 감사합니다.

밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.