@charset "UTF-8";
/* ==========================================================================
   게임 이벤트 (/game-event) 전용 스타일 — 프로토타입
   ※ 더미 데이터 단계. 확정 후 공통 CSS 규칙에 맞춰 정리 예정
   ========================================================================== */

/* ==========================================================================
   테마 — 라이트(기본) / 다크
   <html data-ge-theme="dark"> 가 붙으면 다크로 전환된다.
   이 CSS는 /game-event 페이지에서만 로드되므로 다른 페이지엔 영향이 없다.
   ========================================================================== */
:root {
  --ge-accent: #3d6dfb;
  --ge-accent-soft: #eaf0ff;
  --ge-accent-line: #cddaff;
  --ge-text: #1b1d22;
  --ge-text-sub: #6b7280;
  --ge-text-body: #3a3f4a;
  --ge-line: #e5e7eb;
  --ge-line-hover: #d7dbe3;
  --ge-bg-soft: #f7f8fa;
  --ge-surface: #ffffff;
  --ge-surface-2: #fcfcfd;
  --ge-page: #ffffff;
  --ge-shadow: rgba(0,0,0,.08);
  --ge-skel: #eceef2;
  --ge-skel-shine: rgba(255,255,255,.65);
  --ge-daynum-off: #c9ced8;
  --ge-noimg-a: #f4f5f7;
  --ge-noimg-b: #eef0f3;
  --ge-noimg-fg: #b6bcc7;
  --ge-c-blue-bg:   #eaf0ff;  --ge-c-blue:   #2f56c9;
  --ge-c-green-bg:  #e9f7ee;  --ge-c-green:  #1f7a45;
  --ge-c-amber-bg:  #fff4e0;  --ge-c-amber:  #a55f00;
  --ge-c-red-bg:    #fdecec;  --ge-c-red:    #c0393d;
  --ge-c-purple-bg: #f3eefe;  --ge-c-purple: #6b46c1;
  --ge-c-emerald-bg: #e6f7f0; --ge-c-emerald: #0e8a5f;
  --ge-sun: #e5484d;
  --ge-sat: #3b82f6;
  --ge-radius: 12px;
}

:root[data-ge-theme="dark"] {
  --ge-accent: #6c8fff;
  --ge-accent-soft: rgba(108,143,255,.15);
  --ge-accent-line: rgba(108,143,255,.35);
  --ge-text: #e7e9ee;
  --ge-text-sub: #98a1b3;
  --ge-text-body: #c2c8d4;
  --ge-line: #2b3140;
  --ge-line-hover: #3c4356;
  --ge-bg-soft: #1a1e27;
  --ge-surface: #171b23;
  --ge-surface-2: #141821;
  --ge-page: #0f1219;
  --ge-shadow: rgba(0,0,0,.45);
  --ge-skel: #232833;
  --ge-skel-shine: rgba(255,255,255,.06);
  --ge-daynum-off: #414a5c;
  --ge-noimg-a: #1b202a;
  --ge-noimg-b: #20262f;
  --ge-noimg-fg: #5d6675;
  --ge-c-blue-bg:   rgba(108,143,255,.18); --ge-c-blue:   #9db4ff;
  --ge-c-green-bg:  rgba(52,199,123,.16);  --ge-c-green:  #6ee7a8;
  --ge-c-amber-bg:  rgba(245,158,11,.18); --ge-c-amber:  #fbbf24;
  --ge-c-red-bg:    rgba(229,72,77,.18);   --ge-c-red:    #ff9ea1;
  --ge-c-purple-bg: rgba(167,139,250,.18); --ge-c-purple: #c4b1fd;
  --ge-c-emerald-bg: rgba(16,185,129,.18); --ge-c-emerald: #34d399;
  --ge-sun: #ff8b8e;
  --ge-sat: #7ea9ff;
}

/* 페이지 배경 */
body { background: var(--ge-page); }


.ge-wrap {
  max-width: 1200px;
  margin: 0 auto;
  padding: 24px 16px 80px;
  color: var(--ge-text);
  font-family: 'Pretendard', 'Apple SD Gothic Neo', sans-serif;
  box-sizing: border-box;
}
.ge-wrap * { box-sizing: border-box; }
.ge-wrap a { color: inherit; text-decoration: none; }

/* Vue 렌더 전 {{ }} 원본이 잠깐 노출되는 것 방지 */
[v-cloak] { display: none !important; }


/* 화면에서만 숨기고 검색엔진·스크린리더에는 그대로 노출.
   display:none 은 크롤러가 가치를 낮게 보거나 무시할 수 있어 사용하지 않는다. */
.ge-sronly {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  clip-path: inset(50%);
  white-space: nowrap;
}

/* ---------- 레이아웃 ----------
   광고 열은 사이트 공통 규격(#SNB 250px)을 그대로 사용.
   본문을 화면 정중앙에 두기 위해 좌측에 광고와 같은 폭의 빈 공간을
   ::before 로 만든다(마크업 추가 없이 6개 페이지 일괄 적용).
     [빈 250] [본문] [광고 250]  → 본문이 정중앙
   (다른 페이지의 .layout_fix 는 75%/1290px 이며, 그쪽은 건드리지 않음)
   광고는 사이트 공통 ad.js 가 .snb-content.snb-num01 에 주입(980px 초과에서만). */
.ge-shell {
  width: 100%;
  max-width: 1720px;      /* 빈열250 + 본문 + 광고250 + gap60 을 담을 폭 */
  margin: 0 auto;
  padding: 0 16px;
  box-sizing: border-box; /* width:100%+padding 이 뷰포트를 넘겨 모바일 가로 오버플로우 나던 것 방지 */
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  gap: 30px;
  align-items: flex-start;
}
.ge-shell > .ge-wrap {
  flex: 1 1 auto; min-width: 0;
  max-width: none; margin: 0; padding: 8px 0 80px;
}
/* 좌측 균형용 빈 공간 — 본문을 정중앙으로 밀어준다 */
.ge-shell::before { content: ''; width: 250px; flex: 0 0 250px; }
.ge-aside { width: 250px; flex: 0 0 250px; padding-top: 8px; }

.ge-aside .snb-content-wrap { position: sticky; top: 20px; width: 100%; }
.ge-aside .snb-content.snb-num01 {
  display: flex; flex-direction: column; align-items: center;
  /* overflow:hidden 이면 배너가 잘린다 → 자르지 않는다 */
}
/* ad.js 가 img 에 width:300px;height:600px;max-width:unset 을 인라인으로 박는다.
   SNB 폭(250px)보다 커서 넘치므로 !important 로 열 너비에 맞춘다(비율 유지). */
.ge-aside .snb-content.snb-num01 a { display: block; width: 100%; }
.ge-aside .snb-content.snb-num01 img {
  width: 100% !important; height: auto !important; max-width: 100% !important;
  border-radius: 10px; display: block;
}

/* 빈 열까지 두면 본문이 너무 좁아지는 폭 → 빈 열만 제거 (본문 + 광고) */
@media (max-width: 1400px) {
  .ge-shell { max-width: 1440px; }
  .ge-shell::before { display: none; }
}
/* ad.js 가 980px 이하에서는 배너를 주입하지 않으므로 광고 열도 접는다 */
@media (max-width: 980px) {
  .ge-shell { padding: 0 12px; }
  .ge-aside { display: none; }
}

/* ---------- 페이지 헤더 ---------- */
.ge-head { padding: 8px 0 20px; border-bottom: 1px solid var(--ge-line); margin-bottom: 24px; }
.ge-head h1 { font-size: 28px; font-weight: 800; letter-spacing: -0.5px; margin: 0 0 8px; }
.ge-head p { font-size: 14px; color: var(--ge-text-sub); line-height: 1.6; margin: 0; }

/* ---------- 히어로: [배너 2fr | 추천카드 1fr] ---------- */
/* 추천열은 350px 고정 — 1fr 은 minmax(auto,1fr) 이라 긴 제목에 트랙이 늘어남(가로 커짐).
   배너는 minmax(0,1fr) 로 나머지 차지(내용이 폭을 밀지 못하게). */
.ge-hero { display: grid; grid-template-columns: minmax(0, 1fr) 350px; gap: 16px; margin-bottom: 24px; }

/* 배너 캐러셀 */
/* 배너: 항상 760:340 고정 비율 (align-self:start 로 그리드가 추천열 높이에 맞춰 늘리지 않게).
   폭은 반응형이되 높이는 폭×(340/760) 로 비율 유지 → 늘었다 줄었다 안 함. */
.ge-banner { position: relative; border-radius: var(--ge-radius); overflow: hidden; aspect-ratio: 760 / 340; align-self: start; background: var(--ge-bg-soft); }
.ge-slide {
  position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end;
  padding: 28px; opacity: 0; transition: opacity .5s ease; background-size: cover; background-position: center;
}
.ge-slide.on { opacity: 1; }
.ge-slide > * { position: relative; z-index: 1; }

/* 관리자 등록 이미지 배너 — 이미지 자체가 디자인이라 오버레이/그라데이션 없음 */
.ge-slide.img { padding: 0; }
.ge-slide.img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ge-slide h2 { color: #fff; font-size: 25px; font-weight: 800; margin: 0 0 7px; letter-spacing: -.4px; }
.ge-slide p { color: rgba(255,255,255,.9); font-size: 14px; margin: 0; }
.ge-dots { position: absolute; right: 16px; bottom: 16px; display: flex; gap: 7px; z-index: 2; }
.ge-dots button {
  width: 8px; height: 8px; padding: 0; border: 0; border-radius: 50%;
  background: rgba(255,255,255,.45); cursor: pointer; transition: .2s;
}
.ge-dots button.on { background: #fff; width: 22px; border-radius: 4px; }
.ge-bnav {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 34px; height: 34px; border: 0; border-radius: 50%; cursor: pointer;
  background: rgba(0,0,0,.32); color: #fff; font-size: 17px; line-height: 1;
}
.ge-bnav:hover { background: rgba(0,0,0,.5); }
.ge-bnav.prev { left: 12px; } .ge-bnav.next { right: 12px; }


/* ---------- 추천 카드 (배너 우측, 2장) ----------
   구성: [썸네일 + 뱃지/제목/날짜] → 구분선 → '출시까지 남은 시간' → 카운트다운 박스 */
.ge-featured { display: flex; flex-direction: column; gap: 10px; }
.ge-fcard {
  display: flex; flex-direction: column; flex: 1;
  padding: 11px 12px; border: 1px solid var(--ge-line); border-radius: 12px;
  background: var(--ge-surface); transition: .15s;
}
.ge-fcard:hover { border-color: var(--ge-accent); box-shadow: 0 4px 14px var(--ge-shadow); }
.ge-fcard-skel { position: relative; overflow: hidden; min-height: 172px; pointer-events: none; }

.ge-fcard-top { display: flex; gap: 10px; align-items: flex-start; }
.ge-fthumb {
  width: 46px; height: 46px; flex-shrink: 0;
  border-radius: 10px; overflow: hidden; background: var(--ge-bg-soft);
}
.ge-fthumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ge-fthumb .ge-noimg { font-size: 10px; }

.ge-fbody { min-width: 0; flex: 1; }
.ge-fbadges { margin-bottom: 5px; }
.ge-fbody h4 {
  font-size: 14px; font-weight: 700; margin: 0 0 4px; line-height: 1.4;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ge-fdate { font-size: 12px; margin: 0; }

/* 구분선 + 라벨 */
.ge-fcount-label {
  display: flex; align-items: center; gap: 6px;
  margin-top: 9px; padding-top: 8px; border-top: 1px solid var(--ge-line);
  font-size: 11.5px; font-weight: 600;
}
.ge-fcount-label svg { flex-shrink: 0; opacity: .8; }

/* 카운트다운 박스 */
.ge-fcount-box {
  margin-top: 7px; padding: 9px 10px; border-radius: 9px;
  background: var(--ge-bg-soft); text-align: center;
  font-size: 15px; font-weight: 800; letter-spacing: .3px;
  font-variant-numeric: tabular-nums;
}
.ge-fcount-box.live { color: var(--ge-c-red) !important; }

/* 남은 시간 분리 표기 (DAYS : HOURS : MIN : SEC) */
.ge-fclock { display: flex; align-items: center; justify-content: space-between; gap: 4px; margin-top: 7px; }
.ge-fclock .u {
  flex: 1; text-align: center; padding: 6px 2px 5px;
  border-radius: 9px; background: var(--ge-bg-soft);
}
.ge-fclock .u strong {
  display: block; font-size: 16px; font-weight: 800; line-height: 1.1;
  font-variant-numeric: tabular-nums; letter-spacing: .5px;
}
.ge-fclock .u span {
  display: block; margin-top: 2px; font-size: 8.5px; font-weight: 700;
  letter-spacing: .6px; color: var(--ge-text-sub);
}
.ge-fclock i {
  font-style: normal; font-size: 13px; font-weight: 700;
  color: var(--ge-text-sub); opacity: .6; flex-shrink: 0;
}
.ge-fclock.live .u strong { color: var(--ge-c-red); }
.ge-skel { display: inline-block; width: 92px; height: 14px; border-radius: 3px; background: var(--ge-skel); }

/* 상세 페이지 사전예약 카운트다운 */
.ge-prereg {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: 15px 18px; border-radius: 10px; background: var(--ge-accent-soft);
  border: 1px solid var(--ge-accent-line); margin-bottom: 18px;
}
.ge-prereg .label { font-size: 13px; font-weight: 700; color: var(--ge-accent); }
.ge-prereg .clock { display: flex; gap: 8px; }
.ge-prereg .unit { text-align: center; min-width: 52px; background: var(--ge-surface); border-radius: 7px; padding: 7px 6px; }
.ge-prereg .unit strong { display: block; font-size: 19px; font-weight: 800; font-variant-numeric: tabular-nums; }
.ge-prereg .unit span { font-size: 10.5px; color: var(--ge-text-sub); }
.ge-prereg .none { font-size: 13.5px; color: var(--ge-text-sub); font-weight: 600; }

/* ---------- 헤더 '게임 이벤트' 활성 표시 ----------
   사이트 기본 활성색(var(--ge-accent))과 동일하게. 전역 CSS는 수정하지 않고
   JS(GE.markHeaderActive)가 부여한 클래스에만 적용한다. */
.header .inner .txt_menu .one li a.ge-nav-on { color: #74FFE6 !important; }
.m_header_wrap .header_menu li a.ge-nav-on { color: #74FFE6 !important; }

/* ---------- 서브 카테고리 바 ----------
   헤더 아래 배너 영역을 살짝 파고들어 사이트 네이티브 카테고리처럼 보이게 한다.
   색상은 헤더 서브메뉴와 동일 톤(#F5F5F5 / 활성 var(--ge-accent)).
   ※ 전역 CSS·헤더 파일은 건드리지 않고 이 페이지 안에서만 처리 */
.ge-subnav {
  position: relative; z-index: 5;
  margin-top: 0; background: var(--ge-surface); border-bottom: 1px solid var(--ge-line);
}
/* PC 헤더(≥1201px)일 때만 배너에 겹쳐 올린다. 사이트가 1200px 에서 모바일 헤더로 전환됨 */
@media (min-width: 1201px) {
  .ge-subnav { margin-top: -58px; background: none; border-bottom: 0; }
}
.ge-subnav-in {
  max-width: 1200px; margin: 0 auto; padding: 0 16px;
  height: 58px; display: flex; align-items: center; gap: 30px;
}
.ge-subnav a {
  color: #F5F5F5; font-size: 15px; font-weight: 600; line-height: 1;
  padding-bottom: 5px; border-bottom: 3px solid transparent;
  white-space: nowrap; transition: .15s;
}
.ge-subnav a:hover { color: #74FFE6; }
.ge-subnav a.on { color: #74FFE6; font-weight: 700; border-bottom-color: #74FFE6; }

/* 1250px 이하 = 사이트 규칙상 상단 배너(.pg_short)가 사라지는 구간.
   파고들 영역이 없으므로 일반 흐름의 흰 배경 바로 전환 */
@media (max-width: 1200px) {
  .ge-subnav-in { height: 52px; gap: 22px; overflow-x: auto; }
  .ge-subnav a { color: var(--ge-text-sub); font-size: 14px; }
  .ge-subnav a:hover { color: var(--ge-accent); }
  .ge-subnav a.on { color: var(--ge-accent); border-bottom-color: var(--ge-accent); }
}

/* ---------- 카테고리 원형 필터 ---------- */
.ge-cats {
  display: flex; flex-wrap: nowrap;       /* 항상 1줄 */
  gap: 4px 10px; margin: 4px auto 20px;
  width: max-content; max-width: 100%;    /* 들어가면 가운데, 넘치면 100%로 잡고 스크롤 */
  overflow-x: auto;
  justify-content: flex-start;
}
.ge-cat {
  display: flex; flex-direction: column; align-items: center; gap: 7px;
  width: 74px; padding: 8px 0; border: 0; background: none; cursor: pointer;
}
.ge-cat .ic {
  width: 48px; height: 48px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--ge-line); color: var(--ge-text-sub);
  background: var(--ge-surface); transition: .15s;
}
.ge-cat em {
  font-style: normal; font-size: 12px; font-weight: 600;
  color: var(--ge-text-sub); transition: .15s; white-space: nowrap;
}
.ge-cat:hover .ic { border-color: var(--ge-line-hover); color: var(--ge-text); }
.ge-cat.on .ic {
  border-color: var(--ge-accent); color: var(--ge-accent);
  box-shadow: 0 0 0 3px var(--ge-accent-soft);
}
.ge-cat.on em { color: var(--ge-accent) !important; font-weight: 700; }

/* ---------- 뷰 전환 ---------- */
.ge-viewtoggle-row { display: flex; justify-content: flex-end; margin-bottom: 14px; }
.ge-viewtoggle { display: flex; border: 1px solid var(--ge-line); border-radius: 8px; overflow: hidden; }
.ge-viewtoggle button {
  padding: 8px 16px; border: 0; background: var(--ge-surface); font-size: 13px; font-weight: 600;
  color: var(--ge-text-sub); cursor: pointer;
}
.ge-viewtoggle button.on { background: var(--ge-accent); color: #fff; }

/* ---------- 월 이동 ---------- */
.ge-monthbar { display: flex; align-items: center; justify-content: center; gap: 14px; margin: 4px 0 16px; position: relative; }
.ge-monthbar button.nav {
  width: 32px; height: 32px; border: 1px solid var(--ge-line); background: var(--ge-surface);
  border-radius: 8px; cursor: pointer; font-size: 15px; color: var(--ge-text-sub);
}
.ge-monthbar button.nav:hover { border-color: var(--ge-accent); color: var(--ge-accent); }
/* '오늘로' — 이번 달이 아닐 때만 노출 */
.ge-today {
  margin-left: 4px; padding: 7px 14px; border-radius: 8px; cursor: pointer;
  border: 1px solid var(--ge-accent); background: var(--ge-accent-soft);
  color: var(--ge-accent) !important; font-size: 12.5px; font-weight: 700;
}
.ge-today:hover { background: var(--ge-accent); color: #fff !important; }
.ge-monthbar strong { font-size: 19px; font-weight: 800; min-width: 130px; text-align: center; }

/* ---------- 캘린더 ---------- */
.ge-cal { border: 1px solid var(--ge-line); border-radius: var(--ge-radius); overflow: hidden; background: var(--ge-surface); }
.ge-cal-dow, .ge-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); }
.ge-cal-dow div {
  padding: 11px 0; text-align: center; font-size: 12px; font-weight: 700;
  color: var(--ge-text-sub); background: var(--ge-bg-soft); border-bottom: 1px solid var(--ge-line);
}
.ge-cal-dow div:first-child { color: var(--ge-sun); }
.ge-cal-dow div:last-child { color: var(--ge-sat); }

.ge-cell {
  min-height: 116px; padding: 7px 7px 9px; border-right: 1px solid var(--ge-line);
  border-bottom: 1px solid var(--ge-line); background: var(--ge-surface); overflow: hidden;
}
.ge-cell:nth-child(7n) { border-right: 0; }
.ge-cell.other { background: var(--ge-surface-2); }
.ge-cell.other .ge-daynum { color: var(--ge-daynum-off); }
.ge-cell.today .ge-daynum {
  background: var(--ge-accent); color: #fff; border-radius: 50%;
  width: 22px; height: 22px; display: inline-flex; align-items: center; justify-content: center;
}
.ge-daynum { font-size: 12px; font-weight: 700; color: var(--ge-text-sub); display: block; margin-bottom: 5px; }

.ge-pill {
  display: block; font-size: 11px; line-height: 1.35; padding: 3px 6px; margin-bottom: 3px;
  border-radius: 5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  font-weight: 600;
}
/* 캘린더 안 마커는 표시 전용 — 클릭은 셀이 처리 */
.ge-cell .ge-pill { cursor: inherit; pointer-events: none; }
/* 날짜 패널 안의 마커는 행 전체가 링크이므로 그대로 */
.ge-dayrow .ge-pill { pointer-events: none; }
.ge-pill.release   { background: var(--ge-c-blue-bg);   color: var(--ge-c-blue); }
.ge-pill.prestart  { background: var(--ge-c-green-bg);  color: var(--ge-c-green); }
.ge-pill.preend    { background: var(--ge-c-red-bg);    color: var(--ge-c-red); }
.ge-pill.event     { background: var(--ge-c-purple-bg); color: var(--ge-c-purple); }
.ge-more { font-size: 11px; color: var(--ge-text-sub); padding-left: 4px; }

.ge-legend { display: flex; gap: 14px; flex-wrap: wrap; margin: 4px 0 12px; font-size: 12px; color: var(--ge-text-sub); }
/* 모바일: 범례 5개가 2줄로 넘치므로 폰트·간격 줄이고 각 항목은 축소·줄바꿈 금지 → 1줄 유지 */
@media (max-width: 640px) {
  .ge-legend { gap: 7px; font-size: 10px; flex-wrap: nowrap; }
  .ge-legend span { gap: 3px; flex-shrink: 0; white-space: nowrap; }
  .ge-legend i { width: 8px; height: 8px; }
}
.ge-legend span { display: inline-flex; align-items: center; gap: 5px; }
.ge-legend i { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }

/* ---------- 카드 리스트 ---------- */
.ge-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(228px, 1fr)); gap: 18px; }
.ge-card {
  border: 1px solid var(--ge-line); border-radius: var(--ge-radius); overflow: hidden;
  background: var(--ge-surface); transition: .18s; display: flex; flex-direction: column;
}
.ge-card:hover { transform: translateY(-3px); box-shadow: 0 8px 22px var(--ge-shadow); border-color: var(--ge-line-hover); }
.ge-thumb { position: relative; aspect-ratio: 16/9; background: var(--ge-bg-soft); overflow: hidden; }
.ge-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* 이미지 없을 때 플레이스홀더 (썸네일·상세·목록 공용) */
.ge-noimg {
  width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;
  font-size: 12px; color: var(--ge-noimg-fg); background: repeating-linear-gradient(45deg,var(--ge-noimg-a),var(--ge-noimg-a) 10px,var(--ge-noimg-b) 10px,var(--ge-noimg-b) 20px);
}
.ge-dday {
  position: absolute; top: 8px; left: 8px; padding: 4px 9px; border-radius: 6px;
  background: rgba(20,22,28,.82); color: #fff; font-size: 11px; font-weight: 700;
}
.ge-dday.soon { background: #e5484d; }
.ge-card-body { padding: 13px 13px 15px; flex: 1; display: flex; flex-direction: column; }
.ge-badges { display: flex; gap: 5px; flex-wrap: wrap; margin-bottom: 7px; }
.ge-badge {
  font-size: 11px; font-weight: 700; padding: 3px 8px; border-radius: 5px;
  background: var(--ge-bg-soft); color: var(--ge-text-sub);
  white-space: nowrap;   /* '신서버 · 이벤트' 처럼 긴 라벨이 2줄로 깨지지 않게 */
}
.ge-badge.cat { background: var(--ge-accent-soft); color: var(--ge-accent); }
.ge-badge.pre { background: var(--ge-c-amber-bg); color: var(--ge-c-amber); }
.ge-card h3 { font-size: 15px; font-weight: 700; margin: 0 0 5px; line-height: 1.4; }
.ge-card .date { font-size: 12.5px; color: var(--ge-text-sub); margin: 0 0 8px; }
.ge-card .desc {
  font-size: 12.5px; color: var(--ge-text-sub); line-height: 1.6; margin: 0;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* ---------- 뉴스 / 가이드 리스트 ---------- */
/* 뉴스/신작총정리 목록 카드 (gcalen postCard 구조)
   날짜(강조색)+출처 → 제목 → 설명 → 태그. 썸네일 있으면 좌측, 없으면 본문만 */
.ge-posts { display: flex; flex-direction: column; gap: 14px; }
.ge-post {
  display: block; border: 1px solid var(--ge-line);
  border-radius: var(--ge-radius); background: var(--ge-surface); transition: .18s; overflow: hidden;
}
.ge-post:hover { border-color: var(--ge-accent); box-shadow: 0 6px 18px var(--ge-shadow); }
/* 썸네일 있는 카드 = 좌우 배치 */
.ge-post.has-thumb { display: flex; align-items: stretch; }
.ge-post-thumb { width: 200px; flex-shrink: 0; overflow: hidden; background: var(--ge-bg-soft); }
.ge-post-thumb img { width: 100%; height: 100%; min-height: 130px; object-fit: cover; display: block; }
.ge-post-body { flex: 1; min-width: 0; padding: 16px 18px; }
.ge-post-date { color: var(--ge-accent); font-size: 12.5px; font-weight: 700; margin-bottom: 8px; display: flex; align-items: center; gap: 8px; }
.ge-post-date .src { color: var(--ge-text-sub); font-weight: 600; padding: 2px 8px; background: var(--ge-bg-soft); border-radius: 5px; font-size: 11px; }
.ge-post-body h3 { font-size: 18px; font-weight: 700; color: var(--ge-text) !important; margin: 0 0 7px; line-height: 1.45; }
.ge-post-body .summary {
  font-size: 13.5px; color: var(--ge-text-sub) !important; line-height: 1.65; margin: 0 0 11px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.ge-post-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.ge-post-tags span { font-size: 11.5px; color: var(--ge-text-sub); border: 1px solid var(--ge-line); border-radius: 999px; padding: 2px 9px; }
/* 관련 글(상세 하단) 컴팩트 */
.ge-post-meta { display: flex; gap: 10px; align-items: center; font-size: 12px; color: var(--ge-text-sub); flex-wrap: wrap; }
.ge-source { padding: 3px 8px; background: var(--ge-bg-soft); border-radius: 5px; font-weight: 600; }

@media (max-width: 640px) {
  .ge-post.has-thumb { flex-direction: column; }
  .ge-post-thumb { width: 100%; aspect-ratio: 16/9; }
  .ge-post-thumb img { min-height: 0; }
}

/* ---------- 쿠폰 ---------- */
.ge-coupon-game {
  border: 1px solid var(--ge-line); border-radius: var(--ge-radius);
  background: var(--ge-surface); margin-bottom: 18px; overflow: hidden;
}
.ge-coupon-head { display: flex; align-items: center; gap: 13px; padding: 15px 17px; border-bottom: 1px solid var(--ge-line); }
.ge-coupon-head img { width: 46px; height: 46px; border-radius: 9px; object-fit: cover; background: var(--ge-bg-soft); }
.ge-coupon-head h3 { font-size: 16px; font-weight: 700; margin: 0 0 3px; }
.ge-coupon-head .cnt { font-size: 12px; color: var(--ge-text-sub); }
.ge-code-row {
  display: flex; align-items: center; gap: 12px; padding: 12px 17px;
  border-bottom: 1px solid var(--ge-line); font-size: 13.5px;
}
.ge-code-row:last-child { border-bottom: 0; }
.ge-code-row.expired { opacity: .5; }
.ge-code {
  font-family: 'Consolas', monospace; font-weight: 700; font-size: 14px;
  background: var(--ge-bg-soft); padding: 6px 11px; border-radius: 6px; letter-spacing: .5px;
}
.ge-reward { flex: 1; color: var(--ge-text-sub); min-width: 0; }
.ge-copy {
  padding: 6px 13px; border: 1px solid var(--ge-line); background: var(--ge-surface); border-radius: 6px;
  font-size: 12px; font-weight: 600; cursor: pointer; color: var(--ge-text-sub); white-space: nowrap;
}
.ge-copy:hover { border-color: var(--ge-accent); color: var(--ge-accent); }
.ge-exp { font-size: 11.5px; color: var(--ge-text-sub); white-space: nowrap; }
.ge-exp.end { color: var(--ge-c-red); font-weight: 600; }

/* ---------- 상세 ---------- */
.ge-detail-hero { display: flex; gap: 26px; margin-bottom: 22px; flex-wrap: wrap; }
.ge-detail-hero .thumb { position: relative; width: 380px; max-width: 100%; aspect-ratio: 16/9; border-radius: var(--ge-radius); overflow: hidden; background: var(--ge-bg-soft); }
.ge-detail-hero .thumb .bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: blur(18px) brightness(.82); transform: scale(1.15); }
.ge-detail-hero .thumb .fg { position: relative; z-index: 1; width: 100%; height: 100%; object-fit: contain; display: block; }
.ge-detail-info { flex: 1; min-width: 260px; }
.ge-detail-info h1 { font-size: 26px; font-weight: 800; line-height: 1.3; margin: 8px 0 4px; }
.ge-detail-info .en { font-size: 14px; line-height: 1.4; color: var(--ge-text-sub); margin: 0; }
/* D-day 알약 (헤더 뱃지 줄) */
.ge-ddaybadge { font-size: 12px; font-weight: 800; padding: 3px 11px; border-radius: 999px; background: var(--ge-c-amber-bg); color: var(--ge-c-amber); }
/* 일정 라인 */
.ge-release-line { display: flex; align-items: center; gap: 7px; font-size: 14px; line-height: 1.4; font-weight: 700; color: var(--ge-accent); margin: 14px 0 0; }
.ge-release-line svg { width: 15px; height: 15px; flex-shrink: 0; }
/* 소개 */
.ge-detail-desc { font-size: 14.5px; line-height: 1.85; color: var(--ge-text-body); margin: 6px 0 22px; }
/* 메타 2열 그리드 */
.ge-detail-meta { list-style: none; padding: 0; margin: 0 0 22px; display: grid; grid-template-columns: 1fr 1fr; gap: 12px 28px; font-size: 14px; line-height: 1.5; }
.ge-detail-meta li { display: flex; gap: 16px; }
.ge-detail-meta li strong { flex: 0 0 56px; color: var(--ge-text-sub); font-weight: 600; }
/* 액션 버튼 줄 */
.ge-detail-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 20px; }
/* 마지막 업데이트 */
.ge-detail-updated { font-size: 12.5px; color: var(--ge-text-sub); border-top: 1px solid var(--ge-line); padding-top: 16px; margin: 0; }
@media (max-width: 560px) { .ge-detail-meta { grid-template-columns: 1fr; } }
/* 상세 페이지 텍스트: 전역 CSS에 눌리지 않게 색 보호 (모달과 동일 처리) */
.ge-detail-desc { color: var(--ge-text-body) !important; }
:root[data-ge-theme="dark"] .ge-detail-desc { color: #d7dce5 !important; }
.ge-detail-meta { color: var(--ge-text) !important; }             /* 값(개발사/장르 등) 밝게 */
.ge-detail-meta li strong { color: var(--ge-text-sub) !important; }  /* 라벨은 보조색 */
.ge-detail-updated { color: var(--ge-text-sub) !important; }
.ge-detail-info .en { color: var(--ge-text-sub) !important; }
.ge-release-line { color: var(--ge-accent) !important; }
.ge-spec { display: grid; grid-template-columns: 84px 1fr; gap: 9px 14px; font-size: 13.5px; line-height: 1.5; margin-bottom: 18px; }
.ge-spec dt { color: var(--ge-text-sub); font-weight: 600; }
.ge-spec dd { margin: 0; }
.ge-cta {
  display: inline-block; padding: 12px 26px; background: var(--ge-accent); color: #fff;
  border-radius: 8px; font-weight: 700; font-size: 14px;
}
.ge-section { margin-top: 34px; }
.ge-section h2 { font-size: 19px; font-weight: 700; margin: 0 0 14px; padding-bottom: 10px; border-bottom: 1px solid var(--ge-line); }
.ge-section p { font-size: 14.5px; line-height: 1.85; color: var(--ge-text-body); margin: 0 0 12px; }

/* ---------- 공통 ---------- */
.ge-empty { padding: 70px 20px; text-align: center; color: var(--ge-text-sub); font-size: 14px; }

/* ---------- 반응형 ---------- */
@media (max-width: 900px) {
  .ge-post-thumb { width: 130px; }
  .ge-detail-hero .thumb { width: 100%; }
  /* 히어로 1단 적층 (배너 높이는 aspect-ratio 760:340 이 폭에 맞춰 자동) */
  .ge-hero { grid-template-columns: 1fr; }
  .ge-featured { flex-direction: row; overflow-x: auto; padding-bottom: 4px; }
  /* 가로 스크롤 행 — 폭 고정(0 0 250px) 이라야 제목 nowrap 이 카드를 늘리지 않고 …로 잘림 */
  .ge-fcard { flex: 0 0 250px; min-width: 250px; max-width: 250px; }
}
@media (max-width: 640px) {
  .ge-wrap { padding: 16px 12px 60px; }
  .ge-head h1 { font-size: 22px; }
  .ge-cell { min-height: 82px; padding: 5px 4px; }
  .ge-pill { font-size: 10px; padding: 2px 4px; }
  .ge-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }
  .ge-post { flex-direction: column; gap: 12px; }
  .ge-post-thumb { width: 100%; }
  .ge-code-row { flex-wrap: wrap; gap: 8px; }
}

/* ---------- 사이트 공통 푸터 다크 대응 ----------
   footer 는 전역 컴포넌트지만 이 CSS가 /game-event 페이지에서만 로드되므로
   다른 페이지의 푸터에는 영향이 없다. */
:root[data-ge-theme="dark"] .footer { background: var(--ge-surface-2) !important; border-top: 1px solid var(--ge-line) !important; }
:root[data-ge-theme="dark"] .footer, :root[data-ge-theme="dark"] .footer a,
:root[data-ge-theme="dark"] .footer p, :root[data-ge-theme="dark"] .footer li,
:root[data-ge-theme="dark"] .footer span, :root[data-ge-theme="dark"] .footer div { color: var(--ge-text-sub) !important; }
:root[data-ge-theme="dark"] .footer img { opacity: .75; }

/* 다크 모드: 푸터의 어두운 로고(logo_footer.svg)를 헤더의 밝은 로고(logo.svg)로 교체.
   .bottom_l > img 이 푸터 대표 로고. content 교체라 원본 이미지 파일은 안 건드린다. */
:root[data-ge-theme="dark"] .footer .bottom_l > img[src*="logo_footer"] {
  /* 다크에서만 푸터 로고를 상단(헤더) 로고로 교체. 원본 이미지 파일은 안 건드림 */
  content: url("/images/logo.svg");
  opacity: 1;
}

/* ---------- 테마 토글 버튼 ---------- */
/* 라이트/다크 토글 — 우하단 플로팅 (스크롤 위치·페이지 무관하게 항상 접근) */
.ge-theme-btn {
  position: fixed; right: 20px; bottom: 20px; z-index: 60;
  width: 46px; height: 46px; border-radius: 50%; padding: 0; box-sizing: border-box;
  display: flex; align-items: center; justify-content: center;
  font-size: 20px; line-height: 1; cursor: pointer;
  border: none;
  /* 대비색: 라이트=어두운 버튼, 다크=밝은 버튼 (배경에서 튀게). 아이콘은 배경 반대색 */
  background: var(--ge-text); color: var(--ge-page);
  box-shadow: 0 4px 16px var(--ge-shadow);
  transition: .15s;
}
/* hover 는 마우스 기기에서만 — 터치는 탭 후 hover 색이 눌러붙는(sticky) 문제 방지 */
@media (hover: hover) {
  .ge-theme-btn:hover { background: var(--ge-accent); color: #fff; transform: translateY(-2px); }
}
@media (max-width: 640px) {
  .ge-theme-btn { right: 14px; bottom: 14px; width: 42px; height: 42px; font-size: 18px; }
}

/* ---------- 캘린더 범례 색상 (테마 연동) ---------- */
.ge-legend i.lg-release  { background: var(--ge-c-blue-bg);   }
.ge-legend i.lg-prestart { background: var(--ge-c-green-bg);  }
.ge-legend i.lg-preend   { background: var(--ge-c-red-bg);    }
.ge-legend i.lg-event    { background: var(--ge-c-purple-bg); }
.ge-legend i.lg-free     { background: var(--ge-c-amber-bg); }

/* 본문 링크 (테마 연동) */
.ge-link { color: var(--ge-accent); text-decoration: underline; }
.ge-muted { font-size: 13px; color: var(--ge-text-sub); }

/* ==========================================================================
   텍스트 색 명시 지정
   상속만 믿으면 사이트 전역 규칙에 덮여 다크에서 글자가 묻힌다.
   제목·본문 요소에 테마 변수를 직접 지정한다.
   ========================================================================== */
.ge-wrap h1, .ge-wrap h2, .ge-wrap h3, .ge-wrap h4,
.ge-wrap strong, .ge-wrap dd, .ge-wrap b {
  color: var(--ge-text);
}
.ge-wrap p, .ge-wrap span, .ge-wrap li, .ge-wrap dt, .ge-wrap div {
  color: inherit;
}
/* 카드·목록 제목 (게임명 / 뉴스 제목 / 쿠폰 게임명) */
.ge-card h3,
.ge-post-body h3,
.ge-fbody h4,
.ge-fcount-box,
.ge-fclock .u strong,
.ge-coupon-head h3,
.ge-detail-info h1,
.ge-modal-hinfo h3,
.ge-section h2,
.ge-head h1,
.ge-monthbar strong,
.ge-prereg .unit strong,
.ge-code {
  color: var(--ge-text) !important;
}
/* 보조 텍스트 */
.ge-card .date, .ge-card .desc,
.ge-post-body .summary, .ge-post-meta,
.ge-coupon-head .cnt, .ge-reward, .ge-exp,
.ge-spec dt, .ge-detail-info .en,
.ge-fdate, .ge-fcount-label, .ge-more, .ge-legend, .ge-empty {
  color: var(--ge-text-sub) !important;
}
/* 예외 — 위 일괄 규칙보다 뒤에 와서 우선한다 */
.ge-count.live { color: var(--ge-c-red) !important; }
.ge-exp.end    { color: var(--ge-c-red) !important; }
.ge-fbody .cat { color: var(--ge-accent) !important; }
.ge-badge.cat  { color: var(--ge-accent) !important; }
.ge-badge.pre  { color: var(--ge-c-amber) !important; }
.ge-ddaybadge  { color: var(--ge-c-amber) !important; }   /* '오늘 출시' 등 D-day 뱃지 */
.ge-cal-dow div:first-child { color: var(--ge-sun) !important; }
.ge-cal-dow div:last-child  { color: var(--ge-sat) !important; }
.ge-pill.release  { color: var(--ge-c-blue) !important; }
.ge-pill.prestart { color: var(--ge-c-green) !important; }
.ge-pill.preend   { color: var(--ge-c-red) !important; }
.ge-pill.event    { color: var(--ge-c-purple) !important; }
.ge-dday, .ge-cta, .ge-viewtoggle button.on, .ge-cell.today .ge-daynum { color: #fff !important; }
.ge-cats button.on { color: var(--ge-accent) !important; }
.ge-link { color: var(--ge-accent) !important; }


/* ==========================================================================
   캘린더 기능 이식 (gcalen CalendarView 동작)
   · 셀 클릭 → 그 날짜 일정 패널
   · 키보드 조작 (Enter/Space 선택, 방향키 이동, Esc 닫기)
   · 월 전환 슬라이드
   ※ 디자인 톤은 기존 유지, 상태 표현만 추가
   ========================================================================== */
.ge-cell { cursor: pointer; outline: none; }
.ge-cell:hover { background: var(--ge-bg-soft); }
.ge-cell:focus-visible { box-shadow: inset 0 0 0 2px var(--ge-accent); }
.ge-cell.sel { box-shadow: inset 0 0 0 2px var(--ge-accent); background: var(--ge-bg-soft); }
.ge-cell.today { box-shadow: inset 0 0 0 1px var(--ge-accent); }
.ge-cell.today.sel { box-shadow: inset 0 0 0 2px var(--ge-accent); }

/* 월 전환 슬라이드 */
.ge-cal-grid.slide-next { animation: geSlideNext .24s ease; }
.ge-cal-grid.slide-prev { animation: geSlidePrev .24s ease; }
@keyframes geSlideNext { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: none; } }
@keyframes geSlidePrev { from { opacity: 0; transform: translateX(-16px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .ge-cal-grid.slide-next, .ge-cal-grid.slide-prev { animation: none; }
}

/* 날짜 상세 패널 */
.ge-daypanel {
  margin-top: 14px; border: 1px solid var(--ge-line);
  border-radius: var(--ge-radius); background: var(--ge-surface); overflow: hidden;
}
.ge-daypanel-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 16px; border-bottom: 1px solid var(--ge-line); background: var(--ge-bg-soft);
}
.ge-daypanel-head strong { font-size: 14px; font-weight: 700; }
.ge-daypanel-head button {
  border: 0; background: none; cursor: pointer; font-size: 20px; line-height: 1;
  color: var(--ge-text-sub); padding: 0 4px;
}
.ge-daypanel-head button:hover { color: var(--ge-text); }
.ge-daypanel-empty { padding: 26px 16px; text-align: center; font-size: 13px; color: var(--ge-text-sub); }

.ge-daylist { display: flex; flex-direction: column; }
.ge-dayrow {
  display: flex; align-items: center; gap: 10px;
  padding: 11px 16px; border-bottom: 1px solid var(--ge-line); transition: .12s;
}
.ge-dayrow:last-child { border-bottom: 0; }
.ge-dayrow:hover { background: var(--ge-bg-soft); }
.ge-dayrow .ge-pill { display: inline-block; margin: 0; flex-shrink: 0; }
.ge-dayrow .nm { flex: 1; min-width: 0; font-size: 13.5px; font-weight: 600; color: var(--ge-text) !important; }
.ge-dayrow .cat { font-size: 11.5px; color: var(--ge-text-sub) !important; flex-shrink: 0; }

/* ---------- 검색 ---------- */
.ge-viewtoggle-row { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 14px; }
.ge-search {
  display: flex; align-items: center; gap: 8px; flex: 0 1 320px;
  padding: 8px 12px; border: 1px solid var(--ge-line); border-radius: 8px;
  background: var(--ge-surface); color: var(--ge-text-sub);
}
.ge-search:focus-within { border-color: var(--ge-accent); }
.ge-search input {
  flex: 1; min-width: 0; border: 0; outline: none; background: none;
  font-size: 13.5px; color: var(--ge-text);
}
.ge-search input::placeholder { color: var(--ge-text-sub); }
.ge-search button {
  border: 0; background: none; cursor: pointer; font-size: 17px; line-height: 1;
  color: var(--ge-text-sub); padding: 0 2px;
}
.ge-search button:hover { color: var(--ge-text); }

/* ---------- 게임 모달 ---------- */
.ge-modal-back {
  position: fixed; inset: 0; z-index: 9999;
  background: rgba(0,0,0,.55); backdrop-filter: blur(2px);
  display: flex; align-items: center; justify-content: center; padding: 20px;
  animation: geFade .15s ease;
}
@keyframes geFade { from { opacity: 0 } to { opacity: 1 } }
.ge-modal {
  position: relative; width: 100%; max-width: 560px; max-height: 88vh; overflow-y: auto;
  background: var(--ge-surface); border: 1px solid var(--ge-line);
  border-radius: 14px; animation: geRise .18s ease;
}
@keyframes geRise { from { opacity: 0; transform: translateY(12px) } to { opacity: 1; transform: none } }
.ge-modal-x {
  position: absolute; top: 10px; right: 12px; z-index: 2;
  width: 32px; height: 32px; border: 0; border-radius: 50%; cursor: pointer;
  background: rgba(0,0,0,.45); color: #fff !important; font-size: 20px; line-height: 1;
}
/* 모달 헤더: 이미지(좌) + 정보(우) — gcalen GameModal */
.ge-modal-header { display: flex; gap: 16px; padding: 24px 22px 14px; }
.ge-modal-thumb { position: relative; flex: 0 0 118px; width: 118px; height: 118px; border-radius: 12px; overflow: hidden; background: var(--ge-bg-soft); }
.ge-modal-thumb .bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: blur(16px) brightness(.85); transform: scale(1.15); }
.ge-modal-thumb .fg { position: relative; z-index: 1; width: 100%; height: 100%; object-fit: contain; display: block; }
.ge-modal-hinfo { flex: 1; min-width: 0; }
.ge-modal-hinfo h3 { font-size: 19px; font-weight: 800; margin: 8px 0 3px; line-height: 1.35; }
.ge-modal-hinfo .en { font-size: 13px; color: var(--ge-text-sub); margin: 0; }
.ge-modal-body { padding: 4px 22px 22px; }
.ge-spec .ge-dd { color: var(--ge-c-amber); font-weight: 800; }
.ge-modal-source { display: inline-block; font-size: 13px; font-weight: 600; color: var(--ge-accent); margin: 2px 0 16px; }
.ge-modal-desc { font-size: 13.5px; line-height: 1.75; color: var(--ge-text-body) !important; margin: 12px 0 16px; }
.ge-modal-btns { display: flex; gap: 8px; flex-wrap: wrap; }
.ge-cta.ghost { background: none; border: 1px solid var(--ge-line); color: var(--ge-text) !important; }
.ge-cta.ghost:hover { border-color: var(--ge-accent); color: var(--ge-accent) !important; }

@media (max-width: 640px) {
  /* 항상 가로 1줄 유지: 검색바가 남는 폭 차지, 뷰토글 버튼은 고정 */
  .ge-viewtoggle-row { flex-direction: row; align-items: center; gap: 8px; }
  .ge-search { flex: 1 1 auto; min-width: 0; }
  .ge-viewtoggle { flex-shrink: 0; }
}

/* ---------- 인접월 칸: 색점 표기 ----------
   앞뒤 달 날짜는 이름을 띄우면 캘린더가 산만해지므로 점으로만 표시한다.
   (일정이 있다는 사실은 알려주되 시선은 이번 달에 남기기) */
.ge-dotrow { display: flex; align-items: center; gap: 3px; flex-wrap: wrap; margin-top: 2px; }
.ge-dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; flex-shrink: 0; }
.ge-dot.release  { background: var(--ge-c-blue); }
.ge-dot.prestart { background: var(--ge-c-green); }
.ge-dot.preend   { background: var(--ge-c-red); }
.ge-dot.event    { background: var(--ge-c-purple); }
.ge-dotmore { font-size: 9.5px; color: var(--ge-text-sub) !important; line-height: 1; }
/* 인접월 칸 자체는 흐리게 (기존 .other 유지) — 점은 조금 더 또렷하게 */
.ge-cell.other .ge-dot { opacity: .85; }

/* ==========================================================================
   리스트 뷰 (gcalen ListView 구조)
   연도 이동 → 월 탭(건수) → 날짜순 행 목록
   ========================================================================== */
.ge-yearrow { display: flex; align-items: center; justify-content: center; gap: 14px; margin-bottom: 12px; }
.ge-yearrow strong { font-size: 17px; font-weight: 800; }
.ge-yearrow button {
  width: 30px; height: 30px; border: 1px solid var(--ge-line); background: var(--ge-surface);
  border-radius: 8px; cursor: pointer; color: var(--ge-text-sub); font-size: 14px;
}
.ge-yearrow button:hover { border-color: var(--ge-accent); color: var(--ge-accent); }

.ge-mtabs {
  display: flex; flex-wrap: wrap; gap: 2px 4px; justify-content: center;
  padding-bottom: 10px; margin-bottom: 18px; border-bottom: 1px solid var(--ge-line);
}
/* 밑줄형 탭 — 레퍼런스: 박스 없이 텍스트 + 선택 월만 강조색·밑줄 */
.ge-mtab {
  position: relative;
  display: inline-flex; align-items: baseline; gap: 3px;
  padding: 8px 12px 10px; border: 0; background: none;
  color: var(--ge-text-sub) !important;
  font-size: 15px; font-weight: 600; cursor: pointer; transition: color .15s;
}
.ge-mtab em {
  font-style: normal; font-size: 11px; font-weight: 700;
  color: var(--ge-text-sub) !important;
}
.ge-mtab:hover { color: var(--ge-text) !important; }
.ge-mtab.empty { opacity: .38; }
.ge-mtab.empty:hover { color: var(--ge-text-sub) !important; }
/* 선택된 월: 강조색 + 하단 밑줄 */
.ge-mtab.on { color: var(--ge-accent) !important; font-weight: 800; }
.ge-mtab.on em { color: var(--ge-accent) !important; }
.ge-mtab.on::after {
  content: ''; position: absolute; left: 8px; right: 8px; bottom: -1px;
  height: 2px; background: var(--ge-accent); border-radius: 2px;
}

/* ---- 행 ---- */
.ge-rows { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ge-row {
  display: flex; gap: 14px; align-items: flex-start; padding: 13px;
  border: 1px solid var(--ge-line); border-radius: var(--ge-radius);
  background: var(--ge-surface); transition: .15s;
}
a.ge-row:hover { border-color: var(--ge-line-hover); box-shadow: 0 5px 16px var(--ge-shadow); }
/* 표시 순서: 날짜 → 이미지 → 본문 (이미지를 2번째로) */
.ge-row-date  { order: 1; }
.ge-row-thumb { order: 2; }
.ge-row-main  { order: 3; }
.ge-row-thumb {
  width: 108px; flex-shrink: 0; aspect-ratio: 16/9;
  border-radius: 8px; overflow: hidden; background: var(--ge-bg-soft);
}
.ge-row-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }

.ge-row-date {
  width: 58px; flex-shrink: 0; text-align: center;
  display: flex; flex-direction: column; gap: 2px; padding-top: 2px;
}
.ge-row-date .mmdd { font-size: 15px; font-weight: 800; color: var(--ge-text) !important; }
.ge-row-date .wk { font-size: 11px; color: var(--ge-text-sub) !important; }
.ge-row-date .dd {
  margin-top: 3px; font-size: 11px; font-weight: 700;
  color: var(--ge-text-sub) !important;
}
.ge-row-date .dd.soon  { color: var(--ge-c-red) !important; }
.ge-row-date .dd.today { color: var(--ge-accent) !important; }

.ge-row-main { flex: 1; min-width: 0; }
.ge-row-title { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 5px; }
.ge-row-title .nm { font-size: 15px; font-weight: 700; color: var(--ge-text) !important; min-width: 0; }
/* 행 안의 태그(출시·진행중·시작·종료)·카테고리 배지는 잘림/축소 없이 온전히 (게임명만 유동) */
.ge-row-title .ge-pill, .ge-row-title .ge-badge {
  flex-shrink: 0; overflow: visible; text-overflow: clip; max-width: none;
}
.ge-row-desc {
  font-size: 12.5px; line-height: 1.6; color: var(--ge-text-sub) !important; margin: 0 0 7px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.ge-row-tags { display: flex; gap: 5px; flex-wrap: wrap; }
.ge-row-tags span {
  font-size: 11px; padding: 2px 7px; border-radius: 5px;
  background: var(--ge-bg-soft); color: var(--ge-text-sub) !important;
}
.ge-row-event { background: var(--ge-surface-2); }
.ge-empty .hint { font-size: 12.5px; margin-top: 6px; opacity: .8; }

@media (max-width: 640px) {
  .ge-row { gap: 10px; padding: 11px; }
  .ge-row-thumb { width: 84px; }
  .ge-row-date { width: 46px; }
  .ge-mtab { padding: 6px 9px; font-size: 12px; }
}

/* ---------- 배너 로딩 스켈레톤 ----------
   배너 API 응답 전(또는 서버 재기동 등으로 지연될 때) 회색 자리표시.
   반짝이는 shimmer 로 로딩임을 알린다. (gcalen BannerCarousel 대응) */
.ge-banner-skel {
  position: relative; overflow: hidden;
  background: var(--ge-bg-soft);
  /* 높이는 .ge-banner 의 aspect-ratio(760:340) 가 담당 → 로드 전후 높이 동일(점프 없음) */
}
.ge-skel-shine {
  position: absolute; inset: 0;
  background: linear-gradient(100deg,
    transparent 20%,
    var(--ge-skel-shine) 45%,
    var(--ge-skel-shine) 55%,
    transparent 80%);
  background-size: 220% 100%;
  animation: geShimmer 1.3s ease-in-out infinite;
}
@keyframes geShimmer {
  from { background-position: 180% 0; }
  to   { background-position: -80% 0; }
}
@media (prefers-reduced-motion: reduce) { .ge-skel-shine { animation: none; } }

/* ── 리스트/그리드 로딩 스켈레톤 (뉴스·신작·쿠폰·목록) ── */
.ge-skitem {
  background-color: var(--ge-skel);
  background-image: linear-gradient(100deg, transparent 20%, var(--ge-skel-shine) 45%, var(--ge-skel-shine) 55%, transparent 80%);
  background-size: 220% 100%;
  animation: geShimmer 1.3s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) { .ge-skitem { animation: none; } }
.ge-post-sk, .ge-cpcard-sk { pointer-events: none; }
.sk-line { display: block; height: 13px; border-radius: 5px; margin: 0 0 10px; }
.sk-line.sk-lg { height: 18px; }
.sk-line:last-child { margin-bottom: 0; }
.sk-w30 { width: 30%; } .sk-w40 { width: 40%; } .sk-w55 { width: 55%; }
.sk-w60 { width: 60%; } .sk-w70 { width: 70%; } .sk-w85 { width: 85%; }
.ge-cpcard-sk .body { display: flex; flex-direction: column; gap: 9px; justify-content: center; }

/* ---------- 필터: 게임 카테고리 | 이벤트 타입 구분 ---------- */
.ge-cat-div {
  width: 1px; align-self: center;
  height: 34px; margin: 0 6px;
  background: var(--ge-line); flex-shrink: 0;
}
/* 이벤트 타입 버튼은 아이콘 원을 살짝 다르게(중립 톤) 구분감 */
.ge-cat.ev .ic { background: var(--ge-bg-soft); }
.ge-cat.ev.on .ic {
  border-color: var(--ge-accent); color: var(--ge-accent);
  box-shadow: 0 0 0 3px var(--ge-accent-soft);
}
@media (max-width: 640px) {
  .ge-cats { padding: 4px 2px 10px; }
  .ge-cat { flex-shrink: 0; }
  .ge-cat-div { height: 28px; }
}


/* ==========================================================================
   다크 모드 — 헤더 뒷배경 이미지 색 조정
   .pg_banner.pg_community 의 배경(communitybg.svg)은 밝은 하늘색 비트맵이라
   다크에서 튄다. 이미지 색은 못 바꾸지만 filter 로 어둡게·탈채도해서 톤을 맞춘다.
   ※ /game-event 페이지에서만 로드되므로 다른 페이지 헤더엔 영향 없음
   ========================================================================== */
:root[data-ge-theme="dark"] .pg_banner.pg_community.pg_short { /* ge-headbg-dark */
  /* 하늘색만 다크로 칠하고 흰 SSALMUK 리본은 유지한 전용 이미지로 교체
     (원본 communitybg.svg 는 그대로 두고 이 페이지 다크에서만 사용) */
  background-image: url(/images/game-event/communitybg-dark.jpg) !important;
}

/* ==========================================================================
   다크 모드 — 헤더 글자/검색창 톤다운
   사이트 헤더는 원래 밝은 배경(배너) 위 전제라 글자가 #F5F5F5, 검색창은 흰색.
   다크 배경에선 너무 쨍하게 튀므로 이 페이지 다크에서만 부드럽게 낮춘다.
   ※ /game-event 페이지에서만 로드 → 다른 페이지 헤더엔 영향 없음
   ========================================================================== */
:root[data-ge-theme="dark"] .header .inner .txt_menu a,
:root[data-ge-theme="dark"] .header .inner .txt_menu li .two li a,
:root[data-ge-theme="dark"] .header .inner .right_menu ul li a {
  color: #c3c8d2 !important;   /* 흰색(#F5F5F5) → 차분한 밝은 회색 */
}
/* 검색창: 흰 배경 → 다크 표면 */
:root[data-ge-theme="dark"] .header .search-box .input-search,
:root[data-ge-theme="dark"] .header .btn-search:focus ~ .input-search {
  background: var(--ge-surface) !important;
  color: var(--ge-text) !important;
  border-bottom-color: var(--ge-line) !important;
}
:root[data-ge-theme="dark"] .header .search-box .input-search::placeholder {
  color: var(--ge-text-sub) !important;
}
/* 검색 아이콘도 살짝 눌러줌 */
:root[data-ge-theme="dark"] .header .search-box { opacity: .95; }

/* 다크: 서브 카테고리 바(캘린더·게임뉴스·신작총정리·게임쿠폰) 톤다운 — 헤더와 동일 */
:root[data-ge-theme="dark"] .ge-subnav { background: var(--ge-surface); }
:root[data-ge-theme="dark"] .ge-subnav a { color: #c3c8d2; }
:root[data-ge-theme="dark"] .ge-subnav a:hover,
:root[data-ge-theme="dark"] .ge-subnav a.on { color: var(--ge-accent); }

/* 다크: 헤더 검색바에 보더라인 (원래 밑줄만 있어 다크에선 경계가 안 보임) */
:root[data-ge-theme="dark"] .header .search-box .input-search,
:root[data-ge-theme="dark"] .header .btn-search:focus ~ .input-search {
  border: 1px solid var(--ge-line) !important;
  border-radius: 8px !important;
  box-sizing: border-box;
}

/* ==========================================================================
   서브페이지 본문 2컬럼 (gcalen PageShell) — [콘텐츠 | 추천 게임 카드]
   ※ 캘린더(index)는 이 구조를 안 씀. 광고는 바깥 .ge-aside 에 그대로.
   ========================================================================== */
/* 서브페이지도 캘린더와 동일한 폭·위치 (좌측 균형 빈열 유지).
   → 본문(콘텐츠 + 추천카드) 영역이 캘린더 콘텐츠 폭과 정확히 일치 */
.ge-body2 {
  display: grid; grid-template-columns: minmax(0, 1fr) 300px;
  gap: 26px; align-items: start;
}
.ge-body2-main { min-width: 0; }

/* 추천 게임 카드 열 (세로 적층 + 스크롤 시 따라오게 sticky) */
.ge-side-featured {
  display: flex; flex-direction: column; gap: 10px; min-width: 0;
  position: sticky; top: 20px; align-self: start;
}

@media (max-width: 1100px) {
  /* 본문 2컬럼 → 1컬럼. 추천카드는 콘텐츠 아래로, 가로 스크롤 행으로 전환
     (통짜 세로카드로 늘어나지 않게) */
  .ge-body2 { grid-template-columns: 1fr; gap: 18px; }
  .ge-side-featured {
    position: static;
    flex-direction: row; overflow-x: auto;
    gap: 12px; padding-bottom: 6px;
    scrollbar-width: thin;
  }
  .ge-side-featured .ge-fcard { min-width: 250px; flex: 0 0 250px; }
}

/* ==========================================================================
   반응형 보강 — 전 구간 정리
   1400↑ 3분할 / 1100~1400 빈열제거 / 980~1100 추천카드 아래 / 980↓ 광고off
   + 태블릿(820) 여백·타이포, 모바일(560) 압축
   ========================================================================== */

/* 태블릿: 컨테이너 여백·간격·캘린더 셀 압축 */
@media (max-width: 1024px) {
  .ge-shell { gap: 20px; padding: 0 14px; }
  .ge-cell { min-height: 100px; }
  .ge-head h1 { font-size: 25px; }
}

/* 광고 열이 사라지는 지점(980) — 본문 폭 확보 + 히어로 정리 */
@media (max-width: 980px) {
  .ge-cell { min-height: 90px; }
  .ge-cal-dow div { font-size: 11px; }
}

/* 큰 모바일 ~ 작은 태블릿 */
@media (max-width: 760px) {
  .ge-head h1 { font-size: 22px; }
  .ge-head { padding-bottom: 14px; margin-bottom: 18px; }

  .ge-cell { min-height: 78px; }
  .ge-pill { font-size: 10px; }
  .ge-daypanel-head strong { font-size: 13px; }
  /* 추천카드 가로행: 폭 살짝 축소 */
  .ge-side-featured .ge-fcard { min-width: 220px; flex-basis: 220px; }
}

/* 모바일: 리스트 행·검색·월탭 압축 */
@media (max-width: 560px) {
  .ge-shell { padding: 0 10px; }
  .ge-cell { min-height: 64px; padding: 4px 3px; }
  .ge-daynum { margin-bottom: 3px; }
  .ge-pill { padding: 1px 3px; margin-bottom: 2px; }
  .ge-more { font-size: 9px; }
  /* 캘린더 마커 1개까지만 이름, 나머지는 +N (셀이 좁아 3개는 넘침) */
  .ge-cell .ge-pill:nth-of-type(n+2) { display: none; }
  .ge-mtab { font-size: 13px; padding: 7px 8px 9px; }
  .ge-monthbar strong { font-size: 16px; }
  .ge-row { flex-wrap: wrap; }
  .ge-row-main { flex-basis: 100%; }
  .ge-fclock .u strong { font-size: 15px; }
  .ge-modal { max-height: 92vh; }
}

/* ==========================================================================
   1201~1250 헤더 사라짐 수정
   사이트는 배너(pg_short)를 ≤1250 에서 숨기지만, PC 헤더는 ≤1200 에서야 모바일로 전환.
   → 1201~1250 에선 흰 헤더 글자만 남고 배경(배너)이 없어 헤더가 안 보였다.
   PC 헤더가 뜨는 구간(≥1201)에는 배너를 항상 표시해 배경을 깔아준다.
   ※ game-event.css 는 이 페이지에서만 로드 → 다른 페이지 영향 없음
   ========================================================================== */
@media (min-width: 1201px) {
  .pg_banner.pg_community.pg_short { display: block !important; }
}

/* ==========================================================================
   다크 모드 — 모바일 헤더 (m_header_wrap)
   기본은 흰 배경 + 어두운 글자(#3F3F3F) + 어두운 로고 → 다크에서 처리.
   ※ game-event.css 는 이 페이지에서만 로드 → 다른 페이지 모바일 헤더엔 영향 없음
   ========================================================================== */
:root[data-ge-theme="dark"] .m_header_wrap {
  background: var(--ge-surface) !important;
  color: var(--ge-text-sub) !important;
}
:root[data-ge-theme="dark"] .m_header_wrap .m_header .inner { background: var(--ge-surface); }
:root[data-ge-theme="dark"] .m_header_wrap .header_menu { background: var(--ge-surface); }
:root[data-ge-theme="dark"] .m_header_wrap .header_menu li a { color: #c3c8d2 !important; }
:root[data-ge-theme="dark"] .m_header_wrap .header_menu li.on a { color: var(--ge-accent) !important; }

/* 로고: 다크에선 PC 로고(밝은색)로 교체.
   PC 로고(140x27)가 모바일 로고(206x37)보다 작아 기본 70%로는 작게 보이므로 크기 보정 */
:root[data-ge-theme="dark"] .m_header_wrap .m_header .inner li.logo img {
  content: url("/images/logo.svg");
  width: auto !important;
  height: 26px !important;
}

/* 검색창(모바일): 흰 배경 → 다크 표면 + 보더.
   모바일은 돋보기가 input 배경에 박혀 있으므로, 흰 돋보기를 no-repeat 로 유지한다
   (background 단축속성으로 덮으면 no-repeat 이 풀려 돋보기가 타일처럼 반복됨) */
:root[data-ge-theme="dark"] .m_header_wrap .search-box .input-search,
:root[data-ge-theme="dark"] .m_header_wrap .btn-search:focus ~ .input-search {
  background: var(--ge-surface) url(/images/icon_search_white.svg) no-repeat right 12px center !important;
  color: var(--ge-text) !important;
  border: 1px solid var(--ge-line) !important;
}
:root[data-ge-theme="dark"] .m_header_wrap .search-box .input-search::placeholder {
  color: var(--ge-text-sub) !important;
}

/* PC 헤더 돋보기는 별도 .search_icon(div 배경)이라 filter 로 밝게 */
:root[data-ge-theme="dark"] .header .search-box .search_icon,
:root[data-ge-theme="dark"] .header .btn-search .search_icon {
  filter: brightness(0) invert(0.82);
}

/* 다크 모드 — 모바일 헤더 우측 아이콘(검색·알람·햄버거·닫기) 전부 검은색이라 밝게 반전 */
:root[data-ge-theme="dark"] .m_header_wrap .right_icon img,
:root[data-ge-theme="dark"] .m_header_wrap .right_icon .search_icon,
:root[data-ge-theme="dark"] .m_header_wrap .m_show_icon img,
:root[data-ge-theme="dark"] .m_header_wrap .hide_icon img {
  filter: brightness(0) invert(0.82);
}

/* ==========================================================================
   다크 모드 — 최근/인기 검색어 패널 (흰 배경/파란 원 → 다크 톤)
   ※ 돋보기 아이콘은 위에서 처리됨 (PC=.search_icon filter, 모바일=input 배경)
   ========================================================================== */
:root[data-ge-theme="dark"] .search-box .recently_history {
  background-color: var(--ge-surface) !important;
  border: 1px solid var(--ge-line);
  box-shadow: 0 8px 24px rgba(0,0,0,.5);
}
:root[data-ge-theme="dark"] .search-box .recently_history .con_head div { border-bottom-color: var(--ge-line) !important; }
:root[data-ge-theme="dark"] .recently_history .con_head > div.active_list { border-bottom-color: var(--ge-accent) !important; }
:root[data-ge-theme="dark"] .search-box .recently_history .con_main .list_member { color: var(--ge-text); }
:root[data-ge-theme="dark"] .search-box .recently_history .con_main .list_member:hover { background-color: var(--ge-bg-soft) !important; }
:root[data-ge-theme="dark"] .search-box .recently_history .con_footer { background-color: var(--ge-bg-soft) !important; }
:root[data-ge-theme="dark"] .recently_history .con_footer .recently_foot div p,
:root[data-ge-theme="dark"] .recently_history .con_footer .hot_foot .historyClose_btn p { color: var(--ge-text-sub) !important; }
:root[data-ge-theme="dark"] .recently_history .con_main .hot_list .list_member .high_rank strong { color: var(--ge-accent) !important; }
:root[data-ge-theme="dark"] .recently_history .con_main .recently_list .list_empty p { color: var(--ge-text-sub) !important; }

/* 검색어 패널 — 내부 글자 전체를 밝게 (탭 라벨·검색어 목록 등) */
:root[data-ge-theme="dark"] .search-box .recently_history,
:root[data-ge-theme="dark"] .search-box .recently_history p,
:root[data-ge-theme="dark"] .search-box .recently_history a,
:root[data-ge-theme="dark"] .search-box .recently_history span,
:root[data-ge-theme="dark"] .search-box .recently_history div,
:root[data-ge-theme="dark"] .search-box .recently_history strong {
  color: var(--ge-text) !important;
}
/* 강조/보조색은 다시 지정 (위 일괄 규칙보다 뒤 = 우선) */
:root[data-ge-theme="dark"] .recently_history .con_main .hot_list .list_member .high_rank strong { color: var(--ge-accent) !important; }
:root[data-ge-theme="dark"] .recently_history .con_head > div.active_list p { color: var(--ge-accent) !important; }
:root[data-ge-theme="dark"] .recently_history .con_footer p,
:root[data-ge-theme="dark"] .recently_history .con_main .recently_list .list_empty p { color: var(--ge-text-sub) !important; }

/* ==========================================================================
   페이지 가로 스크롤 방지
   사이트 헤더(.header .inner)가 1440px 고정폭이라 그 이하 뷰포트에서 좌우로
   넘쳐 가로 스크롤이 생긴다. overflow-x: clip 으로 넘침만 잘라낸다.
   (clip 은 scroll container 를 만들지 않아 position: sticky 가 그대로 동작)
   ※ game-event.css 는 이 페이지에서만 로드 → 다른 페이지 영향 없음.
      카테고리/추천카드 등 의도된 내부 가로 스크롤은 각자 overflow-x:auto 라 유지됨.
   ========================================================================== */
html, body { overflow-x: clip; }

/* 가로 스크롤 영역의 스크롤바 숨김 (스크롤 기능은 유지, 막대만 안 보이게)
   - 서브 카테고리 바 / 추천 게임 카드 행 / 카테고리 필터 */
.ge-subnav-in,
.ge-featured,
.ge-side-featured,
.ge-cats {
  scrollbar-width: none;        /* Firefox */
  -ms-overflow-style: none;     /* IE/Edge */
}
.ge-subnav-in::-webkit-scrollbar,
.ge-featured::-webkit-scrollbar,
.ge-side-featured::-webkit-scrollbar,
.ge-cats::-webkit-scrollbar {
  display: none;                /* Chrome/Safari */
  width: 0; height: 0;
}

/* ==========================================================================
   모바일 — 리스트뷰 행 / 캘린더 셀 세로 압축
   ========================================================================== */
@media (max-width: 640px) {
  /* 리스트 행: 설명·태그 숨기고 여백 축소 → 한 줄에 필요한 것만 (날짜·썸네일·제목) */
  .ge-rows { gap: 8px; }
  .ge-row { gap: 10px; padding: 9px; align-items: center; }
  .ge-row-thumb { width: 72px; }
  .ge-row-date { width: 44px; padding-top: 0; }
  .ge-row-date .mmdd { font-size: 13.5px; }
  .ge-row-date .wk { font-size: 10px; }
  .ge-row-date .dd { margin-top: 1px; font-size: 10px; }
  .ge-row-title { margin-bottom: 0; }
  .ge-row-title .nm { font-size: 13.5px; }
  .ge-row-desc { display: none; }     /* 설명 숨김 */
  .ge-row-tags { display: none; }     /* 태그 숨김 */
}
@media (max-width: 400px) {
  .ge-row-thumb { width: 60px; }
  .ge-row { padding: 8px; gap: 8px; }
}

/* 모바일 — 리스트 행 세로 길이 균일화 (고정 높이 + 썸네일 고정 + 제목 1줄) */
@media (max-width: 640px) {
  .ge-row { min-height: 66px; align-items: center; }
  .ge-row-thumb { width: 72px; height: 48px; aspect-ratio: auto; }   /* 16:9 대신 고정 */
  .ge-row-title { flex-wrap: nowrap; overflow: hidden; margin-bottom: 2px; }
  .ge-row-title .nm {
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0;
  }
  /* 이벤트 행(썸네일 없음)도 같은 높이로 */
  .ge-row.ge-row-event { min-height: 66px; }
}



/* ==========================================================================
   다크 모드 — 헤더 활성/강조색을 뷰토글과 동일한 강조색(--ge-accent)으로 통일
   (라이트 모드는 사이트 기본 민트 #74FFE6 유지)
   ========================================================================== */
:root[data-ge-theme="dark"] .header .inner .txt_menu .one li a.ge-nav-on,
:root[data-ge-theme="dark"] .m_header_wrap .header_menu li a.ge-nav-on { color: var(--ge-accent) !important; }
:root[data-ge-theme="dark"] .ge-subnav a:hover,
:root[data-ge-theme="dark"] .ge-subnav a.on { color: var(--ge-accent); border-bottom-color: var(--ge-accent); }
@media (hover: hover) {
  :root[data-ge-theme="dark"] .ge-theme-btn:hover { background: var(--ge-accent); color: #fff; }
}
:root[data-ge-theme="dark"] .m_header_wrap .header_menu li.on a { border-bottom-color: var(--ge-accent) !important; }
:root[data-ge-theme="dark"] .header .inner .right_icon ul li .alert_counter,
:root[data-ge-theme="dark"] .m_header_wrap .alert_counter { background: var(--ge-accent) !important; color: #fff !important; }

/* 다크 모드 — 헤더 일일 포인트 UI (.daily_point)
   기본은 진한 파랑 배경 + 흰 알약. 다크에선 강조색 테두리 + 다크 표면으로 어울리게. */
:root[data-ge-theme="dark"] .daily_point {
  background: var(--ge-accent-soft) !important;
  border: 1px solid var(--ge-accent);
}
:root[data-ge-theme="dark"] .daily_point .calculator {
  background-color: #2b3550 !important;   /* 주변보다 밝게 */
}
:root[data-ge-theme="dark"] .daily_point .calculator strong {
  color: var(--ge-text) !important;
}
:root[data-ge-theme="dark"] .daily_point > p { color: var(--ge-accent) !important; }

/* ==========================================================================
   게임 쿠폰 (gcalen 방식) — 목록: 카드 그리드 / 상세: 코드+사용법
   ========================================================================== */
/* 목록 카드 그리드 */
.ge-cpgrid { list-style: none; margin: 0 0 20px; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
.ge-cpcard {
  display: flex; align-items: center; gap: 12px; padding: 12px 14px;
  border: 1px solid var(--ge-line); border-radius: 14px; background: var(--ge-surface); transition: .15s;
}
.ge-cpcard:hover { border-color: var(--ge-accent); box-shadow: 0 5px 16px var(--ge-shadow); }
.ge-cpcard .thumb { width: 52px; height: 52px; border-radius: 12px; object-fit: cover; flex-shrink: 0; background: var(--ge-bg-soft); }
.ge-cpcard .thumb.ph { display: flex; align-items: center; justify-content: center; font-size: 24px; }
.ge-cpcard .body { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.ge-cpcard .nm { font-weight: 700; font-size: 15px; color: var(--ge-text) !important; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.ge-cpcard .tag { font-size: 11.5px; font-weight: 700; border-radius: 999px; padding: 2px 9px; background: var(--ge-accent-soft); color: var(--ge-accent); white-space: nowrap; }
.ge-cpnote { font-size: 12.5px; color: var(--ge-text-sub); line-height: 1.6; margin: 8px 0 0; }

/* 상세 */
.ge-crumb { font-size: 13px; line-height: 1.7; color: var(--ge-text-sub); margin: 6px 0 24px; }
.ge-crumb a { color: var(--ge-text-sub); text-decoration: none; }
.ge-crumb a:hover { color: var(--ge-accent); text-decoration: underline; }
.ge-crumb span { margin: 0 6px; opacity: .7; }   /* › 분리자 좌우 여백 */

.ge-cpdetail-head { display: flex; gap: 16px; align-items: flex-start; margin-bottom: 16px; }
.ge-cpdetail-head .thumb { width: 72px; height: 72px; border-radius: 14px; object-fit: cover; flex-shrink: 0; background: var(--ge-bg-soft); }
.ge-cpdetail-head .thumb.ph { display: flex; align-items: center; justify-content: center; font-size: 34px; }
.ge-cpdetail-head .body { flex: 1; min-width: 0; }
.ge-cpdetail-head h1 { font-size: 22px; font-weight: 800; margin: 2px 0 8px; }
.ge-cpdetail-head .sub { font-size: 13.5px; line-height: 1.7; color: var(--ge-text-sub); margin: 0; }

.ge-redeem {
  display: inline-block; margin-bottom: 20px; padding: 11px 18px;
  border-radius: 10px; background: var(--ge-accent); color: #fff !important;
  font-size: 14px; font-weight: 700; text-decoration: none;
}
.ge-redeem:hover { filter: brightness(1.08); }

/* 쿠폰 상세 — 소개 · FAQ · 관련 칩 */
.ge-cpintro { font-size: 14px; line-height: 1.85; color: var(--ge-text-body); margin: 0; }
.ge-faq dl { margin: 0; }
.ge-faq-item { padding: 14px 0; border-bottom: 1px solid var(--ge-line); }
.ge-faq-item:last-child { border-bottom: 0; }
.ge-faq-item dt { font-size: 14.5px; font-weight: 700; color: var(--ge-text); margin: 0 0 7px; }
.ge-faq-item dd { font-size: 13.5px; line-height: 1.75; color: var(--ge-text-sub); margin: 0; }
.ge-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.ge-chip {
  font-size: 13px; font-weight: 600; color: var(--ge-text-sub); text-decoration: none;
  border: 1px solid var(--ge-line); border-radius: 999px; padding: 6px 13px; background: var(--ge-surface);
}
.ge-chip:hover { border-color: var(--ge-accent); color: var(--ge-accent); }

.ge-cplist { list-style: none; margin: 0 0 8px; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ge-cpitem { border: 1px solid var(--ge-line); border-radius: 10px; padding: 13px 15px; background: var(--ge-surface); }
.ge-cpitem.expired { opacity: .55; }
.ge-cpitem .top { display: flex; align-items: center; gap: 10px; margin-bottom: 7px; }
.ge-cpitem .code {
  font-family: 'Consolas', monospace; font-weight: 700; font-size: 15px; letter-spacing: .5px;
  background: var(--ge-bg-soft); color: var(--ge-text) !important; padding: 6px 12px; border-radius: 7px;
}
.ge-cpitem .copy {
  margin-left: auto; padding: 6px 14px; border: 1px solid var(--ge-line); background: var(--ge-surface);
  border-radius: 7px; font-size: 12.5px; font-weight: 600; cursor: pointer; color: var(--ge-text-sub); white-space: nowrap;
}
.ge-cpitem .copy:hover { border-color: var(--ge-accent); color: var(--ge-accent); }
.ge-cpitem .expiredTag { margin-left: auto; font-size: 12px; font-weight: 700; color: var(--ge-c-red); }
.ge-cpitem .reward { font-size: 13.5px; color: var(--ge-text) !important; margin: 0 0 4px; }
.ge-cpitem .exp { font-size: 11.5px; color: var(--ge-text-sub); }

.ge-steps { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 10px; }
.ge-steps li { font-size: 14px; line-height: 1.7; color: var(--ge-text-body); }
.ge-steps strong { color: var(--ge-text); }
.ge-steps a { color: var(--ge-accent); text-decoration: underline; }

/* ============================================================
   가독성 보정 — 사이트 전역 CSS가 텍스트 색을 덮어 다크모드에서
   흐려지는 것 방지. 게임이벤트 텍스트 색을 !important 로 고정.
   ============================================================ */
.ge-cpintro,
.ge-steps li             { color: var(--ge-text-body) !important; }
.ge-steps strong,
.ge-faq-item dt,
.ge-daypanel-head strong { color: var(--ge-text) !important; }
.ge-faq-item dd,
.ge-chip,
.ge-cpitem .exp,
.ge-daypanel-empty       { color: var(--ge-text-sub) !important; }
.ge-steps a              { color: var(--ge-accent) !important; }
.ge-chip:hover           { color: var(--ge-accent) !important; }
.ge-cpitem .expiredTag   { color: var(--ge-c-red) !important; }
.ge-faq-item dt          { line-height: 1.4; }
.ge-faq-item dd          { line-height: 1.75; }

/* ==========================================================================
   뉴스/신작총정리 상세 (gcalen 기사 렌더)
   ========================================================================== */
.ge-backlink { display: inline-block; font-size: 13.5px; color: var(--ge-text-sub); margin-bottom: 16px; }
.ge-backlink:hover { color: var(--ge-accent); }

.ge-article-hero { position: relative; border-radius: var(--ge-radius); overflow: hidden; margin-bottom: 20px; background: var(--ge-bg-soft); height: 360px; }
.ge-article-hero .bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: blur(20px) brightness(0.82); transform: scale(1.15); }
.ge-article-hero .fg { position: relative; z-index: 1; width: 100%; height: 100%; object-fit: contain; display: block; }
@media (max-width: 640px) { .ge-article-hero { height: 220px; } }

.ge-article-head { margin-bottom: 24px; padding-bottom: 20px; border-bottom: 1px solid var(--ge-line); }
.ge-article-head h1 { font-size: 27px; font-weight: 800; line-height: 1.35; margin: 10px 0 14px; }
.ge-article-lead { font-size: 15.5px; line-height: 1.75; color: var(--ge-text-sub); margin: 0 0 12px; }
.ge-article-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.ge-article-tags span { font-size: 12px; color: var(--ge-accent); background: var(--ge-accent-soft); padding: 3px 9px; border-radius: 999px; }

/* 본문 */
.ge-article-body { font-size: 15.5px; line-height: 1.9; color: var(--ge-text); }
.ge-article-body p { margin: 0 0 18px; line-height: 1.9; }
.ge-article-body h2 { font-size: 20px; font-weight: 700; line-height: 1.35; margin: 32px 0 14px; padding-bottom: 8px; border-bottom: 1px solid var(--ge-line); }
.ge-article-body h3 { font-size: 17px; font-weight: 700; line-height: 1.4; margin: 26px 0 10px; }
.ge-article-body ul { margin: 0 0 18px; padding-left: 20px; }
.ge-article-body li { margin-bottom: 8px; line-height: 1.8; }
.ge-article-body strong { font-weight: 700; }
.ge-article-body a.ge-link, .ge-article-body a { color: var(--ge-accent); text-decoration: underline; }

/* 출처 박스 */
.ge-sourcebox {
  margin: 28px 0 8px; padding: 14px 16px; border-radius: 10px;
  background: var(--ge-bg-soft); border: 1px solid var(--ge-line);
  font-size: 13px; color: var(--ge-text-sub); line-height: 1.6;
}
.ge-sourcebox strong { color: var(--ge-text); }
.ge-sourcebox a { color: var(--ge-accent); text-decoration: underline; word-break: break-all; }
.ge-sourcebox .note { font-size: 12px; margin: 8px 0 0; opacity: .85; }

/* 상세 기사 본문 글자색 명시 (v-html 내부 요소가 사이트 전역 규칙에 덮여
   다크에서 묻히는 것 방지) */
.ge-article-body,
.ge-article-body p,
.ge-article-body li,
.ge-article-body span,
.ge-article-body h2,
.ge-article-body h3,
.ge-article-body strong,
.ge-article-body em,
.ge-article-body b { color: var(--ge-text) !important; }
.ge-article-body a { color: var(--ge-accent) !important; }
.ge-article-head h1 { color: var(--ge-text) !important; }
.ge-article-lead { color: var(--ge-text-sub) !important; }

/* 출처 박스 글자색 명시 (다크에서 전역 규칙에 덮이는 것 방지) */
.ge-sourcebox,
.ge-sourcebox p,
.ge-sourcebox span,
.ge-sourcebox .note { color: var(--ge-text-sub) !important; }
.ge-sourcebox strong { color: var(--ge-text) !important; }
.ge-sourcebox a { color: var(--ge-accent) !important; }

/* 게임 목록/허브 추가 요소 */
.ge-cpcard .tag.sched { background: var(--ge-c-green-bg); color: var(--ge-c-green); }
.ge-cpcard .tag.muted { background: var(--ge-bg-soft); color: var(--ge-text-sub); }
.ge-cplinks { display: flex; gap: 18px; flex-wrap: wrap; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--ge-line); }
.ge-cplinks a { font-size: 13.5px; font-weight: 600; color: var(--ge-accent); }
.ge-hub-badges { display: flex; gap: 6px; flex-wrap: wrap; margin: 6px 0 10px; }
.ge-hub-badges .tag { font-size: 12px; font-weight: 700; border-radius: 999px; padding: 3px 10px; background: var(--ge-accent-soft); color: var(--ge-accent); }
.ge-hub-badges .tag.sched { background: var(--ge-c-green-bg); color: var(--ge-c-green); }
.ge-morelink { display: inline-block; margin-top: 6px; font-size: 13.5px; font-weight: 600; color: var(--ge-accent); }

/* 쿠폰 장르 필터 (카테고리처럼) */
.ge-genres { display: flex; align-items: center; flex-wrap: nowrap; gap: 6px; margin: 0 0 18px; overflow-x: auto; scrollbar-width: none; }
.ge-genres::-webkit-scrollbar { display: none; }
.ge-genre-count { flex-shrink: 0; margin-left: auto; padding-left: 12px; color: var(--ge-text-sub); font-size: 13px; font-weight: 600; white-space: nowrap; }
.ge-genre {
  flex-shrink: 0; padding: 7px 15px; border: 1px solid var(--ge-line); border-radius: 999px;
  background: var(--ge-surface); color: var(--ge-text-sub); font-size: 13px; font-weight: 600; cursor: pointer; transition: .15s;
}
.ge-genre:hover { border-color: var(--ge-line-hover); color: var(--ge-text); }
.ge-genre.on { background: var(--ge-accent-soft); border-color: var(--ge-accent); color: var(--ge-accent) !important; }
/* 모바일: 카운트가 가로 스크롤 밖으로 밀려 잘리므로 칩은 줄바꿈, 카운트는 아래 줄 전체폭 */
@media (max-width: 640px) {
  .ge-genres { flex-wrap: wrap; overflow-x: visible; }
  .ge-genre-count { width: 100%; margin-left: 0; padding-left: 2px; margin-top: 2px; }
}
/* 카드 안 장르 배지 */
.ge-cpcard .tag.genre { background: var(--ge-bg-soft); color: var(--ge-text-sub); }

/* SSR 본문 — 첫 HTML 에 실제 존재(크롤러가 즉시 읽음). Vue 마운트되면 JS가 display:none.
   JS 없는 환경에선 그대로 본문으로 보인다. */
.ge-ssr { max-width: 760px; margin: 20px auto; padding: 0 16px; line-height: 1.8; color: var(--ge-text); }
.ge-ssr h1 { font-size: 22px; margin: 0 0 8px; line-height: 1.35; }
.ge-ssr p { margin: 0 0 12px; }

/* SSR 링크 목록 — 크롤러에겐 정상 <a>, 사람 화면에선 안 보이게(sr-only 방식).
   display:none 이 아니라 clip 처리라 링크 가치가 유지된다. */
.ge-ssrlist {
  position: absolute; width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0; overflow: hidden;
  clip: rect(0, 0, 0, 0); clip-path: inset(50%); white-space: nowrap;
}

/* ===== 쿠폰 등록 요청 (카드형 버튼 + 모달) ===== */
/* 게임 카드 그리드 맨 끝의 '등록 요청' 카드 — 게임 카드와 같은 모양 + 점선 강조 */
.ge-cpcard-add {
  position: relative; width: 100%; cursor: pointer; text-align: left; font: inherit;
  border: 1px dashed var(--ge-accent); background: var(--ge-accent-soft);
}
.ge-cpcard-add:hover { border-style: solid; box-shadow: 0 5px 16px var(--ge-shadow); }
.ge-cpcard-add .thumb.ph { background: transparent; color: var(--ge-accent); font-size: 26px; font-weight: 700; }
.ge-cpcard-add .nm { color: var(--ge-accent) !important; }
/* 오른쪽 위 말풍선 배지 +200P (꼬리 포함, 살짝 떠오름) */
.ge-add-badge {
  position: absolute; top: -10px; right: 8px; z-index: 3;
  background: var(--ge-accent); color: #fff !important;
  font-size: 12px; font-weight: 800; letter-spacing: .01em;
  padding: 4px 10px; border-radius: 999px;
  box-shadow: 0 3px 8px rgba(0,0,0,.2);
  animation: geBob 1.8s ease-in-out infinite;
}
.ge-add-badge::after {
  content: ''; position: absolute; left: 15px; bottom: -3px;
  width: 8px; height: 8px; background: var(--ge-accent);
  border-radius: 2px; transform: rotate(45deg);
}
@keyframes geBob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-2px); } }
@media (prefers-reduced-motion: reduce) { .ge-add-badge { animation: none; } }

.ge-reqmodal {
  position: relative; width: 100%; max-width: 440px;
  background: var(--ge-surface); border: 1px solid var(--ge-line); border-radius: 16px;
  padding: 26px 24px; box-shadow: 0 20px 50px var(--ge-shadow);
}
.ge-reqmodal h2 { font-size: 19px; font-weight: 800; color: var(--ge-text) !important; margin: 0 0 6px; }
.ge-submit-desc { font-size: 13.5px; color: var(--ge-text-sub) !important; margin: 0; line-height: 1.6; }
.ge-reqform { display: flex; flex-direction: column; gap: 12px; margin-top: 16px; }
.ge-req-nick { font-size: 13px; color: var(--ge-text-sub) !important; padding: 2px 0; }
.ge-req-nick strong { color: var(--ge-accent) !important; font-weight: 700; }
.ge-req-guest { font-size: 12.5px; color: var(--ge-text-sub) !important; line-height: 1.55;
  padding: 9px 11px; border-radius: 9px; background: var(--ge-accent-soft); }
.ge-req-guest a { color: var(--ge-accent) !important; font-weight: 700; text-decoration: underline; }
.ge-req-guest strong { color: var(--ge-accent) !important; font-weight: 700; }
.ge-reqform label { display: flex; flex-direction: column; gap: 5px; font-size: 12.5px; font-weight: 700; color: var(--ge-text-sub) !important; }
.ge-reqform label .opt { font-weight: 500; opacity: .8; }
.ge-reqform input[type="text"] {
  padding: 11px 12px; border: 1px solid var(--ge-line); border-radius: 9px;
  background: var(--ge-page); color: var(--ge-text) !important; font-size: 14px; font-weight: 500;
}
.ge-reqform input:focus { outline: none; border-color: var(--ge-accent); }
.ge-reqform input::placeholder { color: var(--ge-text-sub); font-weight: 400; }
.ge-reqsubmit {
  margin-top: 4px; padding: 12px; border: none; border-radius: 9px; cursor: pointer;
  background: var(--ge-accent); color: #fff; font-size: 15px; font-weight: 700; transition: .15s;
}
.ge-reqsubmit:hover:not(:disabled) { filter: brightness(1.08); }
.ge-reqsubmit:disabled { opacity: .6; cursor: default; }
/* 하단 안내 */
.ge-req-notice { margin-top: 4px; padding: 12px 13px; border-radius: 10px; background: var(--ge-bg-soft); }
.ge-req-notice strong { display: block; font-size: 12.5px; font-weight: 700; color: var(--ge-text) !important; margin-bottom: 6px; }
.ge-req-notice ul { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 4px; }
.ge-req-notice li { position: relative; padding-left: 12px; font-size: 12px; line-height: 1.55; color: var(--ge-text-sub) !important; }
.ge-req-notice li::before { content: '·'; position: absolute; left: 3px; font-weight: 700; }
/* 허니팟(봇 방지) — 사람 화면엔 안 보임 */
.ge-hp { position: absolute !important; left: -9999px !important; width: 1px !important; height: 1px !important; opacity: 0 !important; pointer-events: none; }
.ge-submit-msg { margin: 12px 0 0; font-size: 13.5px; font-weight: 600; }
.ge-submit-msg.err  { color: var(--ge-c-red) !important; }
.ge-submit-msg.done { color: var(--ge-c-green) !important; }

/* 캘린더 무료 마커 — 앰버(주황) (파랑·초록·빨강·보라와 확실히 구분) */
.ge-pill.free_game { background: var(--ge-c-amber-bg); color: var(--ge-c-amber) !important; }
.ge-dot.free_game  { background: var(--ge-c-amber); }

/* 출처 링크가 있는 이벤트 행 (누르면 공식 페이지 새 탭) */
a.ge-row-event { text-decoration: none; color: inherit; cursor: pointer; }
a.ge-row-event.linked:hover { border-color: var(--ge-line-hover); box-shadow: 0 5px 16px var(--ge-shadow); }
.ge-row-ext { margin-left: 4px; font-size: 12px; color: var(--ge-text-sub) !important; font-weight: 700; }
