/* ============================================================
   RCY Network — Design System v3 · "Signal Red — Editorial Field Console"
   - Pretendard 본문 + Space Grotesk 디스플레이 + JetBrains Mono 데이터
   - 적십자 red(#e3202e)를 구조 신호로 예약 · 따뜻한 bone 캔버스 · 헤어라인 깊이
   - 코발트 보조색 · 타이트한 라운드(4–16px) · 빠른 모션 · WCAG AA
   - 자동 다크모드(warm charcoal) + 수동 토글
   ============================================================ */

@import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css');
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@500;700;800&family=Space+Grotesk:wght@500;600;700&display=swap');

:root {
  /* Brand — RCY red, now the PRIMARY / hero action color (Editorial Aurora tone) */
  --rcy-brand: #e3202e;
  --rcy-brand-hover: #c81b28;
  --rcy-brand-deep: #9d1721;
  --rcy-brand-soft: #fff1f2;
  --rcy-brand-soft-2: #ffe4e6;
  --rcy-brand-border: #ffc2c8;
  --rcy-brand-fg: #ffffff;
  --rcy-brand-bright: #c81b28;   /* red used as text on light surfaces (AA) */

  /* Accent — indigo-violet (secondary highlight / links / info / focus), echoing mockup violet */
  --rcy-accent: #5b4cf0;
  --rcy-accent-hover: #4a3bd8;
  --rcy-accent-soft: #efecff;
  --rcy-accent-soft-2: #ddd6ff;
  --rcy-accent-border: #c5bbff;
  /* Accent-2 — sky cyan (highlights · charts · data) */
  --rcy-accent-2: #0891b2;
  --rcy-accent-2-soft: #e0f7fb;

  /* Neutrals (Light) — cool graphite / mission-control */
  --rcy-bg: #f4f6fb;
  --rcy-surface: #ffffff;
  --rcy-glass: rgba(255, 255, 255, 0.72);
  --rcy-blur: blur(18px) saturate(140%);
  --rcy-surface-2: #eef1f7;
  --rcy-surface-3: #e2e7f0;
  --rcy-border: #d6dce8;
  --rcy-border-2: #c2cad9;
  --rcy-text: #0d1526;              /* cool ink */
  --rcy-text-1: var(--rcy-text);    /* alias for legacy usages */
  --rcy-radius: var(--rcy-r-xl);    /* alias for legacy usages */
  --rcy-text-2: #27324a;
  --rcy-text-muted: #525d73;        /* ≥4.5:1 */
  --rcy-text-faint: #6b7689;

  /* Glass · glow · grid (cool high-tech surfaces) */
  --rcy-glass-border: rgba(255,255,255,0.60);
  --rcy-glass-hi: linear-gradient(180deg, rgba(255,255,255,.55), rgba(255,255,255,0) 42%);
  --rcy-grid-line: rgba(13,21,38,0.055);
  --rcy-grid-line-strong: rgba(13,21,38,0.10);
  --rcy-glow-brand: 0 0 0 4px rgba(227,32,46,.18), 0 0 22px rgba(227,32,46,.18);
  --rcy-glow-accent: 0 0 0 4px rgba(91,76,240,.20), 0 0 22px rgba(91,76,240,.22);
  --rcy-glow-accent-2: 0 0 0 3px rgba(8,145,178,.20), 0 0 20px rgba(8,145,178,.22);

  /* Sidebar — deep cool console */
  --rcy-sidebar-bg: #0a0f1c;
  --rcy-sidebar-bg-2: #121a2c;
  --rcy-sidebar-text: #c2cce0;
  --rcy-sidebar-text-faint: #7c889e;
  --rcy-sidebar-text-strong: #ffffff;

  /* Semantic — WCAG AA on cool surfaces */
  --rcy-success: #0c7a52;
  --rcy-warning: #9a5a00;
  --rcy-danger:  #cc2e22;
  --rcy-info:    #0e7490;

  /* Tier (회원 등급) */
  --rcy-tier-newcomer: #64748b;
  --rcy-tier-helper: #0c7a52;
  --rcy-tier-volunteer: #5b4cf0;
  --rcy-tier-champion: #7c3aed;
  --rcy-tier-hero: #9a5a00;
  --rcy-tier-legend: linear-gradient(135deg, #0891b2, #5b4cf0, #e3202e);

  /* Typography */
  --rcy-font: 'Pretendard Variable', Pretendard, -apple-system, BlinkMacSystemFont,
              system-ui, 'Apple SD Gothic Neo', 'Noto Sans KR', 'Malgun Gothic',
              'Segoe UI', sans-serif;
  --rcy-font-display: 'Space Grotesk', 'Pretendard Variable', Pretendard, system-ui, sans-serif;
  --rcy-font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;

  --rcy-fs-xxs: 11px;
  --rcy-fs-xs: 13px;
  --rcy-fs-sm: 15px;
  --rcy-fs-base: 16px;
  --rcy-fs-lg: 20px;
  --rcy-fs-xl: 24px;
  --rcy-fs-2xl: 32px;
  --rcy-fs-3xl: 42px;
  --rcy-fs-4xl: 64px;
  --rcy-fs-5xl: 88px;            /* hero / KPI numerals */

  /* Editorial type expression */
  --rcy-fw-display: 850;
  --rcy-tracking-tight: -0.03em;
  --rcy-tracking-eyebrow: 0.09em;

  /* Spacing */
  --rcy-s1: 4px;  --rcy-s2: 8px;  --rcy-s3: 12px; --rcy-s4: 16px;
  --rcy-s5: 24px; --rcy-s6: 32px; --rcy-s7: 40px; --rcy-s8: 48px;
  --rcy-s10: 64px; --rcy-s12: 80px; --rcy-s16: 96px; --rcy-s20: 120px;

  /* Radius — architectural tightening (precise panels, not pillowy blobs) */
  --rcy-r-sm: 4px;
  --rcy-r-md: 6px;
  --rcy-r-lg: 8px;
  --rcy-r-xl: 12px;
  --rcy-r-2xl: 12px;
  --rcy-r-3xl: 16px;
  --rcy-r-hero: 16px;
  --rcy-r-pill: 999px;

  /* Shadow — cool ink-tinted, restrained */
  --rcy-shadow-xs: 0 1px 0 rgba(13,21,38,.04);
  --rcy-shadow-sm: 0 1px 2px rgba(13,21,38,.06);
  --rcy-shadow-md: 0 6px 20px rgba(13,21,38,.10);
  --rcy-shadow-lg: 0 16px 40px rgba(13,21,38,.16);
  --rcy-shadow-red: 0 2px 0 #9d1721, 0 8px 22px rgba(227,32,46,.24);

  /* Tactile "Editorial Aurora" primitives (theme-aware — bright variant here) */
  --rcy-sheen: inset 0 1px 0 0 rgba(255,255,255,.9);              /* top inset highlight */
  --rcy-card-top: linear-gradient(180deg, rgba(255,255,255,.66), transparent 46%); /* surface sheen */
  --rcy-elev-1: 0 1px 2px -1px rgba(13,21,38,.10), 0 10px 24px -14px rgba(13,21,38,.18), inset 0 1px 0 0 rgba(255,255,255,.9);
  --rcy-elev-2: 0 2px 6px -2px rgba(13,21,38,.12), 0 22px 48px -20px rgba(13,21,38,.22), inset 0 1px 0 0 rgba(255,255,255,.95);
  --rcy-cta-glow: inset 0 1px 0 0 rgba(255,255,255,.42), 0 2px 8px -2px rgba(157,23,33,.32), 0 14px 30px -10px rgba(227,32,46,.38);
  --rcy-hairline-grad: linear-gradient(90deg, transparent, rgba(13,21,38,.14) 50%, transparent);
  --rcy-well: inset 0 1px 2px rgba(13,21,38,.10), inset 0 0 0 1px rgba(13,21,38,.02);
  --rcy-accent-soft-bg: var(--rcy-accent-soft);

  /* Motion — expressive, dynamic, performant (transform/opacity) */
  --rcy-ease: cubic-bezier(.2,0,0,1);
  --rcy-ease-out-expo: cubic-bezier(.16,1,.3,1);
  --rcy-ease-spring: cubic-bezier(.34,1.56,.64,1);
  --rcy-ease-in-out: cubic-bezier(.65,0,.35,1);
  --rcy-ease-bounce: cubic-bezier(.34,1.2,.64,1);
  --rcy-dur-fast: 90ms;
  --rcy-dur: 160ms;
  --rcy-dur-slow: 260ms;
  --rcy-dur-entrance: 440ms;
  --rcy-dur-view: 360ms;
  --rcy-dur-count: 1100ms;
  --rcy-dur-ambient: 9s;
  --rcy-stagger: 55ms;
  --rcy-stagger-fast: 32ms;
  --rcy-lift: -3px;
  --rcy-lift-lg: -6px;

  /* Layout */
  --rcy-container: 1480px;
  --rcy-container-sm: 1040px;
  --rcy-gutter: var(--rcy-s4);
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
  :root:not([data-rcy-theme="light"]) {
    /* Ink canvas (Editorial Aurora) */
    --rcy-bg: #0a0c17;
    --rcy-surface: #101428;
    --rcy-glass: rgba(16, 20, 40, 0.64);
    --rcy-blur: blur(18px) saturate(130%);
    --rcy-surface-2: #161b31;
    --rcy-surface-3: #1a2039;
    --rcy-border: rgba(255,255,255,0.09);
    --rcy-border-2: rgba(255,255,255,0.14);
    --rcy-text: #eef0f8;
    --rcy-text-2: #c2c8e0;
    --rcy-text-muted: #8b93b8;
    --rcy-text-faint: #7d86ad;
    /* Brand red — punchy fills + glow (white text on fill = AA) */
    --rcy-brand: #e3202e;
    --rcy-brand-hover: #ff5a6e;
    --rcy-brand-deep: #9d1721;
    --rcy-brand-fg: #ffffff;
    --rcy-brand-bright: #ff8a96;   /* red used as text on ink (AA) */
    --rcy-brand-soft: rgba(227,32,46,.15);
    --rcy-brand-soft-2: rgba(227,32,46,.24);
    --rcy-brand-border: rgba(227,32,46,.34);
    /* Accents — violet (cool secondary) + cyan (data) */
    --rcy-accent: #7c6bff;
    --rcy-accent-hover: #968aff;
    --rcy-accent-soft: rgba(124,107,255,.16);
    --rcy-accent-soft-2: rgba(124,107,255,.26);
    --rcy-accent-border: rgba(124,107,255,.44);
    --rcy-accent-2: #38bdf8;
    --rcy-accent-2-soft: rgba(56,189,248,.16);
    /* Semantic (green=positive, amber=in-progress) */
    --rcy-success: #34d399;
    --rcy-warning: #ffb454;
    --rcy-danger: #ff6b78;
    --rcy-info: #38bdf8;
    /* Tiers */
    --rcy-tier-newcomer: #8b93b8;
    --rcy-tier-helper: #34d399;
    --rcy-tier-volunteer: #7c6bff;
    --rcy-tier-champion: #a78bfa;
    --rcy-tier-hero: #ffb454;
    --rcy-tier-legend: linear-gradient(135deg, #38bdf8, #7c6bff, #e3202e);
    /* Console / sidebar — deepest ink */
    --rcy-sidebar-bg: #06070f;
    --rcy-sidebar-bg-2: #101428;
    --rcy-sidebar-text: #c2c8e0;
    --rcy-sidebar-text-faint: #7d86ad;
    /* Glass · grid · glow */
    --rcy-glass-border: rgba(255,255,255,0.10);
    --rcy-glass-hi: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,0) 42%);
    --rcy-grid-line: rgba(255,255,255,0.06);
    --rcy-grid-line-strong: rgba(255,255,255,0.11);
    --rcy-glow-brand: 0 0 0 4px rgba(227,32,46,.22), 0 0 26px rgba(227,32,46,.36);
    --rcy-glow-accent: 0 0 0 4px rgba(124,107,255,.26), 0 0 28px rgba(124,107,255,.38);
    --rcy-glow-accent-2: 0 0 0 3px rgba(56,189,248,.24), 0 0 24px rgba(56,189,248,.36);
    /* Shadows — deep ink */
    --rcy-shadow-xs: 0 1px 0 rgba(0,0,0,.5);
    --rcy-shadow-sm: 0 1px 3px rgba(0,0,0,.6);
    --rcy-shadow-md: 0 10px 30px -6px rgba(0,0,0,.66);
    --rcy-shadow-lg: 0 26px 56px -14px rgba(0,0,0,.74);
    --rcy-shadow-red: 0 2px 0 #9d1721, 0 10px 26px rgba(227,32,46,.34);
    /* Tactile primitives — dark variant */
    --rcy-sheen: inset 0 1px 0 0 rgba(255,255,255,.06);
    --rcy-card-top: linear-gradient(180deg, rgba(255,255,255,.05), transparent 42%);
    --rcy-elev-1: 0 1px 2px -1px rgba(0,0,0,.6), 0 10px 26px -14px rgba(0,0,0,.74), inset 0 1px 0 0 rgba(255,255,255,.06);
    --rcy-elev-2: 0 2px 6px -2px rgba(0,0,0,.7), 0 26px 56px -18px rgba(0,0,0,.8), inset 0 1px 0 0 rgba(255,255,255,.09);
    --rcy-cta-glow: inset 0 1px 0 0 rgba(255,255,255,.22), 0 2px 8px -2px rgba(70,9,15,.55), 0 14px 32px -8px rgba(227,32,46,.45);
    --rcy-hairline-grad: linear-gradient(90deg, transparent, rgba(255,255,255,.14) 50%, transparent);
    --rcy-well: inset 0 1px 2px rgba(0,0,0,.55), inset 0 0 0 1px rgba(255,255,255,.02);
  }
}
:root[data-rcy-theme="dark"] {
  /* Ink canvas (Editorial Aurora) */
  --rcy-bg: #0a0c17;
  --rcy-surface: #101428;
  --rcy-glass: rgba(16, 20, 40, 0.64);
  --rcy-blur: blur(18px) saturate(130%);
  --rcy-surface-2: #161b31;
  --rcy-surface-3: #1a2039;
  --rcy-border: rgba(255,255,255,0.09);
  --rcy-border-2: rgba(255,255,255,0.14);
  --rcy-text: #eef0f8;
  --rcy-text-2: #c2c8e0;
  --rcy-text-muted: #8b93b8;
  --rcy-text-faint: #7d86ad;
  /* Brand red — punchy fills + glow (white text on fill = AA) */
  --rcy-brand: #e3202e;
  --rcy-brand-hover: #ff5a6e;
  --rcy-brand-deep: #9d1721;
  --rcy-brand-fg: #ffffff;
  --rcy-brand-bright: #ff8a96;
  --rcy-brand-soft: rgba(227,32,46,.15);
  --rcy-brand-soft-2: rgba(227,32,46,.24);
  --rcy-brand-border: rgba(227,32,46,.34);
  /* Accents — violet (cool secondary) + cyan (data) */
  --rcy-accent: #7c6bff;
  --rcy-accent-hover: #968aff;
  --rcy-accent-soft: rgba(124,107,255,.16);
  --rcy-accent-soft-2: rgba(124,107,255,.26);
  --rcy-accent-border: rgba(124,107,255,.44);
  --rcy-accent-2: #38bdf8;
  --rcy-accent-2-soft: rgba(56,189,248,.16);
  /* Semantic */
  --rcy-success: #34d399;
  --rcy-warning: #ffb454;
  --rcy-danger: #ff6b78;
  --rcy-info: #38bdf8;
  /* Tiers */
  --rcy-tier-newcomer: #8b93b8;
  --rcy-tier-helper: #34d399;
  --rcy-tier-volunteer: #7c6bff;
  --rcy-tier-champion: #a78bfa;
  --rcy-tier-hero: #ffb454;
  --rcy-tier-legend: linear-gradient(135deg, #38bdf8, #7c6bff, #e3202e);
  /* Console / sidebar — deepest ink */
  --rcy-sidebar-bg: #06070f;
  --rcy-sidebar-bg-2: #101428;
  --rcy-sidebar-text: #c2c8e0;
  --rcy-sidebar-text-faint: #7d86ad;
  /* Glass · grid · glow */
  --rcy-glass-border: rgba(255,255,255,0.10);
  --rcy-glass-hi: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,0) 42%);
  --rcy-grid-line: rgba(255,255,255,0.06);
  --rcy-grid-line-strong: rgba(255,255,255,0.11);
  --rcy-glow-brand: 0 0 0 4px rgba(227,32,46,.22), 0 0 26px rgba(227,32,46,.36);
  --rcy-glow-accent: 0 0 0 4px rgba(124,107,255,.26), 0 0 28px rgba(124,107,255,.38);
  --rcy-glow-accent-2: 0 0 0 3px rgba(56,189,248,.24), 0 0 24px rgba(56,189,248,.36);
  /* Shadows — deep ink */
  --rcy-shadow-xs: 0 1px 0 rgba(0,0,0,.5);
  --rcy-shadow-sm: 0 1px 3px rgba(0,0,0,.6);
  --rcy-shadow-md: 0 10px 30px -6px rgba(0,0,0,.66);
  --rcy-shadow-lg: 0 26px 56px -14px rgba(0,0,0,.74);
  --rcy-shadow-red: 0 2px 0 #9d1721, 0 10px 26px rgba(227,32,46,.34);
  /* Tactile primitives — dark variant */
  --rcy-sheen: inset 0 1px 0 0 rgba(255,255,255,.06);
  --rcy-card-top: linear-gradient(180deg, rgba(255,255,255,.05), transparent 42%);
  --rcy-elev-1: 0 1px 2px -1px rgba(0,0,0,.6), 0 10px 26px -14px rgba(0,0,0,.74), inset 0 1px 0 0 rgba(255,255,255,.06);
  --rcy-elev-2: 0 2px 6px -2px rgba(0,0,0,.7), 0 26px 56px -18px rgba(0,0,0,.8), inset 0 1px 0 0 rgba(255,255,255,.09);
  --rcy-cta-glow: inset 0 1px 0 0 rgba(255,255,255,.22), 0 2px 8px -2px rgba(70,9,15,.55), 0 14px 32px -8px rgba(227,32,46,.45);
  --rcy-hairline-grad: linear-gradient(90deg, transparent, rgba(255,255,255,.14) 50%, transparent);
  --rcy-well: inset 0 1px 2px rgba(0,0,0,.55), inset 0 0 0 1px rgba(255,255,255,.02);
}

/* Body background (when RCY shortcode is the main content) */
body.rcy-body,
body.page-template-default { background-color: var(--rcy-bg); }

/* ---------- Reset (scoped) ---------- */
.rcy, .rcy * { box-sizing: border-box; }
.rcy {
  font-family: var(--rcy-font);
  color: var(--rcy-text);
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.rcy img, .rcy svg, .rcy video { max-width: 100%; height: auto; }

/* Scrollbar */
.rcy ::-webkit-scrollbar { width: 6px; height: 6px; }
.rcy ::-webkit-scrollbar-track { background: transparent; }
.rcy ::-webkit-scrollbar-thumb { background: var(--rcy-text-faint); border-radius: var(--rcy-r-pill); }
.rcy ::-webkit-scrollbar-thumb:hover { background: var(--rcy-text-muted); }

/* ---------- Layout ---------- */
.rcy-container { max-width: min(var(--rcy-container), calc(100vw - 48px)); margin: 0 auto; padding: 0 var(--rcy-gutter); }
.rcy-container--sm { max-width: var(--rcy-container-sm); }
.rcy-stack > * + * { margin-top: var(--rcy-s4); }
.rcy-stack--sm > * + * { margin-top: var(--rcy-s2); }
.rcy-stack--lg > * + * { margin-top: var(--rcy-s6); }
.rcy-row { display: flex; gap: var(--rcy-s4); flex-wrap: wrap; align-items: center; }
.rcy-row--between { justify-content: space-between; }
.rcy-row--center { justify-content: center; }
/* minmax(min(100%, Npx), 1fr): 컨테이너가 N px 보다 좁으면 1열로 떨어져 가로 오버플로우 방지 */
.rcy-grid { display: grid; gap: var(--rcy-s6); grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); }
.rcy-grid--2 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr)); }
.rcy-grid--3 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); }
.rcy-grid--4 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 200px), 1fr)); }

/* ---------- Typography ---------- */
.rcy h1, .rcy .rcy-h1 {
  font-size: var(--rcy-fs-3xl); font-weight: 900;
  letter-spacing: -.02em; margin: 0 0 var(--rcy-s4);
  color: var(--rcy-text);
}
.rcy h2, .rcy .rcy-h2 {
  font-size: var(--rcy-fs-2xl); font-weight: 800;
  letter-spacing: -.01em; margin: var(--rcy-s10) 0 var(--rcy-s5);
}
.rcy h3, .rcy .rcy-h3 {
  font-size: var(--rcy-fs-xl); font-weight: 800;
  margin: var(--rcy-s7) 0 var(--rcy-s3);
}
.rcy .rcy-muted { color: var(--rcy-text-muted); }
.rcy .rcy-faint { color: var(--rcy-text-faint); font-size: var(--rcy-fs-sm); }
.rcy .rcy-mono { font-family: var(--rcy-font-mono); font-size: .9em; }
.rcy .rcy-eyebrow {
  display: inline-block;
  padding: 4px 12px;
  background: var(--rcy-brand-soft);
  color: var(--rcy-brand);
  font-size: var(--rcy-fs-xxs); font-weight: 800;
  border-radius: var(--rcy-r-pill);
  border: 1px solid var(--rcy-brand-border);
  text-transform: uppercase; letter-spacing: .12em;
  vertical-align: middle;
}

/* ---------- Card (design pattern: bg-white rounded-[2.5rem] p-8 shadow-sm border) ---------- */
.rcy-card {
  background: var(--rcy-glass);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-hero);
  padding: var(--rcy-s8);
  box-shadow: var(--rcy-shadow-sm);
  transition: box-shadow var(--rcy-dur) var(--rcy-ease), transform var(--rcy-dur) var(--rcy-ease), border-color var(--rcy-dur) var(--rcy-ease), backdrop-filter var(--rcy-dur) var(--rcy-ease);
  backdrop-filter: var(--rcy-blur);
  -webkit-backdrop-filter: var(--rcy-blur);
  position: relative;
}
.rcy-card--hover:hover {
  box-shadow: var(--rcy-shadow-md);
  transform: translateY(-2px);
  border-color: var(--rcy-brand-border);
}
.rcy-card--sm { padding: var(--rcy-s5); border-radius: var(--rcy-r-xl); }
.rcy-card--md { padding: var(--rcy-s6); border-radius: var(--rcy-r-2xl); }
.rcy-card__head {
  display: flex; justify-content: space-between; align-items: baseline;
  margin-bottom: var(--rcy-s5); gap: var(--rcy-s3);
}
.rcy-card__title {
  font-weight: 800; font-size: var(--rcy-fs-lg);
  display: flex; align-items: center; gap: var(--rcy-s2);
}
.rcy-card__meta { color: var(--rcy-text-muted); font-size: var(--rcy-fs-sm); }
.rcy-card__accent {
  position: absolute; top: 0; left: 0; right: 0; height: 6px;
  background: var(--rcy-brand);
  border-radius: var(--rcy-r-hero) var(--rcy-r-hero) 0 0;
}

/* ---------- Stat box (design pattern: small label + big bold number) ---------- */
.rcy-stat {
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-2xl);
  padding: var(--rcy-s5) var(--rcy-s5);
}
.rcy-stat__label {
  display: block;
  font-size: var(--rcy-fs-xxs); font-weight: 800;
  color: var(--rcy-text-faint);
  text-transform: uppercase; letter-spacing: .14em;
}
.rcy-stat__value {
  display: block; margin-top: var(--rcy-s2);
  font-size: var(--rcy-fs-2xl); font-weight: 900;
  color: var(--rcy-brand);
  letter-spacing: -.02em;
}
.rcy-stat__value--dark { color: var(--rcy-text); }
.rcy-stat__sub {
  display: block; margin-top: var(--rcy-s1);
  font-size: var(--rcy-fs-xs); color: var(--rcy-text-faint);
}
/* Stat row container (design 패턴: 작은 통계 박스들 묶음) */
.rcy-stat-row {
  display: inline-flex;
  background: var(--rcy-surface);
  border-radius: var(--rcy-r-2xl);
  border: 1px solid var(--rcy-border);
  box-shadow: var(--rcy-shadow-xs);
  padding: var(--rcy-s2);
}
.rcy-stat-row > .rcy-stat-row__cell {
  padding: var(--rcy-s2) var(--rcy-s4); text-align: center;
}
.rcy-stat-row > .rcy-stat-row__cell + .rcy-stat-row__cell {
  border-left: 1px solid var(--rcy-border);
}

/* ---------- Button ---------- */
.rcy-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--rcy-s2);
  padding: var(--rcy-s3) var(--rcy-s5);
  background: var(--rcy-surface-2);
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-lg);
  color: var(--rcy-text); font-size: var(--rcy-fs-sm); font-weight: 700;
  cursor: pointer; text-decoration: none;
  transition: background var(--rcy-dur) var(--rcy-ease), transform var(--rcy-dur-fast) var(--rcy-ease), box-shadow var(--rcy-dur);
  white-space: nowrap;
}
.rcy-btn:hover { background: var(--rcy-surface-3); }
.rcy-btn:active { transform: translateY(1px); }
.rcy-btn--primary {
  background: var(--rcy-brand); color: var(--rcy-brand-fg);
  border-color: var(--rcy-brand);
  box-shadow: var(--rcy-shadow-red);
}
.rcy-btn--primary:hover { background: var(--rcy-brand-hover); border-color: var(--rcy-brand-hover); }
.rcy-btn--dark {
  background: #0d1526; color: white; border-color: #0d1526;
  box-shadow: 0 10px 15px -3px rgba(13,21,38,.2);
}
.rcy-btn--dark:hover { background: #000; }
.rcy-btn--ghost { background: transparent; border-color: transparent; }
.rcy-btn--ghost:hover { background: var(--rcy-surface-2); }
.rcy-btn--danger { background: var(--rcy-danger); color: white; border-color: var(--rcy-danger); }
.rcy-btn--soft {
  background: var(--rcy-brand-soft); color: var(--rcy-brand);
  border-color: var(--rcy-brand-border);
}
.rcy-btn--sm { padding: var(--rcy-s1) var(--rcy-s3); font-size: var(--rcy-fs-xs); border-radius: var(--rcy-r-md); }
.rcy-btn--lg { padding: var(--rcy-s4) var(--rcy-s7); font-size: var(--rcy-fs-base); border-radius: var(--rcy-r-xl); }
.rcy-btn--block { width: 100%; }
.rcy-btn[disabled], .rcy-btn:disabled { opacity: .5; cursor: not-allowed; }

/* ---------- Filter chip group (design pattern: bg-slate-200/50 p-1 rounded-2xl) ---------- */
.rcy-chips {
  display: inline-flex; gap: 0;
  background: var(--rcy-surface-3);
  padding: 4px;
  border-radius: var(--rcy-r-xl);
}
.rcy-chip {
  flex: 0 0 auto;
  display: inline-flex; align-items: center; gap: var(--rcy-s2);
  padding: var(--rcy-s2) var(--rcy-s5);
  background: transparent; color: var(--rcy-text-muted);
  border: 0; border-radius: var(--rcy-r-lg);
  font-size: var(--rcy-fs-sm); font-weight: 700;
  cursor: pointer; white-space: nowrap;
  transition: color var(--rcy-dur);
}
.rcy-chip:hover { color: var(--rcy-text); }
.rcy-chip.is-active {
  background: var(--rcy-surface);
  color: var(--rcy-text);
  box-shadow: var(--rcy-shadow-xs);
}

/* ---------- Badge / pill ---------- */
.rcy-badge {
  display: inline-flex; align-items: center; gap: var(--rcy-s1);
  padding: 3px var(--rcy-s2);
  background: var(--rcy-surface-2);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-md);
  font-size: var(--rcy-fs-xxs); font-weight: 800; color: var(--rcy-text-muted);
  text-transform: uppercase; letter-spacing: .04em;
}
.rcy-badge--brand { background: var(--rcy-brand-soft); color: var(--rcy-brand); border-color: var(--rcy-brand-border); }
.rcy-badge--success { background: rgba(14,143,94,.1); color: var(--rcy-success); border-color: rgba(14,143,94,.3); }
.rcy-badge--warn { background: rgba(180,95,6,.1); color: var(--rcy-warning); border-color: rgba(180,95,6,.3); }
.rcy-badge--warning { background: rgba(180,95,6,.1); color: var(--rcy-warning); border-color: rgba(180,95,6,.3); }
.rcy-badge--danger { background: rgba(211,58,44,.1); color: var(--rcy-danger); border-color: rgba(211,58,44,.3); }
.rcy-badge--info { background: rgba(31,76,255,.1); color: var(--rcy-info); border-color: rgba(31,76,255,.3); }
.rcy-badge--dot::before {
  content: ''; width: 6px; height: 6px; border-radius: 50%;
  background: currentColor; display: inline-block;
  animation: rcy-pulse 1.6s infinite;
}
@keyframes rcy-pulse {
  0%,100% { opacity: 1; transform: scale(1); }
  50% { opacity: .5; transform: scale(.8); }
}

/* Tier badge */
.rcy-tier {
  display: inline-block; padding: 3px var(--rcy-s2);
  border-radius: var(--rcy-r-pill);
  font-size: var(--rcy-fs-xxs); font-weight: 800; color: white;
  text-transform: uppercase; letter-spacing: .08em;
}
.rcy-tier--newcomer { background: var(--rcy-tier-newcomer); }
.rcy-tier--helper { background: var(--rcy-tier-helper); }
.rcy-tier--volunteer { background: var(--rcy-tier-volunteer); }
.rcy-tier--champion { background: var(--rcy-tier-champion); }
.rcy-tier--hero { background: var(--rcy-tier-hero); }
.rcy-tier--legend { background: var(--rcy-tier-legend); animation: rcy-shimmer 3s linear infinite; background-size: 200% 100%; }
@keyframes rcy-shimmer { from { background-position: 0% 50%; } to { background-position: 200% 50%; } }

/* ---------- Form ---------- */
.rcy-field { display: flex; flex-direction: column; gap: var(--rcy-s2); }
.rcy-field__label {
  font-size: var(--rcy-fs-xs); font-weight: 800;
  color: var(--rcy-text-2); padding-left: 4px;
}
.rcy-field__hint { font-size: var(--rcy-fs-xs); color: var(--rcy-text-faint); padding-left: 4px; }
.rcy-input, .rcy-select, .rcy-textarea {
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-xl);
  color: var(--rcy-text);
  padding: var(--rcy-s4) var(--rcy-s5);
  font-size: var(--rcy-fs-sm); font-family: inherit;
  transition: border-color var(--rcy-dur), box-shadow var(--rcy-dur), background var(--rcy-dur);
  width: 100%;
  font-weight: 600;
}
.rcy-input:focus, .rcy-select:focus, .rcy-textarea:focus {
  outline: none; border-color: var(--rcy-brand);
  box-shadow: 0 0 0 4px rgba(227,32,46,.12);
}
.rcy-input[disabled] {
  background: var(--rcy-surface-2); color: var(--rcy-text-faint);
  cursor: not-allowed;
}
.rcy-textarea { min-height: 140px; resize: vertical; line-height: 1.6; font-weight: 500; }
.rcy-input--pill { border-radius: var(--rcy-r-pill); padding-left: var(--rcy-s5); padding-right: var(--rcy-s5); }
.rcy-datetime-block {
  display: grid;
  grid-template-columns: 32px minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  width: 100%;
  min-height: 44px;
  padding: 4px 8px 4px 10px;
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-md);
  background: var(--rcy-surface);
  transition: border-color var(--rcy-dur), box-shadow var(--rcy-dur), background var(--rcy-dur);
}
.rcy-datetime-block:focus-within {
  border-color: var(--rcy-brand);
  box-shadow: 0 0 0 3px rgba(227,32,46,.14);
}
.rcy-datetime-block__source { display: none !important; }
.rcy-datetime-block__icon {
  width: 30px;
  height: 30px;
  border-radius: var(--rcy-r-md);
  background: var(--rcy-brand-soft);
  position: relative;
}
.rcy-datetime-block__icon::before {
  content: '';
  position: absolute;
  left: 8px;
  top: 8px;
  width: 14px;
  height: 13px;
  border: 2px solid var(--rcy-brand);
  border-radius: 4px;
}
.rcy-datetime-block__icon::after {
  content: '';
  position: absolute;
  left: 11px;
  top: 12px;
  width: 8px;
  height: 2px;
  border-radius: 2px;
  background: var(--rcy-brand);
}
.rcy-datetime-block--time .rcy-datetime-block__icon::before {
  left: 8px;
  top: 8px;
  width: 14px;
  height: 14px;
  border-radius: 50%;
}
.rcy-datetime-block--time .rcy-datetime-block__icon::after {
  left: 15px;
  top: 11px;
  width: 2px;
  height: 8px;
  transform: rotate(35deg);
  transform-origin: bottom center;
}
.rcy-datetime-block__fields {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  min-width: 0;
}
.rcy-datetime-block--date .rcy-datetime-block__fields,
.rcy-datetime-block--time .rcy-datetime-block__fields {
  grid-template-columns: minmax(0, 1fr);
}
.rcy-datetime-block__part {
  width: 100%;
  min-width: 0;
  height: 36px;
  border: 0;
  border-radius: var(--rcy-r-md);
  background: var(--rcy-surface-2);
  color: var(--rcy-text);
  padding: 0 10px;
  font: inherit;
  font-size: var(--rcy-fs-sm);
  font-weight: 600;
}
.rcy-datetime-block__part:focus {
  outline: 2px solid var(--rcy-brand-border);
  outline-offset: 0;
}
.rcy-datetime-block__part:disabled {
  color: var(--rcy-text-faint);
  cursor: not-allowed;
}
.rcy-datetime-block__status {
  max-width: 112px;
  color: var(--rcy-text-faint);
  font-size: 11px;
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
@media (max-width: 520px) {
  .rcy-datetime-block {
    grid-template-columns: 30px minmax(0, 1fr);
  }
  .rcy-datetime-block__status { display: none; }
  .rcy-datetime-block__fields { grid-template-columns: minmax(0, 1fr); }
}
.rcy-search {
  position: relative;
}
.rcy-search > .rcy-input { padding-left: var(--rcy-s10); }
.rcy-search > svg, .rcy-search > i {
  position: absolute; left: var(--rcy-s4); top: 50%; transform: translateY(-50%);
  color: var(--rcy-text-faint); pointer-events: none;
}

/* ---------- Table ---------- */
.rcy-table { width: 100%; border-collapse: collapse; font-size: var(--rcy-fs-sm); }
.rcy-table th {
  font-weight: 800; color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xxs); text-transform: uppercase; letter-spacing: .08em;
  padding: var(--rcy-s4) var(--rcy-s4); text-align: left;
  border-bottom: 1px solid var(--rcy-border);
  background: var(--rcy-surface-2);
}
.rcy-table td {
  padding: var(--rcy-s4) var(--rcy-s4); text-align: left;
  border-bottom: 1px solid var(--rcy-border);
  font-weight: 500;
}
.rcy-table tr:hover td { background: var(--rcy-surface-2); }
.rcy-table tr:last-child td { border-bottom: 0; }
.rcy-table--compact th, .rcy-table--compact td { padding: var(--rcy-s2) var(--rcy-s3); }
.rcy-table-wrap {
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-2xl);
  overflow: hidden;
}

/* ---------- Progress ---------- */
.rcy-progress {
  width: 100%; height: 8px; background: var(--rcy-surface-2);
  border-radius: var(--rcy-r-pill); overflow: hidden;
}
.rcy-progress__bar {
  height: 100%; background: var(--rcy-brand);
  border-radius: var(--rcy-r-pill);
  transition: width var(--rcy-dur-slow) var(--rcy-ease);
}
.rcy-progress--gradient .rcy-progress__bar {
  background: linear-gradient(90deg, var(--rcy-brand), var(--rcy-brand-hover));
}

/* ---------- Project card (design 패턴) ---------- */
.rcy-project {
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-3xl);
  padding: var(--rcy-s6);
  display: flex; flex-direction: column;
  transition: all var(--rcy-dur-slow) var(--rcy-ease);
  cursor: pointer; height: 100%;
}
.rcy-project:hover {
  transform: translateY(-6px);
  box-shadow: var(--rcy-shadow-md);
  border-color: var(--rcy-brand-border);
}
.rcy-project__top { display: flex; gap: var(--rcy-s2); margin-bottom: var(--rcy-s4); align-items: center; }
.rcy-project__title {
  font-size: var(--rcy-fs-lg); font-weight: 800;
  color: var(--rcy-text); margin: 0 0 var(--rcy-s2);
  line-height: 1.3;
}
.rcy-project__summary {
  font-size: var(--rcy-fs-sm); color: var(--rcy-text-muted);
  margin: 0 0 var(--rcy-s5);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden; flex: 1;
}
.rcy-project__meta {
  display: flex; flex-direction: column; gap: var(--rcy-s2);
  font-size: var(--rcy-fs-xs); color: var(--rcy-text-2); font-weight: 700;
  margin-bottom: var(--rcy-s5);
}
.rcy-project__meta-row { display: flex; align-items: center; gap: var(--rcy-s2); }
.rcy-project__meta-row .ico { color: var(--rcy-text-faint); width: 14px; height: 14px; flex: 0 0 auto; }
.rcy-project__footer {
  padding-top: var(--rcy-s4);
  border-top: 1px solid var(--rcy-border);
  margin-top: auto;
}
.rcy-project__count {
  display: flex; justify-content: space-between;
  font-size: var(--rcy-fs-xs); font-weight: 800;
  margin-bottom: var(--rcy-s2);
}
.rcy-project__count > .lbl { color: var(--rcy-text-muted); }
.rcy-project__count > .val { color: var(--rcy-text); }
.rcy-project__count > .val .max { color: var(--rcy-text-faint); font-weight: 600; }
.rcy-project__media {
  aspect-ratio: 16 / 9;
  margin: calc(var(--rcy-s6) * -1) calc(var(--rcy-s6) * -1) var(--rcy-s5);
  border-radius: var(--rcy-r-3xl) var(--rcy-r-3xl) 0 0;
  border-bottom: 1px solid var(--rcy-border);
  overflow: hidden;
  background: var(--rcy-surface-2);
}
.rcy-project__media img,
.rcy-activity-detail__hero img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.rcy-modal:has(.rcy-activity-create),
.rcy-modal:has(.rcy-activity-detail) {
  max-width: min(820px, 96vw);
}
.rcy-activity-create {
  display: grid;
  gap: var(--rcy-s4);
}
.rcy-activity-create__section {
  display: grid;
  gap: var(--rcy-s4);
  padding: var(--rcy-s5);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface);
}
.rcy-activity-create__section > .rcy-h3 {
  margin: 0;
  padding-bottom: var(--rcy-s3);
  border-bottom: 1px solid var(--rcy-border);
  font-size: var(--rcy-fs-lg);
}
.rcy-activity-create__upload {
  display: grid;
  gap: var(--rcy-s2);
}
.rcy-activity-create__upload input[type="file"] {
  width: 100%;
  padding: var(--rcy-s3);
  border: 1px dashed var(--rcy-border-2);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface-2);
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-sm);
}
.rcy-activity-detail {
  display: grid;
  gap: var(--rcy-s4);
}
.rcy-activity-detail__hero {
  aspect-ratio: 16 / 7;
  border-radius: var(--rcy-r-sm);
  border: 1px solid var(--rcy-border);
  overflow: hidden;
  background: var(--rcy-surface-2);
}
.rcy-activity-detail__facts {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--rcy-s3);
}
.rcy-activity-detail__facts > div {
  min-width: 0;
  padding: var(--rcy-s3);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface-2);
}
.rcy-activity-detail__facts span {
  display: block;
  margin-bottom: 4px;
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xs);
  font-weight: 800;
}
.rcy-activity-detail__facts strong {
  display: block;
  color: var(--rcy-text);
  font-size: var(--rcy-fs-sm);
  line-height: 1.45;
  overflow-wrap: anywhere;
}
.rcy-activity-detail__desc {
  padding-top: var(--rcy-s4);
  border-top: 1px solid var(--rcy-border);
  color: var(--rcy-text-2);
  line-height: 1.75;
  white-space: pre-wrap;
}
@media (max-width: 640px) {
  .rcy-activity-detail__facts {
    grid-template-columns: 1fr;
  }
  .rcy-activity-create__section {
    padding: var(--rcy-s4);
  }
}

/* ---------- Activity item (단순 row 형) ---------- */
.rcy-activity-item {
  display: grid; grid-template-columns: 80px 1fr auto; gap: var(--rcy-s4);
  padding: var(--rcy-s4) var(--rcy-s5);
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-xl);
  align-items: center;
  transition: background var(--rcy-dur), border-color var(--rcy-dur);
  text-decoration: none; color: inherit;
}
.rcy-activity-item:hover { border-color: var(--rcy-brand-border); }
.rcy-activity-item__date {
  text-align: center; padding: var(--rcy-s2);
  background: var(--rcy-brand-soft); color: var(--rcy-brand);
  border-radius: var(--rcy-r-md);
}
.rcy-activity-item__date .d { font-size: var(--rcy-fs-xl); font-weight: 900; line-height: 1; }
.rcy-activity-item__date .m { font-size: var(--rcy-fs-xxs); font-weight: 700; margin-top: 2px; }
.rcy-activity-item__title { font-weight: 800; font-size: var(--rcy-fs-base); color: var(--rcy-text); }
.rcy-activity-item__meta { color: var(--rcy-text-muted); font-size: var(--rcy-fs-xs); margin-top: 4px; display: flex; gap: var(--rcy-s3); flex-wrap: wrap; font-weight: 600; }

/* ---------- Hero ---------- */
.rcy-hero {
  background: linear-gradient(135deg, var(--rcy-brand) 0%, var(--rcy-brand-deep) 100%);
  color: var(--rcy-brand-fg);
  padding: var(--rcy-s16) var(--rcy-s8);
  border-radius: var(--rcy-r-hero);
  text-align: center;
  position: relative; overflow: hidden;
  margin-bottom: var(--rcy-s10);
}
.rcy-hero::before, .rcy-hero::after {
  content: ""; position: absolute; width: 400px; height: 400px; border-radius: 50%;
  background: rgba(255,255,255,.06); pointer-events: none;
}
.rcy-hero::before { top: -150px; right: -100px; }
.rcy-hero::after  { bottom: -150px; left: -100px; }
.rcy-hero__eyebrow {
  display: inline-block; padding: 4px 14px;
  background: rgba(255,255,255,.16); color: white;
  font-size: var(--rcy-fs-xxs); font-weight: 800;
  border-radius: var(--rcy-r-pill);
  text-transform: uppercase; letter-spacing: .12em;
  position: relative; margin-bottom: var(--rcy-s4);
}
.rcy-hero__title {
  font-size: clamp(32px, 6vw, 72px); font-weight: 900;
  margin: 0 0 var(--rcy-s4); letter-spacing: -.03em;
  position: relative; line-height: 1.1;
}
.rcy-hero__subtitle {
  font-size: var(--rcy-fs-lg); opacity: .9;
  margin: 0 0 var(--rcy-s8); position: relative;
}
.rcy-hero__actions { position: relative; display: inline-flex; gap: var(--rcy-s3); flex-wrap: wrap; justify-content: center; }
.rcy-hero .rcy-btn--primary, .rcy-hero .rcy-tw-button-primary { background: white; color: var(--rcy-brand); border-color: white; box-shadow: 0 10px 30px rgba(0,0,0,.18); }
.rcy-hero .rcy-btn--primary:hover, .rcy-hero .rcy-tw-button-primary:hover { background: rgba(255,255,255,.92); }
.rcy-hero .rcy-btn--ghost, .rcy-hero .rcy-tw-button-ghost { background: rgba(255,255,255,.12); color: white; border-color: rgba(255,255,255,.3); }
.rcy-hero .rcy-btn--ghost:hover, .rcy-hero .rcy-tw-button-ghost:hover { background: rgba(255,255,255,.22); }

/* ---------- Notice banner ---------- */
.rcy-notice {
  display: flex; align-items: flex-start; gap: var(--rcy-s3);
  padding: var(--rcy-s4) var(--rcy-s5);
  background: rgba(31,76,255,.06);
  border: 1px solid rgba(31,76,255,.2);
  border-left: 4px solid var(--rcy-info);
  border-radius: var(--rcy-r-xl);
  font-size: var(--rcy-fs-sm);
  color: var(--rcy-text-2);
}
.rcy-notice strong { color: var(--rcy-text); font-weight: 800; }
.rcy-notice--urgent { border-left-color: var(--rcy-danger); background: rgba(211,58,44,.06); border-color: rgba(211,58,44,.2); }
.rcy-notice--notice { border-left-color: var(--rcy-warning); background: rgba(180,95,6,.06); border-color: rgba(180,95,6,.2); }

/* Empty state */
.rcy-empty {
  text-align: center; padding: var(--rcy-s16) var(--rcy-s6);
  background: var(--rcy-surface);
  border: 1px dashed var(--rcy-border-2);
  border-radius: var(--rcy-r-3xl);
  color: var(--rcy-text-muted);
}
.rcy-empty__icon { font-size: 48px; margin-bottom: var(--rcy-s3); opacity: .5; }
.rcy-empty__title { font-weight: 800; color: var(--rcy-text); margin-bottom: var(--rcy-s2); font-size: var(--rcy-fs-base); }
.rcy-empty__desc { font-size: var(--rcy-fs-sm); margin-top: var(--rcy-s2); }

/* Skeleton */
.rcy-skeleton {
  background: linear-gradient(90deg, var(--rcy-surface-2) 0%, var(--rcy-surface-3) 50%, var(--rcy-surface-2) 100%);
  background-size: 200% 100%;
  animation: rcy-skel 1.4s linear infinite;
  border-radius: var(--rcy-r-md);
  height: 1em; width: 100%;
}
@keyframes rcy-skel { from { background-position: 200% 0; } to { background-position: -200% 0; } }

/* Toast */
.rcy-toast-wrap {
  position: fixed; bottom: var(--rcy-s5); right: var(--rcy-s5); z-index: 9999;
  display: flex; flex-direction: column; gap: var(--rcy-s2);
  pointer-events: none;
}
.rcy-toast {
  display: flex; align-items: center; gap: 8px;
  background: var(--rcy-text); color: var(--rcy-bg);
  padding: var(--rcy-s3) var(--rcy-s4); border-radius: var(--rcy-r-md);
  box-shadow: var(--rcy-shadow-lg); font-size: var(--rcy-fs-sm); font-weight: 600;
  line-height: 1.45; pointer-events: auto; min-width: 240px; max-width: 380px;
  animation: rcy-toast-in var(--rcy-dur) var(--rcy-ease);
}
.rcy-toast--success { background: var(--rcy-success); color: white; }
.rcy-toast--error { background: var(--rcy-danger); color: white; }
@keyframes rcy-toast-in { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }

/* Modal */
.rcy-modal-back {
  position: fixed; inset: 0; background: rgba(13,21,38,.55); backdrop-filter: blur(4px);
  display: flex; align-items: center; justify-content: center;
  z-index: 9998; padding: var(--rcy-s4);
  animation: rcy-fade var(--rcy-dur);
}
.rcy-modal {
  background: var(--rcy-surface); border-radius: var(--rcy-r-3xl);
  max-width: 560px; width: 100%; max-height: 90vh; overflow: auto;
  padding: var(--rcy-s8); box-shadow: var(--rcy-shadow-lg);
  animation: rcy-pop var(--rcy-dur-slow) var(--rcy-ease-bounce);
}
@keyframes rcy-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes rcy-pop { from { transform: scale(.94); opacity: 0; } to { transform: scale(1); opacity: 1; } }

/* PWA install banner */
.rcy-pwa-banner {
  position: fixed; bottom: calc(var(--rcy-s5) + env(safe-area-inset-bottom, 0px));
  left: 50%; transform: translate(-50%, 140%);
  background: var(--rcy-surface, #fff); color: var(--rcy-text);
  padding: var(--rcy-s3) var(--rcy-s4); border-radius: var(--rcy-r-lg, 18px);
  border: 1px solid var(--rcy-border-2, rgba(0,0,0,.08));
  box-shadow: var(--rcy-shadow-lg); display: flex; align-items: center; gap: var(--rcy-s3);
  z-index: 9997; font-size: var(--rcy-fs-sm);
  width: min(440px, calc(100vw - 32px));
  opacity: 0; transition: transform .28s cubic-bezier(.2,.8,.2,1), opacity .28s ease;
}
.rcy-pwa-banner.is-in { transform: translate(-50%, 0); opacity: 1; }
.rcy-pwa-banner__ico {
  flex: 0 0 auto; width: 38px; height: 38px; border-radius: 12px;
  display: grid; place-items: center; background: var(--rcy-brand, #c81b28); color: #fff;
}
.rcy-pwa-banner__ico svg { width: 20px; height: 20px; }
.rcy-pwa-banner__txt { display: flex; flex-direction: column; gap: 2px; line-height: 1.35; min-width: 0; flex: 1 1 auto; }
.rcy-pwa-banner__txt strong { font-weight: 800; font-size: var(--rcy-fs-sm); }
.rcy-pwa-banner__txt span { font-size: var(--rcy-fs-xs); color: var(--rcy-text-muted, #667); }
@media (max-width: 520px) {
  .rcy-pwa-banner { flex-wrap: wrap; }
  .rcy-pwa-banner__txt { flex-basis: calc(100% - 50px); }
}

/* Emergency mode banner */
.rcy-emergency-banner {
  background: var(--rcy-danger); color: white;
  padding: var(--rcy-s3) var(--rcy-s5);
  text-align: center; font-weight: 800;
  position: sticky; top: 0; z-index: 100;
  border-radius: var(--rcy-r-md);
  animation: rcy-em-pulse 2.5s ease-in-out infinite;
  margin-bottom: var(--rcy-s4);
}
@keyframes rcy-em-pulse {
  0%,100% { background: var(--rcy-danger); }
  50% { background: #c81b28; }
}

/* Heatmap (GitHub style) */
.rcy-heatmap { display: grid; grid-template-columns: repeat(53, 1fr); gap: 2px; }
.rcy-heatmap__cell { aspect-ratio: 1; background: var(--rcy-surface-2); border-radius: 2px; }
.rcy-heatmap__cell--1 { background: rgba(227,32,46,.25); }
.rcy-heatmap__cell--2 { background: rgba(227,32,46,.45); }
.rcy-heatmap__cell--3 { background: rgba(227,32,46,.7); }
.rcy-heatmap__cell--4 { background: rgba(227,32,46,.92); }

/* ---------- Profile hero ---------- */
.rcy-profile-hero {
  display: flex; align-items: center; gap: var(--rcy-s6);
  padding: var(--rcy-s8);
  background: var(--rcy-surface);
  border-radius: var(--rcy-r-3xl);
  border: 1px solid var(--rcy-border);
  box-shadow: var(--rcy-shadow-sm);
}
.rcy-avatar {
  width: 96px; height: 96px; border-radius: var(--rcy-r-3xl); object-fit: cover;
  background: var(--rcy-brand-soft);
  border: 4px solid white;
  box-shadow: var(--rcy-shadow-sm);
  display: flex; align-items: center; justify-content: center;
  color: var(--rcy-brand); font-weight: 900; font-size: var(--rcy-fs-2xl);
  flex: 0 0 auto;
}
.rcy-avatar--sm { width: 32px; height: 32px; font-size: var(--rcy-fs-xs); border-radius: var(--rcy-r-md); border-width: 2px; }
.rcy-avatar--md { width: 48px; height: 48px; font-size: var(--rcy-fs-base); border-radius: var(--rcy-r-lg); }
.rcy-avatar--lg { width: 120px; height: 120px; font-size: var(--rcy-fs-3xl); }

/* ---------- Calendar ---------- */
.rcy-cal-wrap { background: var(--rcy-surface); border: 1px solid var(--rcy-border); border-radius: var(--rcy-r-3xl); padding: var(--rcy-s6); }
.rcy-cal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--rcy-s6); }
.rcy-cal-month { font-size: var(--rcy-fs-2xl); font-weight: 900; }
.rcy-cal { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
.rcy-cal__head {
  text-align: center; font-size: var(--rcy-fs-xxs); font-weight: 800;
  color: var(--rcy-text-faint); padding: var(--rcy-s2);
  text-transform: uppercase; letter-spacing: .08em;
}
.rcy-cal__cell {
  background: transparent; min-height: 96px; padding: var(--rcy-s2);
  border-radius: var(--rcy-r-md);
  transition: background var(--rcy-dur);
  position: relative; cursor: pointer;
}
.rcy-cal__cell:hover:not(.is-empty) { background: var(--rcy-brand-soft); }
.rcy-cal__cell.is-empty { cursor: default; }
.rcy-cal__cell.is-selected {
  background: var(--rcy-brand); color: white;
  box-shadow: var(--rcy-shadow-red);
}
.rcy-cal__day { font-size: var(--rcy-fs-xs); font-weight: 700; color: var(--rcy-text); }
.rcy-cal__cell.is-selected .rcy-cal__day { color: white; }
.rcy-cal__event {
  background: var(--rcy-brand); color: white; padding: 2px var(--rcy-s2);
  border-radius: var(--rcy-r-sm); font-size: 10px; font-weight: 700;
  margin-top: 4px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.rcy-cal__cell.is-selected .rcy-cal__event { background: rgba(255,255,255,.25); }

/* 오늘 표시(클릭형 캘린더) + 일정 있는 날 + 더보기 + 클릭 가능한 이벤트 */
.rcy-cal__cell.is-today {
  outline: 2px solid var(--rcy-brand); outline-offset: -2px;
  background: var(--rcy-brand-soft);
}
.rcy-cal__cell.is-today .rcy-cal__day { color: var(--rcy-brand); font-weight: 900; }
.rcy-cal__cell.has-ev .rcy-cal__day::after {
  content: ''; display: inline-block; width: 5px; height: 5px; margin-left: 4px;
  border-radius: 50%; background: var(--rcy-brand); vertical-align: middle;
}
.rcy-cal__event { cursor: pointer; }
.rcy-cal__event:hover { filter: brightness(1.08); transform: translateY(-1px); }
.rcy-cal__more { margin-top: 3px; font-size: 10px; font-weight: 800; color: var(--rcy-text-muted); cursor: pointer; }
.rcy-cal-datepick { width: auto; min-width: 148px; }

/* 일정 상세 모달 */
.rcy-cal-detail__row { display: flex; gap: 8px; align-items: flex-start; padding: 6px 0; color: var(--rcy-text); font-weight: 600; }
.rcy-cal-detail__ic { flex: 0 0 auto; }
.rcy-cal-detail__desc {
  margin-top: 10px; padding: 12px; border-radius: var(--rcy-r-md);
  background: var(--rcy-surface-2); color: var(--rcy-text-muted);
  white-space: pre-wrap; line-height: 1.6; font-size: var(--rcy-fs-sm);
}
/* 날짜별 일정 리스트 항목 */
.rcy-cal-daylist__item {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 10px 12px; border: 1px solid var(--rcy-border); border-radius: var(--rcy-r-md);
  background: var(--rcy-surface); color: var(--rcy-text); cursor: pointer; text-align: left;
  transition: background var(--rcy-dur), border-color var(--rcy-dur);
}
.rcy-cal-daylist__item:hover { background: var(--rcy-brand-soft); border-color: var(--rcy-brand); }
.rcy-cal-daylist__item .rcy-cal-chip__dot { width: 10px; height: 10px; border-radius: 50%; flex: 0 0 auto; }

/* ---------- Toggle switch (알림/공개 설정 등) ---------- */
.rcy-toggle { display: inline-flex; align-items: center; gap: 10px; cursor: pointer; user-select: none; }
.rcy-toggle--end { justify-content: flex-end; }
.rcy-toggle input { position: absolute; opacity: 0; width: 0; height: 0; }
.rcy-toggle__track {
  position: relative; flex: 0 0 auto; width: 44px; height: 26px; border-radius: 999px;
  background: var(--rcy-border-2, #c2cce0); transition: background var(--rcy-dur);
}
.rcy-toggle__track::after {
  content: ''; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px;
  border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.25);
  transition: transform var(--rcy-dur);
}
.rcy-toggle input:checked + .rcy-toggle__track { background: var(--rcy-brand); }
.rcy-toggle input:checked + .rcy-toggle__track::after { transform: translateX(18px); }
.rcy-toggle input:focus-visible + .rcy-toggle__track { box-shadow: 0 0 0 3px var(--rcy-brand-soft); }
.rcy-toggle input:disabled + .rcy-toggle__track { opacity: .55; }
.rcy-toggle__label { font-weight: 700; color: var(--rcy-text); }

/* ---------- Language switcher (다국어 전환) ---------- */
.rcy-langswitch {
  display: inline-flex; align-items: center; gap: 2px;
  padding: 3px; border-radius: 999px;
  background: var(--rcy-surface-2); border: 1px solid var(--rcy-border);
}
.rcy-langswitch__opt {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 30px; height: 26px; padding: 0 9px; border-radius: 999px;
  font-size: 11px; font-weight: 800; letter-spacing: .03em;
  color: var(--rcy-text-muted); text-decoration: none;
  transition: background var(--rcy-dur), color var(--rcy-dur);
}
.rcy-langswitch__opt:hover { color: var(--rcy-text); }
.rcy-langswitch__opt.is-active { background: var(--rcy-brand); color: #fff; box-shadow: var(--rcy-shadow-red); }
.rcy-langswitch--inline { background: transparent; border: 0; padding: 0; gap: var(--rcy-s2); }

/* ---------- 회원 아이콘 드롭다운 (프로필·설정·관리자 메뉴) ---------- */
.rcy-usermenu { position: relative; display: inline-flex; }
.rcy-usermenu__btn { padding: 0; overflow: hidden; }
.rcy-usermenu__panel {
  position: absolute; top: calc(100% + 8px); right: 0; z-index: 200;
  min-width: 240px; padding: var(--rcy-s2);
  background: var(--rcy-surface); border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-xl); box-shadow: var(--rcy-shadow-lg, 0 16px 40px rgba(0,0,0,.18));
  animation: rcy-usermenu-in .14s ease;
}
@keyframes rcy-usermenu-in { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
.rcy-usermenu__head { display: flex; align-items: center; gap: var(--rcy-s3); padding: var(--rcy-s3) var(--rcy-s3) var(--rcy-s2); }
.rcy-usermenu__avatar { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; flex: 0 0 auto; }
.rcy-usermenu__id { min-width: 0; display: flex; flex-direction: column; }
.rcy-usermenu__id strong { color: var(--rcy-text); font-size: var(--rcy-fs-sm); font-weight: 800; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rcy-usermenu__id span { color: var(--rcy-text-faint); font-size: var(--rcy-fs-xs); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rcy-usermenu__item {
  display: flex; align-items: center; gap: var(--rcy-s3); padding: var(--rcy-s2) var(--rcy-s3);
  border-radius: var(--rcy-r-md); color: var(--rcy-text); text-decoration: none;
  font-weight: 700; font-size: var(--rcy-fs-sm); transition: background var(--rcy-dur), color var(--rcy-dur);
}
.rcy-usermenu__item:hover { background: var(--rcy-surface-2); }
.rcy-usermenu__ic { width: 20px; text-align: center; flex: 0 0 auto; }
.rcy-usermenu__item--accent { color: var(--rcy-brand); }
.rcy-usermenu__item--accent:hover { background: var(--rcy-brand-soft); }
.rcy-usermenu__item--danger { color: var(--rcy-danger, #cc2e22); }
.rcy-usermenu__item--danger:hover { background: color-mix(in srgb, var(--rcy-danger, #cc2e22) 12%, transparent); }
.rcy-usermenu__sep {
  padding: var(--rcy-s3) var(--rcy-s3) var(--rcy-s1); margin-top: var(--rcy-s1);
  font-size: var(--rcy-fs-xxs); font-weight: 900; letter-spacing: .08em; text-transform: uppercase;
  color: var(--rcy-text-faint); border-top: 1px solid var(--rcy-border);
}
.rcy-usermenu__divider { height: 1px; background: var(--rcy-border); margin: var(--rcy-s2); }
@media (max-width: 480px) { .rcy-usermenu__panel { min-width: 200px; } }

/* ---------- 한 줄 입력 행 컨트롤 (SNS 링크 / 포트폴리오 블록) ---------- */
.rcy-iconbtn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; flex: 0 0 auto; padding: 0;
  border: 1px solid var(--rcy-border); border-radius: var(--rcy-r-md);
  background: var(--rcy-surface-2); color: var(--rcy-text-muted);
  cursor: pointer; font-size: 12px; line-height: 1; font-weight: 800;
  transition: background var(--rcy-dur), color var(--rcy-dur), border-color var(--rcy-dur);
}
.rcy-iconbtn:hover { background: var(--rcy-brand-soft); color: var(--rcy-brand); border-color: var(--rcy-brand); }
.rcy-iconbtn--danger:hover { background: var(--rcy-danger, #cc2e22); color: #fff; border-color: var(--rcy-danger, #cc2e22); }
.rcy-line-row__ord { display: inline-flex; flex-direction: column; gap: 2px; flex: 0 0 auto; }
.rcy-line-row__ord .rcy-iconbtn { width: 24px; height: 16px; font-size: 8px; border-radius: 5px; }
.rcy-portfolio-edit { padding: var(--rcy-s4); border: 1px solid var(--rcy-border); border-radius: var(--rcy-r-lg); background: var(--rcy-surface-2); }
.rcy-portfolio-edit + .rcy-portfolio-edit { margin-top: var(--rcy-s3); }

/* ---------- 공개 프로필 / 포트폴리오 뷰 ---------- */
.rcy-pubprofile { max-width: min(1120px, 100%); margin: 0 auto; }
.rcy-pubprofile__cover {
  height: 180px; border-radius: var(--rcy-r-2xl);
  background: linear-gradient(135deg, var(--rcy-brand), var(--rcy-brand-hover));
  background-size: cover; background-position: center;
}
.rcy-pubprofile__head {
  display: flex; gap: var(--rcy-s5); align-items: flex-end; flex-wrap: wrap;
  margin: -52px 0 var(--rcy-s6) var(--rcy-s5); position: relative;
}
.rcy-pubprofile__avatar {
  width: 112px; height: 112px; border-radius: 50%; object-fit: cover;
  border: 4px solid var(--rcy-surface); background: var(--rcy-surface);
  box-shadow: var(--rcy-shadow-md, 0 6px 18px rgba(0,0,0,.12)); flex: 0 0 auto;
}
.rcy-pubprofile__id { padding-bottom: 6px; min-width: 0; }
.rcy-pubprofile__name { margin: 0; font-size: clamp(1.4rem, 3vw, 2rem); font-weight: 900; letter-spacing: -.02em; color: var(--rcy-text); }
.rcy-pubprofile__tagline { margin: 8px 0 0; color: var(--rcy-text-muted); }
.rcy-pubprofile__links { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.rcy-pubprofile__portfolio { margin-top: var(--rcy-s6); }
.rcy-pubprofile .rcy-lms-card { margin-top: var(--rcy-s5); }
.rcy-portfolio-block { border-left: 3px solid var(--rcy-brand); }

/* ============================================================
   PUBLIC SHELL — 비로그인 공개 페이지 공통 레이아웃
   (로그인·가입·신청·공지·랭킹·회칙·양식·익명 등 / 랜딩 제외)
   ============================================================ */
body.rcy-public-app { background: var(--rcy-bg); }
.rcy-public { display: flex; flex-direction: column; min-height: 100vh; background: var(--rcy-bg); width: 100%; }
.rcy-public__nav {
  position: sticky; top: 0; z-index: 50;
  display: flex; align-items: center; gap: var(--rcy-s4);
  height: 68px; padding: 0 var(--rcy-s8);
  background: var(--rcy-glass);
  background: color-mix(in srgb, var(--rcy-surface) 86%, transparent);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--rcy-border);
}
.rcy-public__brand { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; }
.rcy-public__brand-mark {
  display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: 10px;
  background: var(--rcy-brand); color: #fff; font-weight: 900; font-size: 13px; letter-spacing: .5px;
  box-shadow: 0 6px 16px rgba(227,32,46,.3);
}
.rcy-public__brand-text { font-weight: 900; color: var(--rcy-text); font-size: var(--rcy-fs-lg); }
.rcy-public__links { display: flex; gap: var(--rcy-s5); flex: 1; margin-left: var(--rcy-s4); }
.rcy-public__links a { color: var(--rcy-text-muted); text-decoration: none; font-weight: 700; font-size: var(--rcy-fs-sm); transition: color var(--rcy-dur); }
.rcy-public__links a:hover { color: var(--rcy-brand); }
.rcy-public__cta { display: flex; align-items: center; gap: var(--rcy-s2); margin-left: auto; }
.rcy-public__main { flex: 1; padding: var(--rcy-s10) var(--rcy-s6) var(--rcy-s12); }
.rcy-public__container { max-width: min(1360px, calc(100vw - 48px)); margin: 0 auto; width: 100%; }
.rcy-public__page-head { margin-bottom: var(--rcy-s8); text-align: center; }
.rcy-public__eyebrow {
  display: inline-block; font-size: var(--rcy-fs-xxs); font-weight: 900; letter-spacing: .14em;
  color: var(--rcy-brand); text-transform: uppercase; margin-bottom: var(--rcy-s2);
}
.rcy-public__title { margin: 0; font-size: clamp(1.6rem, 3vw, 2.3rem); font-weight: 900; letter-spacing: -.02em; color: var(--rcy-text); }
.rcy-public__footer { border-top: 1px solid var(--rcy-border); background: var(--rcy-surface); padding: var(--rcy-s8) var(--rcy-s6); }
.rcy-public__footer-inner {
  max-width: min(1360px, calc(100vw - 48px)); margin: 0 auto; display: flex; align-items: center; gap: var(--rcy-s4);
  flex-wrap: wrap; justify-content: space-between;
}
.rcy-public__foot-links { display: flex; gap: var(--rcy-s5); flex-wrap: wrap; }
.rcy-public__foot-links a { color: var(--rcy-text-muted); text-decoration: none; font-weight: 600; font-size: var(--rcy-fs-sm); }
.rcy-public__foot-links a:hover { color: var(--rcy-brand); }
.rcy-public__foot-copy { color: var(--rcy-text-faint); font-size: var(--rcy-fs-xs); }
@media (max-width: 720px) {
  .rcy-public__nav { padding: 0 var(--rcy-s4); gap: var(--rcy-s2); }
  .rcy-public__links { display: none; }
  .rcy-public__brand-text { font-size: var(--rcy-fs-base); }
  .rcy-public__main { padding: var(--rcy-s6) var(--rcy-s4) var(--rcy-s10); }
  .rcy-public__footer-inner { justify-content: center; text-align: center; }
}

/* ---------- Sidebar (admin layout) ---------- */
.rcy-shell { display: flex; min-height: 100vh; background: var(--rcy-bg); }
.rcy-sidebar {
  width: 260px; background: var(--rcy-sidebar-bg);
  color: var(--rcy-sidebar-text); display: flex; flex-direction: column;
  flex-shrink: 0; box-shadow: var(--rcy-shadow-lg);
}
.rcy-sidebar__head {
  height: 80px; display: flex; align-items: center; padding: 0 var(--rcy-s6);
  border-bottom: 1px solid var(--rcy-sidebar-bg-2);
}
.rcy-sidebar__logo {
  display: flex; align-items: center; gap: var(--rcy-s2); color: white;
  font-size: var(--rcy-fs-lg); font-weight: 900; letter-spacing: -.02em;
}
.rcy-sidebar__logo .badge {
  background: var(--rcy-brand); padding: var(--rcy-s2);
  border-radius: var(--rcy-r-md); display: inline-flex;
  align-items: center; justify-content: center;
  width: 36px; height: 36px;
  color: white; font-weight: 900;
}
.rcy-sidebar__nav { flex: 1; overflow-y: auto; padding: var(--rcy-s5) var(--rcy-s4); }
.rcy-sidebar__group + .rcy-sidebar__group { margin-top: var(--rcy-s7); }
.rcy-sidebar__group-label {
  padding: 0 var(--rcy-s2); font-size: var(--rcy-fs-xxs); font-weight: 800;
  color: var(--rcy-sidebar-text-faint); text-transform: uppercase; letter-spacing: .14em;
  display: block; margin-bottom: var(--rcy-s3);
}
.rcy-sidebar__item {
  width: 100%; display: flex; align-items: center; gap: var(--rcy-s3);
  padding: var(--rcy-s3) var(--rcy-s3);
  border: 0; border-radius: var(--rcy-r-lg);
  background: transparent; color: var(--rcy-sidebar-text);
  font-size: var(--rcy-fs-sm); font-weight: 600;
  text-align: left; cursor: pointer; text-decoration: none;
  transition: background var(--rcy-dur), color var(--rcy-dur);
}
.rcy-sidebar__item:hover { background: var(--rcy-sidebar-bg-2); color: white; }
.rcy-sidebar__item.is-active {
  background: rgba(227,32,46,.16); color: #fff; font-weight: 800;
  box-shadow: inset 3px 0 0 var(--rcy-brand), 0 6px 16px rgba(227,32,46,.20);
}
.rcy-sidebar__item .ico { width: 18px; height: 18px; flex-shrink: 0; }
.rcy-sidebar__item .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--rcy-brand); margin-left: auto; animation: rcy-pulse 1.6s infinite; }
.rcy-sidebar__foot {
  padding: var(--rcy-s4); border-top: 1px solid var(--rcy-sidebar-bg-2);
}

/* Topbar (admin) */
.rcy-topbar {
  background: var(--rcy-surface);
  border-bottom: 1px solid var(--rcy-border);
  padding: var(--rcy-s4) var(--rcy-s6);
  display: flex; justify-content: space-between; align-items: center;
  position: sticky; top: 0; z-index: 40;
}
.rcy-topbar h1 { margin: 0; font-size: var(--rcy-fs-xl); font-weight: 900; }

.rcy-main { flex: 1; padding: var(--rcy-s6) var(--rcy-s8); overflow-y: auto; }

/* Responsive utilities */
@media (max-width: 900px) {
  .rcy-sidebar { display: none; }
}
@media (max-width: 640px) {
  .rcy h1, .rcy .rcy-h1 { font-size: var(--rcy-fs-2xl); }
  .rcy h2, .rcy .rcy-h2 { font-size: var(--rcy-fs-xl); }
  .rcy-hero { padding: var(--rcy-s12) var(--rcy-s5); }
  .rcy-card { padding: var(--rcy-s5); border-radius: var(--rcy-r-2xl); }
  .rcy-activity-item { grid-template-columns: 1fr; }
  .rcy-profile-hero { flex-direction: column; text-align: center; padding: var(--rcy-s5); }
  .rcy-main { padding: var(--rcy-s4); }
}

/* Print friendly */
@media print {
  .rcy { background: white; color: black; }
  .rcy-btn, .rcy-pwa-banner, .rcy-toast-wrap, .rcy-emergency-banner, .rcy-sidebar { display: none !important; }
  .rcy-card, .rcy-stat { box-shadow: none; border: 1px solid #ccc; }
}

/* Accessibility */
.rcy-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
.rcy *:focus-visible { outline: 2px solid var(--rcy-brand); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
  .rcy *, .rcy *::before, .rcy *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

/* Theme toggle button */
.rcy-theme-toggle {
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-pill);
  padding: var(--rcy-s2) var(--rcy-s4);
  cursor: pointer; font-size: var(--rcy-fs-xs); color: var(--rcy-text);
  font-weight: 700;
}

/* ============================================================
   LMS APP SHELL — 좌측 고정 사이드바 + 상단 토픽바
   body.rcy-app 일 때만 활성 (Layout 클래스가 자동 추가)
   ============================================================ */

:root {
  --rcy-shell-sidebar-w: 264px;
  --rcy-shell-topbar-h: 64px;
  --rcy-wp-adminbar-h: 0px;
}
body.admin-bar { --rcy-wp-adminbar-h: 32px; }
body.rcy-app.admin-bar { --rcy-wp-adminbar-h: 0px; }
@media (max-width: 782px) {
  body.admin-bar { --rcy-wp-adminbar-h: 46px; }
  body.rcy-app.admin-bar { --rcy-wp-adminbar-h: 0px; }
}

/* CRITICAL: flex + sticky 레이아웃.
   position:fixed 는 조상에 transform/filter/backdrop-filter 가 있으면 뷰포트가 아닌
   그 조상 기준으로 배치돼 상단바가 밀리고 폭이 틀어진다(테마 의존성).
   → 사이드바/토픽바를 flex + position:sticky 로 구성해 테마 래퍼와 무관하게 정렬. */
body.rcy-app { background: var(--rcy-bg); }

.rcy-app-shell {
  display: flex;
  align-items: flex-start;
  min-height: 100vh;
  width: 100%;
  background: var(--rcy-bg);
}

/* === SIDEBAR === */
.rcy-app-shell__sidebar {
  position: sticky;
  top: var(--rcy-wp-adminbar-h);
  align-self: flex-start;
  flex-shrink: 0;
  width: var(--rcy-shell-sidebar-w);
  height: calc(100vh - var(--rcy-wp-adminbar-h));
  background: var(--rcy-sidebar-bg);
  color: var(--rcy-sidebar-text);
  display: flex; flex-direction: column;
  z-index: 90;
  overflow: hidden;
  border-right: 1px solid var(--rcy-sidebar-bg-2);
}

.rcy-app-shell__brand {
  display: flex; align-items: center; gap: var(--rcy-s3);
  padding: var(--rcy-s6) var(--rcy-s5);
  text-decoration: none; color: white;
  border-bottom: 1px solid var(--rcy-sidebar-bg-2);
  flex: 0 0 auto;
}
.rcy-app-shell__brand-mark {
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; border-radius: 10px;
  background: var(--rcy-brand); color: white;
  font-weight: 900; font-size: 13px; letter-spacing: .5px;
  box-shadow: 0 4px 12px rgba(227,32,46,.4);
}
.rcy-app-shell__brand-name { font-weight: 800; font-size: var(--rcy-fs-base); color: white; }

.rcy-app-shell__nav { flex: 1; min-height: 0; overflow-y: auto; padding: var(--rcy-s4) 0; }
.rcy-app-shell__group { margin-bottom: var(--rcy-s5); padding: 0 var(--rcy-s3); }
.rcy-app-shell__group-label {
  display: block;
  font-size: var(--rcy-fs-xxs);
  text-transform: uppercase; letter-spacing: 1px;
  color: var(--rcy-sidebar-text-faint);
  padding: 0 var(--rcy-s3); margin-bottom: var(--rcy-s2);
  font-weight: 800;
}
.rcy-app-shell__list { list-style: none; margin: 0; padding: 0; }
.rcy-app-shell__link {
  display: flex; align-items: center; gap: var(--rcy-s3);
  padding: var(--rcy-s2) var(--rcy-s3);
  border-radius: var(--rcy-r-md);
  color: var(--rcy-sidebar-text);
  text-decoration: none;
  font-size: var(--rcy-fs-sm); font-weight: 600;
  transition: background var(--rcy-dur), color var(--rcy-dur);
  margin-bottom: 2px;
}
.rcy-app-shell__link:hover { background: var(--rcy-sidebar-bg-2); color: white; }
.rcy-app-shell__link.is-active {
  background: linear-gradient(135deg, var(--rcy-brand), var(--rcy-brand-hover));
  color: white;
  box-shadow: var(--rcy-shadow-red);
}
.rcy-app-shell__link-ic { font-size: 18px; width: 24px; text-align: center; }
.rcy-app-shell__link-text { flex: 1; }

.rcy-app-shell__user {
  display: flex; align-items: center; gap: var(--rcy-s2);
  padding: var(--rcy-s4) var(--rcy-s5);
  border-top: 1px solid var(--rcy-sidebar-bg-2);
  flex: 0 0 auto;
}
.rcy-app-shell__avatar { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; }
.rcy-app-shell__user-meta { flex: 1; min-width: 0; }
.rcy-app-shell__user-name {
  font-weight: 800; font-size: var(--rcy-fs-sm); color: white;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rcy-app-shell__user-link { font-size: var(--rcy-fs-xs); color: var(--rcy-sidebar-text-faint); text-decoration: none; }
.rcy-app-shell__user-link:hover { color: var(--rcy-brand); }
.rcy-app-shell__logout {
  display: inline-flex; align-items: center; justify-content: center;
  width: 32px; height: 32px; border-radius: 8px;
  background: var(--rcy-sidebar-bg-2); color: var(--rcy-sidebar-text);
  text-decoration: none; font-weight: 800; font-size: 18px;
}
.rcy-app-shell__logout:hover { background: var(--rcy-brand); color: white; }

/* === MAIN AREA === */
.rcy-app-shell__main {
  flex: 1;
  min-width: 0;
  min-height: 100vh;
  display: flex; flex-direction: column;
}

/* TOPBAR — flex 컬럼 안에서 position:sticky 로 상단 고정.
   sticky 는 가까운 스크롤 컨테이너 기준이라 조상 transform/filter 영향을 받지 않음 → 폭/위치 정확. */
.rcy-app-shell__topbar {
  display: flex; align-items: center; gap: var(--rcy-s3);
  padding: 0 var(--rcy-s6);
  height: var(--rcy-shell-topbar-h);
  min-height: var(--rcy-shell-topbar-h);
  width: 100%;
  box-sizing: border-box;
  background: var(--rcy-surface);
  border-bottom: 1px solid var(--rcy-border);
  position: sticky;
  top: var(--rcy-wp-adminbar-h);
  z-index: 80;
  backdrop-filter: blur(8px);
}

.rcy-app-shell__menu-btn {
  display: none; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: var(--rcy-r-md);
  background: var(--rcy-surface-2); border: 0; cursor: pointer;
  font-size: 20px; color: var(--rcy-text);
}
.rcy-app-shell__crumb { flex: 1; font-weight: 800; font-size: var(--rcy-fs-lg); color: var(--rcy-text); }
.rcy-app-shell__crumb-here { color: var(--rcy-text); }

.rcy-app-shell__topbar-actions { display: flex; align-items: center; gap: var(--rcy-s2); }
.rcy-app-shell__icon-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 50%;
  background: var(--rcy-surface-2); color: var(--rcy-text);
  border: 0; cursor: pointer; text-decoration: none;
  font-size: 18px;
  transition: background var(--rcy-dur);
}
.rcy-app-shell__icon-btn:hover { background: var(--rcy-brand-soft); color: var(--rcy-brand); }
.rcy-app-shell__icon-btn img { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; }

/* CONTENT — 메인 영역 풀폭 (좌우 가운데정렬 여백 없음) */
.rcy-app-shell__content {
  flex: 1;
  padding: var(--rcy-s6) var(--rcy-s8);
  width: 100%;
}

.rcy-app-mobile-nav { display: none; }

/* === MOBILE === (≤900px) — 사이드바는 fixed 오프캔버스 슬라이드.
   900px 미만(태블릿 세로/모바일)에서만 모바일 레이아웃 → 일반 노트북·데스크탑은 항상 데스크탑 레이아웃 유지. */
@media (max-width: 900px) {
  /* 사이드바를 flex 흐름에서 빼서 fixed 로 슬라이드 (메인이 전체 폭 차지) */
  .rcy-app-shell__sidebar {
    position: fixed;
    top: var(--rcy-wp-adminbar-h);
    left: 0;
    height: calc(100vh - var(--rcy-wp-adminbar-h));
    transform: translateX(-100%);
    transition: transform var(--rcy-dur);
    z-index: 95;
  }
  body.rcy-app.rcy-sidebar-open .rcy-app-shell__sidebar { transform: translateX(0); box-shadow: var(--rcy-shadow-lg); }
  .rcy-app-shell__menu-btn { display: inline-flex; }
  body.rcy-app.rcy-sidebar-open::after {
    content: ''; position: fixed; inset: 0; background: rgba(13,21,38,.5); z-index: 89;
  }
}

@media (max-width: 640px) {
  .rcy-app-shell__content { padding: var(--rcy-s4); }
}

@media (max-width: 768px) {
  .rcy-app-mobile-nav {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 120;
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    min-height: calc(64px + env(safe-area-inset-bottom, 0px));
    padding: 6px 8px calc(6px + env(safe-area-inset-bottom, 0px));
    background: rgba(255,255,255,.96);
    border-top: 1px solid var(--rcy-border-2);
    box-shadow: 0 -10px 24px rgba(13,21,38,.08);
    -webkit-backdrop-filter: saturate(180%) blur(12px);
    backdrop-filter: saturate(180%) blur(12px);
  }
  .rcy-app-mobile-nav__item {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    min-width: 0;
    min-height: 52px;
    border-radius: var(--rcy-r-sm);
    color: var(--rcy-text-muted);
    text-decoration: none;
    font-size: 11px;
    font-weight: 800;
    line-height: 1.15;
    letter-spacing: 0;
  }
  .rcy-app-mobile-nav__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    font-size: 18px;
    line-height: 1;
  }
  .rcy-app-mobile-nav__label {
    display: block;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .rcy-app-mobile-nav__item.is-active {
    background: var(--rcy-brand-soft);
    color: var(--rcy-brand);
  }
  body.rcy-app .rcy-app-shell__content {
    padding-bottom: calc(88px + env(safe-area-inset-bottom, 0px));
  }
}

/* ============================================================
   LMS DASHBOARD CARDS
   ============================================================ */

.rcy-lms-hello {
  display: flex; align-items: center; justify-content: space-between; gap: var(--rcy-s5);
  padding: var(--rcy-s6) var(--rcy-s8);
  border-radius: var(--rcy-r-2xl);
  background: linear-gradient(135deg, #fff 0%, var(--rcy-brand-soft) 100%);
  border: 1px solid var(--rcy-border);
  margin-bottom: var(--rcy-s6);
}
.rcy-lms-hello__greet { font-size: var(--rcy-fs-sm); color: var(--rcy-text-muted); font-weight: 600; }
.rcy-lms-hello__name { margin: 4px 0 4px; font-size: var(--rcy-fs-3xl); font-weight: 900; color: var(--rcy-text); }
.rcy-lms-hello__sub { margin: 0; color: var(--rcy-text-2); font-size: var(--rcy-fs-base); }
.rcy-lms-hello__cta { display: flex; gap: var(--rcy-s2); flex-shrink: 0; }
@media (max-width: 640px) { .rcy-lms-hello { flex-direction: column; align-items: flex-start; padding: var(--rcy-s5); } }

.rcy-lms-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--rcy-s4); margin-bottom: var(--rcy-s6); }
@media (max-width: 980px) { .rcy-lms-kpis { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .rcy-lms-kpis { grid-template-columns: 1fr; } }

.rcy-lms-grid {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
  gap: var(--rcy-s5);
}
@media (max-width: 1100px) { .rcy-lms-grid { grid-template-columns: 1fr; } }

.rcy-lms-col { display: flex; flex-direction: column; gap: var(--rcy-s5); min-width: 0; }

.rcy-lms-card {
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-2xl);
  padding: var(--rcy-s5) var(--rcy-s6);
  box-shadow: var(--rcy-shadow-sm);
}
  backdrop-filter: var(--rcy-blur);
  -webkit-backdrop-filter: var(--rcy-blur);
  transition: all var(--rcy-dur) var(--rcy-ease);

.rcy-lms-card__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--rcy-s4); }
.rcy-lms-card__title { margin: 0; font-size: var(--rcy-fs-xl); font-weight: 800; letter-spacing: -0.01em; color: var(--rcy-text); }
.rcy-lms-card__more { font-size: var(--rcy-fs-sm); color: var(--rcy-brand); text-decoration: none; font-weight: 700; }
.rcy-lms-card__more:hover { text-decoration: underline; }

.rcy-lms-quick { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--rcy-s2); }
.rcy-lms-quick__item {
  display: flex; flex-direction: column; align-items: center; gap: var(--rcy-s1);
  padding: var(--rcy-s4);
  background: var(--rcy-surface-2);
  border-radius: var(--rcy-r-lg);
  text-decoration: none; color: var(--rcy-text);
  font-size: var(--rcy-fs-xs); font-weight: 700;
  transition: all var(--rcy-dur);
}
.rcy-lms-quick__item:hover { background: var(--rcy-brand-soft); color: var(--rcy-brand); transform: translateY(-2px); }
.rcy-lms-quick__item span { font-size: var(--rcy-fs-xs); }

.rcy-lms-page-head {
  display: flex; align-items: flex-end; justify-content: space-between; gap: var(--rcy-s4);
  margin-bottom: var(--rcy-s5);
}
.rcy-lms-page-head__eyebrow {
  font-size: var(--rcy-fs-xxs); text-transform: uppercase; letter-spacing: 1.5px;
  color: var(--rcy-brand); font-weight: 800;
}
.rcy-lms-page-head__title { margin: 4px 0 4px; font-size: var(--rcy-fs-3xl); font-weight: 900; color: var(--rcy-text); }
.rcy-lms-page-head__sub { margin: 0; color: var(--rcy-text-muted); font-size: var(--rcy-fs-sm); }

.rcy-lms-admin-body { display: flex; flex-direction: column; gap: var(--rcy-s5); }

/* Tabs (horizontal pill strip) */
.rcy-tabs {
  display: flex; gap: var(--rcy-s2); flex-wrap: wrap;
  padding: var(--rcy-s2);
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-pill);
  margin-bottom: var(--rcy-s5);
}
.rcy-tabs__pill {
  position: relative;
  border: 0; background: transparent; cursor: pointer;
  padding: var(--rcy-s2) var(--rcy-s4);
  border-radius: var(--rcy-r-pill);
  font-size: var(--rcy-fs-sm); font-weight: 700;
  color: var(--rcy-text-muted);
  transition: all var(--rcy-dur);
}
.rcy-tabs__pill:hover { color: var(--rcy-text); background: var(--rcy-surface-2); }
.rcy-tabs__pill.is-active {
  background: var(--rcy-text);
  color: white;
}
.rcy-tabs__dot {
  display: inline-block; width: 6px; height: 6px; border-radius: 50%;
  background: var(--rcy-brand); margin-left: var(--rcy-s1);
  box-shadow: 0 0 0 3px rgba(227,32,46,.2);
}

/* ============================================================
   MARKETING LANDING (비로그인 홈)
   ============================================================ */

.rcy-landing { width: 100%; max-width: 100%; }
.rcy-landing__nav {
  display: flex; align-items: center; justify-content: space-between;
  padding: var(--rcy-s4) var(--rcy-s8);
  background: rgba(255,255,255,.85);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--rcy-border);
  position: sticky; top: 0; z-index: 50;
}
.rcy-landing__brand {
  display: inline-flex; align-items: center; gap: var(--rcy-s2);
  text-decoration: none; color: var(--rcy-text);
}
.rcy-landing__brand-mark {
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; border-radius: 10px;
  background: var(--rcy-brand); color: white;
  font-weight: 900; font-size: 13px;
  box-shadow: 0 4px 12px rgba(227,32,46,.4);
}
.rcy-landing__brand-text { font-weight: 900; font-size: var(--rcy-fs-base); }
.rcy-landing__nav-links { display: flex; gap: var(--rcy-s6); }
.rcy-landing__nav-links a { color: var(--rcy-text-2); text-decoration: none; font-weight: 700; font-size: var(--rcy-fs-sm); }
.rcy-landing__nav-links a:hover { color: var(--rcy-brand); }
.rcy-landing__nav-cta { display: flex; gap: var(--rcy-s2); }
@media (max-width: 768px) { .rcy-landing__nav-links { display: none; } .rcy-landing__nav { padding: var(--rcy-s3) var(--rcy-s4); } }

.rcy-landing__hero {
  background:
    radial-gradient(900px 500px at 90% -20%, rgba(227,32,46,.12), transparent 60%),
    radial-gradient(700px 400px at -10% 80%, rgba(147,51,234,.08), transparent 60%),
    linear-gradient(180deg, #fff 0%, var(--rcy-bg) 100%);
  padding: var(--rcy-s20) var(--rcy-s8);
  border-bottom: 1px solid var(--rcy-border);
}
.rcy-landing__hero-inner {
  display: grid; grid-template-columns: 1.1fr 1fr; gap: var(--rcy-s12);
  max-width: 1200px; margin: 0 auto;
  align-items: center;
}
@media (max-width: 980px) { .rcy-landing__hero-inner { grid-template-columns: 1fr; } .rcy-landing__hero { padding: var(--rcy-s12) var(--rcy-s4); } }

.rcy-landing__pill {
  display: inline-block;
  padding: 6px 12px; border-radius: var(--rcy-r-pill);
  background: var(--rcy-brand-soft); color: var(--rcy-brand);
  font-size: var(--rcy-fs-xs); font-weight: 800;
  margin-bottom: var(--rcy-s4);
}
.rcy-landing__h1 {
  font-size: clamp(36px, 5vw, 56px); line-height: 1.1;
  font-weight: 900; letter-spacing: -.02em;
  margin: 0 0 var(--rcy-s4); color: var(--rcy-text);
}
.rcy-landing__lead { font-size: var(--rcy-fs-xl); color: var(--rcy-text-2); margin: 0 0 var(--rcy-s6); line-height: 1.6; }
.rcy-landing__hero-cta { display: flex; gap: var(--rcy-s3); flex-wrap: wrap; margin-bottom: var(--rcy-s5); }
.rcy-landing__trust {
  display: flex; gap: var(--rcy-s4); flex-wrap: wrap;
  font-size: var(--rcy-fs-sm); color: var(--rcy-text-muted); font-weight: 600;
}

.rcy-landing__hero-art {
  position: relative; height: 460px;
}
.rcy-landing__art-card {
  position: absolute;
  background: var(--rcy-surface);
  border-radius: var(--rcy-r-2xl);
  padding: var(--rcy-s5);
  box-shadow: var(--rcy-shadow-md);
  border: 1px solid var(--rcy-border);
  text-align: center;
  min-width: 160px;
}
.rcy-landing__art-card--1 { top: 0; left: 10%; transform: rotate(-4deg); }
.rcy-landing__art-card--2 { top: 50px; right: 0; transform: rotate(3deg); }
.rcy-landing__art-card--3 { bottom: 80px; left: 0; transform: rotate(2deg); }
.rcy-landing__art-card--4 { bottom: 20px; right: 15%; transform: rotate(-2deg); }
.rcy-landing__art-icon { font-size: 28px; margin-bottom: var(--rcy-s2); }
.rcy-landing__art-num { font-size: var(--rcy-fs-2xl); font-weight: 900; color: var(--rcy-brand); }
.rcy-landing__art-cap { font-size: var(--rcy-fs-xs); color: var(--rcy-text-muted); font-weight: 700; margin-top: 4px; }
@media (max-width: 980px) { .rcy-landing__hero-art { display: none; } }

.rcy-landing__section { padding: var(--rcy-s20) var(--rcy-s8); }
.rcy-landing__section--alt { background: var(--rcy-bg); }
@media (max-width: 768px) { .rcy-landing__section { padding: var(--rcy-s12) var(--rcy-s4); } }

.rcy-landing__section-head { text-align: center; max-width: 720px; margin: 0 auto var(--rcy-s12); }
.rcy-landing__eyebrow {
  display: inline-block;
  font-size: var(--rcy-fs-xs); letter-spacing: 2px;
  color: var(--rcy-brand); font-weight: 800; text-transform: uppercase;
  margin-bottom: var(--rcy-s2);
}
.rcy-landing__h2 {
  font-size: clamp(28px, 4vw, 40px); font-weight: 900; line-height: 1.2;
  margin: 0 0 var(--rcy-s3); color: var(--rcy-text);
}
.rcy-landing__h3 { font-size: var(--rcy-fs-xl); font-weight: 800; margin: var(--rcy-s8) 0 var(--rcy-s4); }
.rcy-landing__sub { font-size: var(--rcy-fs-lg); color: var(--rcy-text-muted); margin: 0; }

.rcy-landing__features {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--rcy-s5);
  max-width: 1200px; margin: 0 auto;
}
@media (max-width: 980px) { .rcy-landing__features { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) { .rcy-landing__features { grid-template-columns: 1fr; } }
.rcy-landing__feature {
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-2xl);
  padding: var(--rcy-s6);
  transition: all var(--rcy-dur);
}
.rcy-landing__feature:hover { transform: translateY(-4px); box-shadow: var(--rcy-shadow-md); border-color: var(--rcy-brand-border); }
.rcy-landing__feature-ic {
  display: inline-flex; align-items: center; justify-content: center;
  width: 56px; height: 56px;
  background: var(--rcy-brand-soft); color: var(--rcy-brand);
  border-radius: var(--rcy-r-lg);
  font-size: 26px;
  margin-bottom: var(--rcy-s4);
}
.rcy-landing__feature h3 { margin: 0 0 var(--rcy-s2); font-size: var(--rcy-fs-lg); font-weight: 800; color: var(--rcy-text); }
.rcy-landing__feature p { margin: 0; color: var(--rcy-text-muted); line-height: 1.6; font-size: var(--rcy-fs-sm); }

.rcy-landing__stats {
  display: grid; grid-template-columns: repeat(6, 1fr); gap: var(--rcy-s3);
  max-width: 1200px; margin: 0 auto;
}
@media (max-width: 980px) { .rcy-landing__stats { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 560px) { .rcy-landing__stats { grid-template-columns: repeat(2, 1fr); } }
.rcy-landing__stat {
  text-align: center;
  padding: var(--rcy-s5);
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-xl);
}
.rcy-landing__stat-num {
  font-size: clamp(24px, 3vw, 36px); font-weight: 900; color: var(--rcy-brand); line-height: 1;
}
.rcy-landing__stat-lab { font-size: var(--rcy-fs-xs); color: var(--rcy-text-muted); font-weight: 700; margin-top: var(--rcy-s2); }

.rcy-landing__activities { max-width: 1200px; margin: var(--rcy-s12) auto 0; }

.rcy-landing__steps {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--rcy-s5);
  max-width: 1100px; margin: 0 auto;
}
@media (max-width: 768px) { .rcy-landing__steps { grid-template-columns: 1fr; } }
.rcy-landing__step {
  background: var(--rcy-surface);
  border-radius: var(--rcy-r-2xl);
  padding: var(--rcy-s8);
  border: 1px solid var(--rcy-border);
  text-align: center;
}
.rcy-landing__step-num {
  display: inline-flex; align-items: center; justify-content: center;
  width: 56px; height: 56px; border-radius: 50%;
  background: linear-gradient(135deg, var(--rcy-brand), var(--rcy-brand-hover));
  color: white; font-weight: 900; font-size: var(--rcy-fs-2xl);
  margin-bottom: var(--rcy-s4);
  box-shadow: var(--rcy-shadow-red);
}
.rcy-landing__step h3 { margin: 0 0 var(--rcy-s2); font-size: var(--rcy-fs-xl); font-weight: 800; }
.rcy-landing__step p { margin: 0; color: var(--rcy-text-muted); line-height: 1.6; font-size: var(--rcy-fs-sm); }

.rcy-landing__cta-band {
  margin: var(--rcy-s16) auto 0;
  max-width: 900px;
  background: linear-gradient(135deg, var(--rcy-text) 0%, var(--rcy-sidebar-bg-2) 100%);
  color: white;
  padding: var(--rcy-s12);
  border-radius: var(--rcy-r-hero);
  text-align: center;
}
.rcy-landing__cta-band h2 { color: white; font-size: var(--rcy-fs-3xl); font-weight: 900; margin: 0 0 var(--rcy-s3); }
.rcy-landing__cta-band p { color: rgba(255,255,255,.7); margin: 0 0 var(--rcy-s6); font-size: var(--rcy-fs-lg); }
.rcy-landing__cta-band-actions { display: flex; gap: var(--rcy-s3); justify-content: center; flex-wrap: wrap; }

.rcy-landing__footer {
  background: var(--rcy-text); color: rgba(255,255,255,.7);
  padding: var(--rcy-s12) var(--rcy-s8) var(--rcy-s6);
}
.rcy-landing__footer-cols {
  display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: var(--rcy-s8);
  max-width: 1200px; margin: 0 auto var(--rcy-s8);
}
@media (max-width: 768px) { .rcy-landing__footer-cols { grid-template-columns: 1fr 1fr; gap: var(--rcy-s6); } }
.rcy-landing__footer h4 { color: white; margin: 0 0 var(--rcy-s3); font-size: var(--rcy-fs-sm); font-weight: 800; }
.rcy-landing__footer a { display: block; color: rgba(255,255,255,.7); text-decoration: none; font-size: var(--rcy-fs-sm); margin-bottom: var(--rcy-s2); }
.rcy-landing__footer a:hover { color: var(--rcy-brand); }
.rcy-landing__foot-desc { color: rgba(255,255,255,.5); font-size: var(--rcy-fs-sm); line-height: 1.6; margin-top: var(--rcy-s3); }
.rcy-landing__foot-bot {
  text-align: center;
  padding-top: var(--rcy-s6);
  border-top: 1px solid rgba(255,255,255,.1);
  font-size: var(--rcy-fs-xs); color: rgba(255,255,255,.5);
}

/* Ghost-light button (dark CTA band) */
.rcy-btn--ghost-light {
  background: rgba(255,255,255,.1);
  color: white;
  border: 1px solid rgba(255,255,255,.2);
}
.rcy-btn--ghost-light:hover { background: rgba(255,255,255,.2); }

/* Hide WP theme chrome on RCY app pages (best-effort — 다양한 테마 대응)
   "메뉴가 2번 보이는" 문제 = 테마 자체 헤더/네비 + RCY 사이드바 동시 표출.
   RCY shell 이 활성일 때 테마의 헤더/네비/푸터를 광범위하게 숨김. */
body.rcy-app .site-header,
body.rcy-app .site-footer,
body.rcy-app header.site-header,
body.rcy-app footer.site-footer,
body.rcy-app #masthead,
body.rcy-app #colophon,
body.rcy-app .site-branding,
body.rcy-app .main-navigation,
body.rcy-app .site-navigation,
body.rcy-app nav.navigation,
body.rcy-app .wp-block-navigation:not(.rcy-app-shell *),
body.rcy-app .wp-site-blocks > header,
body.rcy-app .wp-site-blocks > footer,
body.rcy-app .wp-block-template-part:has(nav):not(.rcy-app-shell *) { display: none !important; }
body.rcy-app .wp-site-blocks,
body.rcy-app .entry-content,
body.rcy-app .site-content,
body.rcy-app .content-area,
body.rcy-app .site-main,
body.rcy-app main#main,
body.rcy-app #content,
body.rcy-app #primary,
body.rcy-app article,
body.rcy-app .hentry,
body.rcy-app .wp-block-post-content,
body.rcy-app .wp-block-group.is-layout-constrained,
body.rcy-app .is-layout-constrained,
body.rcy-app .has-global-padding,
body.rcy-app .wp-block-group {
  padding: 0 !important; margin: 0 !important;
  max-width: 100% !important; width: 100% !important;
  /* CRITICAL: sticky 가 깨지지 않도록 조상 컨테이너의 overflow/transform/filter 무력화 */
  overflow: visible !important;
  transform: none !important;
  filter: none !important;
  perspective: none !important;
  contain: none !important;
}
body.rcy-app .entry-header,
body.rcy-app .entry-title,
body.rcy-app .page-title,
body.rcy-app .wp-block-post-title { display: none !important; }

/* ROBUST FULL-BLEED — 좌측/상단 빈 공간 완전 제거.
   고정 클래스 목록만으로는 테마/블록테마마다 다른 래퍼(.has-global-padding,
   .wp-block-group, .is-layout-constrained, 테마 고유 .container 등)를 못 잡는다.
   → :has() 로 "RCY shell 을 자손으로 가진 모든 조상 요소"만 정확히 선택해
     여백·폭제한·블록 루트패딩을 일괄 제거(조상만 타겟이라 shell 내부엔 무영향). */
body.rcy-app {
  margin: 0 !important;
  padding: 0 !important;
  --wp--style--root--padding-top: 0 !important;
  --wp--style--root--padding-right: 0 !important;
  --wp--style--root--padding-bottom: 0 !important;
  --wp--style--root--padding-left: 0 !important;
  --wp--style--block-gap: 0px;
  /* 블록 테마의 content/wide 폭 제한 근원 제거 — .is-layout-constrained > * 의
     max-width: var(--wp--style--global--content-size) 가 100% 가 되어 좌우 좁아짐 해소 */
  --wp--style--global--content-size: 100% !important;
  --wp--style--global--wide-size: 100% !important;
}
body.rcy-app *:has(.rcy-app-shell),
body.rcy-app *:has(.rcy-admin-console),
body.rcy-app *:has(.rcy-public) {
  display: block !important;
  margin: 0 !important;
  padding: 0 !important;
  max-width: none !important;
  width: auto !important;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  overflow: visible !important;
  transform: none !important;
  filter: none !important;
  perspective: none !important;
  contain: none !important;
}

/* CRITICAL: 블록 테마(.is-layout-constrained / .wp-block-post-content)가 직계 자식인
   RCY 셸 "자체"에 content-size max-width(보통 ~1140px)를 적용해 데스크탑에서 좌우가
   좁아지는 문제. 위 :has() 리셋은 '조상'만 풀어주므로 셸 자신의 폭 제한은 여기서 해제. */
body.rcy-app .rcy-app-shell,
body.rcy-app .rcy-admin-console,
body.rcy-app .rcy-public,
body.rcy-has-shortcode .rcy-app-shell,
body.rcy-has-shortcode .rcy-admin-console,
body.rcy-has-shortcode .rcy-public {
  max-width: none !important;
  width: 100% !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  float: none !important;
}

/* 관리콘솔 standalone (body.rcy-admin-app) — 멤버 셸 없이 화면 전체를 사용.
   모서리/테두리 제거 + 풀하이트 + 가로 오버플로우 방지(화면 사이즈에 정확히 맞춤). */
body.rcy-admin-app { overflow-x: hidden; }
body.rcy-admin-app .rcy-admin-console {
  min-height: 100vh;
  max-width: 100%;
  border: 0;
  border-radius: 0;
  overflow: visible;
}
/* 메인/콘텐츠 영역이 그리드 트랙을 넘지 않도록 min-width:0 + 폭 제한 */
body.rcy-admin-app .rcy-admin-console__main { min-width: 0; max-width: 100%; }
body.rcy-admin-app .rcy-admin-console__content { min-width: 0; max-width: 100%; }
/* 콘솔 안의 표는 가로 스크롤로 처리(레이아웃 깨짐 방지) */
body.rcy-admin-app .rcy-admin-console__content .rcy-table-wrap { max-width: 100%; overflow-x: auto; }
/* 데스크탑에서만 내부 사이드바를 sticky 로 고정.
   CRITICAL: 모바일(≤980px)에서는 그리드가 1열이 되어 사이드바가 첫 행이 되는데,
   여기에 height:100vh 를 주면 사이드바가 화면 전체를 덮어 콘텐츠가 가려진다. */
@media (min-width: 981px) {
  body.rcy-admin-app .rcy-admin-console__side {
    position: sticky;
    top: 0;
    align-self: start;
    height: 100vh;
  }
}

/* 마케팅 랜딩 + 동아리 홈(비로그인 홈)에서도 테마 헤더/푸터 숨김 — RCY 자체 nav/footer 사용 */
body.page .rcy-landing, body.page .rcy-clubhome { position: relative; }
.rcy-landing ~ * .site-header,
body:has(.rcy-landing) .site-header,  body:has(.rcy-clubhome) .site-header,
body:has(.rcy-landing) #masthead,     body:has(.rcy-clubhome) #masthead,
body:has(.rcy-landing) .site-footer,  body:has(.rcy-clubhome) .site-footer,
body:has(.rcy-landing) #colophon,     body:has(.rcy-clubhome) #colophon,
body:has(.rcy-landing) .main-navigation, body:has(.rcy-clubhome) .main-navigation { display: none !important; }
body:has(.rcy-landing) .entry-content,  body:has(.rcy-clubhome) .entry-content,
body:has(.rcy-landing) .site-main,       body:has(.rcy-clubhome) .site-main,
body:has(.rcy-landing) main#main,        body:has(.rcy-clubhome) main#main { padding: 0 !important; margin: 0 !important; max-width: 100% !important; }
body:has(.rcy-clubhome) .wp-site-blocks, body:has(.rcy-clubhome) .wp-block-post-content { padding: 0 !important; margin: 0 !important; max-width: 100% !important; }

/* ============================================================
   CLUB HOME — 개별 대학 동아리 공개 홈페이지 (메인 허브와 다름)
   ============================================================ */
.rcy-clubhome { background: var(--rcy-bg); min-height: 100vh; display: flex; flex-direction: column; }
.rcy-clubhome__nav {
  position: sticky; top: 0; z-index: 50; display: flex; align-items: center; gap: var(--rcy-s4);
  height: 68px; padding: 0 var(--rcy-s8);
  background: var(--rcy-surface);
  background: color-mix(in srgb, var(--rcy-surface) 88%, transparent);
  backdrop-filter: blur(10px); border-bottom: 1px solid var(--rcy-border);
}
.rcy-clubhome__brand { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; }
.rcy-clubhome__brand-mark {
  display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px;
  border-radius: 10px; background: var(--rcy-brand); color: #fff; font-weight: 900; font-size: 13px;
  box-shadow: 0 6px 16px rgba(227,32,46,.3);
}
.rcy-clubhome__brand-text { font-weight: 900; color: var(--rcy-text); font-size: var(--rcy-fs-lg); }
.rcy-clubhome__links { display: flex; gap: var(--rcy-s5); flex: 1; margin-left: var(--rcy-s4); }
.rcy-clubhome__links a { color: var(--rcy-text-muted); text-decoration: none; font-weight: 700; font-size: var(--rcy-fs-sm); }
.rcy-clubhome__links a:hover { color: var(--rcy-brand); }
.rcy-clubhome__cta { display: flex; align-items: center; gap: var(--rcy-s2); margin-left: auto; }
.rcy-clubhome__hero { text-align: center; padding: var(--rcy-s16) var(--rcy-s6) var(--rcy-s12); background: linear-gradient(180deg, var(--rcy-brand-soft), transparent); }
.rcy-clubhome__pill {
  display: inline-block; padding: 6px 16px; border-radius: var(--rcy-r-pill); background: var(--rcy-surface);
  border: 1px solid var(--rcy-border); font-weight: 800; font-size: var(--rcy-fs-sm); color: var(--rcy-brand); margin-bottom: var(--rcy-s4);
}
.rcy-clubhome__title { margin: 0 0 var(--rcy-s4); font-size: clamp(2rem, 5vw, 3.2rem); font-weight: 900; letter-spacing: -.03em; color: var(--rcy-text); }
.rcy-clubhome__lead { max-width: 620px; margin: 0 auto var(--rcy-s6); color: var(--rcy-text-muted); font-size: var(--rcy-fs-lg); }
.rcy-clubhome__hero-cta { display: flex; gap: var(--rcy-s3); justify-content: center; flex-wrap: wrap; }
.rcy-clubhome__main { flex: 1; max-width: min(1360px, calc(100vw - 48px)); width: 100%; margin: 0 auto; padding: var(--rcy-s8) var(--rcy-s6) var(--rcy-s12); display: flex; flex-direction: column; gap: var(--rcy-s10); }
.rcy-clubhome__sec-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: var(--rcy-s5); gap: var(--rcy-s3); }
.rcy-clubhome__sec-head h2 { margin: 0; font-size: var(--rcy-fs-xl); font-weight: 900; color: var(--rcy-text); }
.rcy-clubhome__sec-head a { color: var(--rcy-brand); font-weight: 700; font-size: var(--rcy-fs-sm); text-decoration: none; white-space: nowrap; }
.rcy-clubhome__grid { display: grid; grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr); gap: var(--rcy-s6); align-items: start; }
.rcy-clubhome__joinbox { padding: var(--rcy-s6); border-radius: var(--rcy-r-2xl); background: var(--rcy-surface); border: 1px solid var(--rcy-border); box-shadow: var(--rcy-shadow-md, 0 6px 18px rgba(0,0,0,.08)); }
.rcy-clubhome__joinbox h3 { margin: 0 0 var(--rcy-s3); font-weight: 900; color: var(--rcy-text); }
.rcy-clubhome__joinbox p { margin: 0 0 var(--rcy-s5); color: var(--rcy-text-muted); font-size: var(--rcy-fs-sm); }
.rcy-clubhome__footer { border-top: 1px solid var(--rcy-border); background: var(--rcy-surface); padding: var(--rcy-s8) var(--rcy-s6); }
.rcy-clubhome__footer-inner { max-width: min(1360px, calc(100vw - 48px)); margin: 0 auto; display: flex; align-items: center; justify-content: space-between; gap: var(--rcy-s5); flex-wrap: wrap; }
.rcy-clubhome__foot-name { color: var(--rcy-text); font-size: var(--rcy-fs-lg); }
.rcy-clubhome__foot-links { display: flex; gap: var(--rcy-s4); flex-wrap: wrap; }
.rcy-clubhome__foot-links a { color: var(--rcy-text-muted); text-decoration: none; font-weight: 600; font-size: var(--rcy-fs-sm); }
.rcy-clubhome__foot-links a:hover { color: var(--rcy-brand); }
@media (max-width: 860px) { .rcy-clubhome__grid { grid-template-columns: 1fr; } }
@media (max-width: 720px) {
  .rcy-clubhome__nav { padding: 0 var(--rcy-s4); }
  .rcy-clubhome__links { display: none; }
  .rcy-clubhome__hero { padding: var(--rcy-s12) var(--rcy-s4) var(--rcy-s10); }
  .rcy-clubhome__footer-inner { justify-content: center; text-align: center; }
}

/* 전국 동아리 그리드 (메인 허브 "전국 동아리 보기") */
.rcy-clubgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr)); gap: var(--rcy-s4); }
.rcy-clubcard {
  display: flex; align-items: center; gap: var(--rcy-s3); padding: var(--rcy-s4);
  border-radius: var(--rcy-r-xl); background: var(--rcy-surface); border: 1px solid var(--rcy-border);
  border-left: 4px solid var(--rcy-clubcard-accent, var(--rcy-brand)); text-decoration: none;
  transition: transform var(--rcy-dur), box-shadow var(--rcy-dur), border-color var(--rcy-dur);
}
.rcy-clubcard:hover { transform: translateY(-3px); box-shadow: var(--rcy-shadow-lg, 0 12px 32px rgba(0,0,0,.14)); }
.rcy-clubcard__logo {
  flex: 0 0 auto; width: 48px; height: 48px; border-radius: 12px; overflow: hidden;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--rcy-brand-soft); color: var(--rcy-brand); font-weight: 900;
}
.rcy-clubcard__logo img { width: 100%; height: 100%; object-fit: cover; }
.rcy-clubcard__body { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.rcy-clubcard__name { font-weight: 800; color: var(--rcy-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rcy-clubcard__region { font-size: var(--rcy-fs-xs); color: var(--rcy-text-faint); }
.rcy-clubcard__stats { display: flex; gap: var(--rcy-s3); font-size: var(--rcy-fs-xs); color: var(--rcy-text-muted); font-weight: 600; flex-wrap: wrap; }
.rcy-clubcard__recruit { color: var(--rcy-brand); font-weight: 800; }
.rcy-clubcard__go { color: var(--rcy-text-faint); font-weight: 900; flex: 0 0 auto; }

/* DARK MODE adjustments for shell */
@media (prefers-color-scheme: dark) {
  body[data-rcy-theme="light"] .rcy-app-shell__topbar { background: var(--rcy-surface); }
  .rcy-app-shell__topbar { background: var(--rcy-surface); }
  .rcy-lms-hello { background: linear-gradient(135deg, var(--rcy-surface) 0%, var(--rcy-surface-2) 100%); }
}

/* Mini rows for sidebar cards in LMS dashboard */
.rcy-mini-row {
  display: flex; gap: var(--rcy-s3); align-items: flex-start;
  padding: var(--rcy-s2) 0;
  border-bottom: 1px solid var(--rcy-border);
}
.rcy-mini-row:last-child { border-bottom: 0; }
.rcy-mini-row__date {
  flex-shrink: 0; min-width: 54px;
  font-size: var(--rcy-fs-xs); font-weight: 800; color: var(--rcy-brand);
  background: var(--rcy-brand-soft); padding: 4px 8px; border-radius: var(--rcy-r-sm); text-align: center;
}
.rcy-mini-row__body { flex: 1; min-width: 0; }
.rcy-mini-row__title { font-weight: 700; font-size: var(--rcy-fs-sm); color: var(--rcy-text); margin-bottom: 2px; }
.rcy-mini-row__meta { font-size: var(--rcy-fs-xs); color: var(--rcy-text-muted); }

.rcy-empty--mini { padding: var(--rcy-s5) 0; text-align: center; }
.rcy-empty--mini .rcy-empty__icon { font-size: 32px; }
.rcy-empty--mini .rcy-empty__title { font-size: var(--rcy-fs-sm); margin: var(--rcy-s2) 0; }

.rcy-goal-mini { margin-bottom: var(--rcy-s4); }
.rcy-goal-mini:last-child { margin-bottom: 0; }
.rcy-goal-mini__head { display: flex; justify-content: space-between; margin-bottom: var(--rcy-s2); }
.rcy-goal-mini__title { font-weight: 700; font-size: var(--rcy-fs-sm); }
.rcy-goal-mini__pct { font-weight: 800; color: var(--rcy-brand); font-size: var(--rcy-fs-sm); }
.rcy-goal-mini__meta { font-size: var(--rcy-fs-xs); color: var(--rcy-text-muted); margin-top: 4px; }

.rcy-progress { height: 8px; background: var(--rcy-surface-2); border-radius: var(--rcy-r-pill); overflow: hidden; }
.rcy-progress__bar {
  height: 100%;
  background: linear-gradient(90deg, var(--rcy-brand), var(--rcy-brand-hover));
  border-radius: var(--rcy-r-pill);
  transition: width var(--rcy-dur);
}

/* ============================================================
   POLISH PASS — v1.4.1
   세련된 마이크로 인터랙션 + 글라스 + 그라데이션 + 다크모드 정합
   ============================================================ */

html { scroll-behavior: smooth; }
html:focus-within { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

/* === 글로벌 폰트 렌더링 === */
body.rcy-app, .rcy, .rcy-landing {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-feature-settings: "ss06", "cv02", "cv09";
  text-rendering: optimizeLegibility;
}

/* === 사이드바 — 마이크로 인터랙션 === */
.rcy-app-shell__sidebar {
  background-image:
    radial-gradient(600px 200px at 0% 0%, rgba(227,32,46,.08), transparent 60%),
    linear-gradient(180deg, var(--rcy-sidebar-bg) 0%, #0d1526 100%);
}
.rcy-app-shell__brand-mark {
  background-image: linear-gradient(135deg, var(--rcy-brand) 0%, var(--rcy-brand-hover) 100%);
  transition: transform var(--rcy-dur-fast) var(--rcy-ease);
}
.rcy-app-shell__brand:hover .rcy-app-shell__brand-mark { transform: rotate(-6deg) scale(1.05); }

.rcy-app-shell__link {
  position: relative;
  overflow: hidden;
  transition:
    background var(--rcy-dur) var(--rcy-ease),
    color var(--rcy-dur) var(--rcy-ease),
    transform var(--rcy-dur-fast) var(--rcy-ease),
    box-shadow var(--rcy-dur) var(--rcy-ease);
}
.rcy-app-shell__link::before {
  content: ''; position: absolute; left: 0; top: 10%; bottom: 10%;
  width: 3px; border-radius: 0 4px 4px 0;
  background: var(--rcy-brand);
  transform: scaleY(0);
  transform-origin: center;
  transition: transform var(--rcy-dur) var(--rcy-ease);
}
.rcy-app-shell__link:hover { transform: translateX(2px); }
.rcy-app-shell__link:hover::before { transform: scaleY(1); }
.rcy-app-shell__link.is-active::before { transform: scaleY(0); }  /* active 는 그라데이션이 충분 */
.rcy-app-shell__link.is-active {
  box-shadow: 0 8px 20px -8px rgba(227,32,46,.6), inset 0 1px 0 rgba(255,255,255,.1);
}
.rcy-app-shell__link-ic {
  transition: transform var(--rcy-dur) var(--rcy-ease-bounce);
}
.rcy-app-shell__link:hover .rcy-app-shell__link-ic { transform: scale(1.15) rotate(-5deg); }

/* === 토픽바 — 글라스 + 부드러운 그림자 === */
.rcy-app-shell__topbar {
  background: rgba(255,255,255,.75);
  -webkit-backdrop-filter: saturate(180%) blur(12px);
  backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid rgba(13,21,38,.06);
  box-shadow: 0 1px 0 rgba(13,21,38,.02);
}
.rcy-app-shell__crumb { letter-spacing: -.01em; }
.rcy-app-shell__icon-btn {
  border: 1px solid transparent;
  transition: all var(--rcy-dur) var(--rcy-ease);
}
.rcy-app-shell__icon-btn:hover {
  border-color: var(--rcy-brand-border);
  transform: translateY(-1px);
  box-shadow: 0 4px 12px -4px rgba(227,32,46,.25);
}

/* === LMS 카드 — 부드러운 lift hover === */
.rcy-lms-card {
  transition:
    transform var(--rcy-dur) var(--rcy-ease),
    box-shadow var(--rcy-dur) var(--rcy-ease),
    border-color var(--rcy-dur) var(--rcy-ease);
}
.rcy-lms-card:hover {
  border-color: var(--rcy-border-2);
  box-shadow: 0 12px 30px -12px rgba(13,21,38,.12), 0 4px 8px -4px rgba(13,21,38,.04);
}

/* === Hello 카드 — 더 세련된 그라데이션 === */
.rcy-lms-hello {
  background-image:
    radial-gradient(600px 250px at 100% 0%, rgba(227,32,46,.08), transparent 50%),
    radial-gradient(500px 200px at 0% 100%, rgba(147,51,234,.04), transparent 50%),
    linear-gradient(135deg, #ffffff 0%, #f4f6fb 100%);
  border-color: rgba(13,21,38,.06);
  position: relative;
  overflow: hidden;
}
.rcy-lms-hello::before {
  content: ''; position: absolute;
  top: -50%; right: -10%;
  width: 360px; height: 360px;
  background: radial-gradient(closest-side, rgba(227,32,46,.06), transparent);
  border-radius: 50%;
  pointer-events: none;
}
.rcy-lms-hello__name { letter-spacing: -.02em; }

/* === KPI tile — 색 아이콘 슬롯 추가 (위젯 HTML 과 호환) === */
.rcy-lms-kpis .rcy-stat {
  position: relative;
  padding: var(--rcy-s5) var(--rcy-s5) var(--rcy-s5) var(--rcy-s6);
  background: var(--rcy-glass);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-2xl);
  overflow: hidden;
  transition: all var(--rcy-dur) var(--rcy-ease);
}
.rcy-lms-kpis .rcy-stat::before {
  content: ''; position: absolute;
  left: 0; top: 20%; bottom: 20%; width: 4px;
  border-radius: 0 4px 4px 0;
  background: linear-gradient(180deg, var(--rcy-brand), var(--rcy-brand-hover));
  opacity: 0; transition: opacity var(--rcy-dur);
}
.rcy-lms-kpis .rcy-stat:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 24px -12px rgba(13,21,38,.12);
  border-color: var(--rcy-brand-border);
}
.rcy-lms-kpis .rcy-stat:hover::before { opacity: 1; }

/* === Tabs (admin) — 더 세련된 active === */
.rcy-tabs {
  box-shadow: 0 1px 2px rgba(13,21,38,.04);
}
.rcy-tabs__pill {
  transition:
    background var(--rcy-dur) var(--rcy-ease),
    color var(--rcy-dur) var(--rcy-ease),
    transform var(--rcy-dur-fast) var(--rcy-ease);
}
.rcy-tabs__pill:active { transform: scale(.96); }
.rcy-tabs__pill.is-active {
  background: linear-gradient(135deg, var(--rcy-text), var(--rcy-sidebar-bg-2));
  box-shadow: 0 4px 12px -4px rgba(13,21,38,.3);
}

/* === Quick-action grid — 아이콘 둥근 배경 === */
.rcy-lms-quick__item {
  position: relative;
  font-size: var(--rcy-fs-sm); font-weight: 700;
  gap: var(--rcy-s2);
  padding: var(--rcy-s5) var(--rcy-s3);
}
.rcy-lms-quick__item::first-letter,
.rcy-lms-quick__item { font-size: var(--rcy-fs-sm); }
/* emoji 자체는 첫 노드여서 별도 처리 어렵 — 단순 lift 만 */
.rcy-lms-quick__item:hover {
  transform: translateY(-3px);
  box-shadow: 0 8px 20px -8px rgba(227,32,46,.2);
}

/* === 랜딩 hero illustration — 더 안정된 정렬 === */
.rcy-landing__hero-art {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: var(--rcy-s4);
  height: auto;
}
.rcy-landing__art-card {
  position: static !important;
  transform: none !important;
  display: flex; flex-direction: column; justify-content: center; align-items: center;
  min-height: 140px;
  transition: transform var(--rcy-dur) var(--rcy-ease), box-shadow var(--rcy-dur) var(--rcy-ease);
}
.rcy-landing__art-card--1 { transform: rotate(-2deg) !important; }
.rcy-landing__art-card--2 { transform: rotate(2deg) translateY(-12px) !important; }
.rcy-landing__art-card--3 { transform: rotate(1.5deg) translateY(12px) !important; }
.rcy-landing__art-card--4 { transform: rotate(-1.5deg) !important; }
.rcy-landing__art-card:hover {
  transform: rotate(0deg) translateY(-6px) !important;
  box-shadow: 0 24px 48px -24px rgba(13,21,38,.25);
  z-index: 5;
}
.rcy-landing__art-card::after {
  content: ''; position: absolute; inset: 0;
  border-radius: inherit;
  background: linear-gradient(180deg, rgba(255,255,255,.6), transparent 30%);
  pointer-events: none;
}
.rcy-landing__art-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 52px; height: 52px; border-radius: 50%;
  background: var(--rcy-brand-soft); color: var(--rcy-brand);
  font-size: 26px;
  margin-bottom: var(--rcy-s2);
}

/* === 랜딩 hero — 미세 폰트 조정 === */
.rcy-landing__h1 { letter-spacing: -.025em; }
.rcy-landing__h2 { letter-spacing: -.02em; }
.rcy-landing__h3 { letter-spacing: -.01em; }
.rcy-landing__hero {
  position: relative;
  overflow: hidden;
}
.rcy-landing__hero::before {
  content: ''; position: absolute; inset: 0;
  background-image:
    radial-gradient(2px 2px at 20% 30%, rgba(227,32,46,.15), transparent),
    radial-gradient(2px 2px at 70% 60%, rgba(147,51,234,.10), transparent),
    radial-gradient(2px 2px at 85% 20%, rgba(31,76,255,.10), transparent);
  pointer-events: none;
}
.rcy-landing__trust span {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 10px; border-radius: var(--rcy-r-pill);
  background: var(--rcy-surface); border: 1px solid var(--rcy-border-2);
}

/* === Feature card — top border accent on hover === */
.rcy-landing__feature {
  position: relative;
  overflow: hidden;
}
.rcy-landing__feature::after {
  content: ''; position: absolute;
  top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, var(--rcy-brand), var(--rcy-brand-hover));
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--rcy-dur-slow) var(--rcy-ease);
}
.rcy-landing__feature:hover::after { transform: scaleX(1); }
.rcy-landing__feature-ic {
  background-image: linear-gradient(135deg, var(--rcy-brand-soft) 0%, var(--rcy-brand-soft-2) 100%);
  transition: transform var(--rcy-dur) var(--rcy-ease-bounce);
}
.rcy-landing__feature:hover .rcy-landing__feature-ic { transform: rotate(-8deg) scale(1.05); }

/* === Step card — 숫자 강조 === */
.rcy-landing__step {
  transition: transform var(--rcy-dur) var(--rcy-ease), box-shadow var(--rcy-dur) var(--rcy-ease);
}
.rcy-landing__step:hover { transform: translateY(-4px); box-shadow: var(--rcy-shadow-md); }
.rcy-landing__step-num { letter-spacing: -.02em; }

/* === Stats tile — 호버 효과 === */
.rcy-landing__stat {
  transition: all var(--rcy-dur);
  position: relative; overflow: hidden;
}
.rcy-landing__stat::before {
  content: ''; position: absolute; inset: 0;
  background: radial-gradient(closest-side, rgba(227,32,46,.06), transparent);
  opacity: 0; transition: opacity var(--rcy-dur);
}
.rcy-landing__stat:hover { transform: translateY(-2px); border-color: var(--rcy-brand-border); }
.rcy-landing__stat:hover::before { opacity: 1; }

/* === CTA band — 미세 그라데이션 + 별 === */
.rcy-landing__cta-band {
  position: relative;
  overflow: hidden;
}
.rcy-landing__cta-band::before {
  content: ''; position: absolute; top: -50%; right: -10%;
  width: 400px; height: 400px;
  background: radial-gradient(closest-side, rgba(227,32,46,.18), transparent);
  border-radius: 50%;
  pointer-events: none;
}

/* === Buttons — 미세한 깊이감 === */
.rcy-btn {
  letter-spacing: -.005em;
  transition:
    background var(--rcy-dur) var(--rcy-ease),
    color var(--rcy-dur) var(--rcy-ease),
    transform var(--rcy-dur-fast) var(--rcy-ease),
    box-shadow var(--rcy-dur) var(--rcy-ease);
}
.rcy-btn--primary { box-shadow: 0 4px 12px -4px rgba(227,32,46,.4); }
.rcy-btn--primary:hover {
  transform: translateY(-1px);
  box-shadow: 0 8px 20px -6px rgba(227,32,46,.5);
}
.rcy-btn--primary:active { transform: translateY(0); }
.rcy-btn--lg { font-weight: 800; }

/* === Skeleton — 더 부드러운 shimmer === */
.rcy-skeleton {
  background-image: linear-gradient(
    90deg,
    var(--rcy-surface-2) 0%,
    var(--rcy-surface-3) 40%,
    var(--rcy-surface-2) 80%
  );
  background-size: 200% 100%;
  border-radius: var(--rcy-r-lg);
  animation: rcy-shimmer 1.6s ease-in-out infinite;
}
@keyframes rcy-shimmer {
  0%   { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}

/* === Empty state — 더 부드러운 색상 === */
.rcy-empty {
  text-align: center;
  padding: var(--rcy-s10) var(--rcy-s5);
  color: var(--rcy-text-muted);
}
.rcy-empty__icon {
  font-size: 48px;
  opacity: .5;
  filter: grayscale(.3);
  margin-bottom: var(--rcy-s3);
}
.rcy-empty__title { font-weight: 700; color: var(--rcy-text-2); font-size: var(--rcy-fs-base); }
.rcy-empty__sub { font-size: var(--rcy-fs-sm); color: var(--rcy-text-muted); margin-top: var(--rcy-s2); }

/* === Soft badge variant === */
.rcy-badge--soft {
  background: var(--rcy-surface-2);
  color: var(--rcy-text-2);
  border: 1px solid var(--rcy-border-2);
  font-weight: 700;
}

/* === Progress bar — 그라데이션 + 광택 === */
.rcy-progress__bar {
  position: relative;
  background-image: linear-gradient(90deg, var(--rcy-brand), var(--rcy-brand-hover));
  overflow: hidden;
}
.rcy-progress__bar::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.3), transparent);
  transform: translateX(-100%);
  animation: rcy-progress-shine 2.5s ease-in-out infinite;
}
@keyframes rcy-progress-shine {
  0%, 60% { transform: translateX(-100%); }
  100%    { transform: translateX(200%); }
}

/* === 다크 모드 정합 — auto + manual 토글 둘 다 === */
@media (prefers-color-scheme: dark) {
  body[data-rcy-theme="light"] { color-scheme: light; }
  body:not([data-rcy-theme="light"]) {
    color-scheme: dark;
  }
  body:not([data-rcy-theme="light"]) .rcy-app-shell__topbar {
    background: rgba(10,12,23,.72);
    border-color: rgba(255,255,255,.06);
  }
  body:not([data-rcy-theme="light"]) .rcy-lms-hello {
    background-image:
      radial-gradient(600px 250px at 100% 0%, rgba(227,32,46,.16), transparent 50%),
      linear-gradient(135deg, var(--rcy-surface) 0%, var(--rcy-surface-2) 100%);
  }
  body:not([data-rcy-theme="light"]) .rcy-landing__nav {
    background: rgba(10,12,23,.72);
    border-color: rgba(255,255,255,.06);
  }
  body:not([data-rcy-theme="light"]) .rcy-landing__art-card,
  body:not([data-rcy-theme="light"]) .rcy-landing__stat,
  body:not([data-rcy-theme="light"]) .rcy-landing__feature,
  body:not([data-rcy-theme="light"]) .rcy-landing__step {
    background: var(--rcy-surface);
    border-color: var(--rcy-border-2);
  }
}
body[data-rcy-theme="dark"] .rcy-app-shell__topbar {
  background: rgba(10,12,23,.72);
  border-color: rgba(255,255,255,.06);
}
body[data-rcy-theme="dark"] .rcy-lms-hello {
  background-image:
    radial-gradient(600px 250px at 100% 0%, rgba(227,32,46,.16), transparent 50%),
    linear-gradient(135deg, var(--rcy-surface) 0%, var(--rcy-surface-2) 100%);
}

/* === 포커스 링 통일 — Signal Red (3px solid) === */
.rcy *:focus-visible,
.rcy-landing *:focus-visible,
.rcy-app-shell *:focus-visible {
  outline: 3px solid var(--rcy-brand);
  outline-offset: 2px;
  border-radius: var(--rcy-r-sm);
}

/* === 모바일 폴리시 === */
@media (max-width: 640px) {
  .rcy-app-shell__crumb { font-size: var(--rcy-fs-base); }
  .rcy-app-shell__topbar { padding: 0 var(--rcy-s4); }
  .rcy-lms-hello { padding: var(--rcy-s5); border-radius: var(--rcy-r-xl); }
  .rcy-lms-hello__name { font-size: var(--rcy-fs-2xl); }
  .rcy-tabs { padding: var(--rcy-s1); border-radius: var(--rcy-r-lg); }
  .rcy-tabs__pill { padding: var(--rcy-s2) var(--rcy-s3); font-size: var(--rcy-fs-xs); }
}

/* === Print 친화 === */
@media print {
  .rcy-app-shell__sidebar,
  .rcy-app-shell__topbar,
  .rcy-landing__nav,
  .rcy-landing__footer,
  .rcy-app-shell__menu-btn { display: none !important; }
  body.rcy-app { padding-left: 0 !important; }
  .rcy-app-shell__content { padding: 0 !important; }
}

/* ============================================================
   v1.4.2 — 추가 폴리시 & 호환
   ============================================================ */

/* 랜딩: WP admin bar 와 sticky nav 겹침 방지 */
body.admin-bar .rcy-landing__nav { top: 32px; }
@media (max-width: 782px) { body.admin-bar .rcy-landing__nav { top: 46px; } }

/* settings/votes/my-dues 페이지 — admin 콘솔과 동일 body container */
.rcy-app-shell__content > header.rcy-lms-page-head + nav.rcy-tabs { margin-top: 0; }

/* 단일 stack 행 → 단순 카드 리스트 */
.rcy-stack { display: flex; flex-direction: column; gap: var(--rcy-s3); }

/* 보안 페이지의 2FA 시크릿 표시 가독성 */
.rcy-input.rcy-mono, .rcy-textarea.rcy-mono, .rcy-tw-input.rcy-mono, .rcy-tw-textarea.rcy-mono { font-family: var(--rcy-font-mono); font-size: var(--rcy-fs-xs); }

/* 토픽바 아이콘 버튼이 a 태그 (이전 inline 스타일 fallback) */
.rcy-app-shell__icon-btn img { width: 28px; height: 28px; border-radius: 50%; }
.rcy-app-shell__icon-btn:has(img) { padding: 0; }

/* 사이드바 그룹 라벨 아래 살짝 더 여백 */
.rcy-app-shell__group + .rcy-app-shell__group { margin-top: var(--rcy-s4); }

/* 활성 사이드바 링크에 살짝 글로우 */
.rcy-app-shell__link.is-active {
  text-shadow: 0 1px 0 rgba(0,0,0,.1);
}

/* 토픽바 — 모바일에서 아이콘 크기 보정 */
@media (max-width: 640px) {
  .rcy-app-shell__icon-btn { width: 36px; height: 36px; font-size: 16px; }
  .rcy-app-shell__icon-btn img { width: 26px; height: 26px; }
}

/* Hero 카드 — 어두운 모드에서 회전 카드의 배경 보정 */
@media (prefers-color-scheme: dark) {
  body:not([data-rcy-theme="light"]) .rcy-landing__art-card {
    background: var(--rcy-surface);
    border-color: rgba(255,255,255,.08);
  }
  body:not([data-rcy-theme="light"]) .rcy-landing__art-card::after {
    background: linear-gradient(180deg, rgba(255,255,255,.04), transparent 30%);
  }
}

/* 마케팅 features grid — 더 부드러운 배경 */
.rcy-landing__features { position: relative; padding: 0 var(--rcy-s2); }

/* CTA band 가 dark band 형식 — 액션 버튼 호버 */
.rcy-landing__cta-band-actions .rcy-btn--ghost-light:hover {
  background: rgba(255,255,255,.18);
  border-color: rgba(255,255,255,.32);
}

/* ============================================================
   v1.4.3 — Anonymous suggestions
   ============================================================ */

.rcy-anon-promise {
  background: linear-gradient(135deg, var(--rcy-brand-soft) 0%, #fff 100%);
  border-color: var(--rcy-brand-border);
}
.rcy-anon-promise__row { display: flex; gap: var(--rcy-s4); align-items: flex-start; }
.rcy-anon-promise__ic {
  display: inline-flex; align-items: center; justify-content: center;
  width: 48px; height: 48px; border-radius: var(--rcy-r-lg);
  background: var(--rcy-brand); color: white; font-size: 24px;
  box-shadow: var(--rcy-shadow-red);
  flex-shrink: 0;
}
.rcy-anon-promise strong { font-size: var(--rcy-fs-base); color: var(--rcy-text); }
.rcy-anon-promise p { margin: var(--rcy-s2) 0 0; line-height: 1.6; }

.rcy-anon-toggle {
  display: flex; gap: var(--rcy-s3); align-items: flex-start;
  padding: var(--rcy-s4);
  background: var(--rcy-surface-2);
  border-radius: var(--rcy-r-lg);
  border: 1px solid var(--rcy-border-2);
  cursor: pointer;
}
.rcy-anon-toggle input[type=checkbox] { margin-top: 4px; width: 18px; height: 18px; cursor: pointer; }
.rcy-anon-toggle strong { display: block; font-weight: 700; color: var(--rcy-text); }
.rcy-anon-toggle small { display: block; color: var(--rcy-text-muted); margin-top: 2px; font-size: var(--rcy-fs-xs); }
.rcy-anon-toggle:hover { background: var(--rcy-brand-soft); border-color: var(--rcy-brand-border); }

.rcy-anon-item {
  padding: var(--rcy-s5) var(--rcy-s6);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-2xl);
  margin-bottom: var(--rcy-s4);
  background: var(--rcy-surface);
  transition: all var(--rcy-dur) var(--rcy-ease);
}
.rcy-anon-item:hover { box-shadow: var(--rcy-shadow-sm); transform: translateY(-1px); }
.rcy-anon-item__head { display: flex; align-items: center; gap: var(--rcy-s3); margin-bottom: var(--rcy-s2); flex-wrap: wrap; }
.rcy-anon-item__title { font-size: var(--rcy-fs-lg); font-weight: 800; margin: var(--rcy-s2) 0; color: var(--rcy-text); }
.rcy-anon-item__body { color: var(--rcy-text-2); line-height: 1.7; margin: 0; }
.rcy-anon-item__reply {
  margin-top: var(--rcy-s4);
  padding: var(--rcy-s4);
  background: linear-gradient(135deg, var(--rcy-brand-soft) 0%, #fff 100%);
  border-left: 3px solid var(--rcy-brand);
  border-radius: var(--rcy-r-md);
}
.rcy-anon-item__reply-h {
  font-size: var(--rcy-fs-sm); font-weight: 800;
  color: var(--rcy-brand);
  margin-bottom: var(--rcy-s2);
}

/* 다크 모드 */
body[data-rcy-theme="dark"] .rcy-anon-promise,
body[data-rcy-theme="dark"] .rcy-anon-item__reply {
  background: linear-gradient(135deg, var(--rcy-surface-2) 0%, var(--rcy-surface) 100%);
}
@media (prefers-color-scheme: dark) {
  body:not([data-rcy-theme="light"]) .rcy-anon-promise,
  body:not([data-rcy-theme="light"]) .rcy-anon-item__reply {
    background: linear-gradient(135deg, var(--rcy-surface-2) 0%, var(--rcy-surface) 100%);
  }
}

/* ============================================================
   v1.4.6 — Officers, Calendar filters & subscription
   ============================================================ */

/* === Officer cards === */
.rcy-officer-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: var(--rcy-s3);
  margin-top: var(--rcy-s3);
}
.rcy-officer-card {
  display: flex; gap: var(--rcy-s3); align-items: center;
  padding: var(--rcy-s3) var(--rcy-s4);
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-lg);
  transition: all var(--rcy-dur);
}
.rcy-officer-card:hover { border-color: var(--rcy-brand-border); transform: translateY(-1px); box-shadow: var(--rcy-shadow-sm); }
.rcy-officer-card__avatar { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.rcy-officer-card__body { flex: 1; min-width: 0; }
.rcy-officer-card__name { font-weight: 800; font-size: var(--rcy-fs-base); color: var(--rcy-text); line-height: 1.2; }
.rcy-officer-card__role { font-size: var(--rcy-fs-xs); color: var(--rcy-brand); font-weight: 700; margin-top: 2px; display: flex; gap: 6px; align-items: center; }
.rcy-officer-card__meta { font-size: var(--rcy-fs-xs); color: var(--rcy-text-muted); margin-top: 2px; }

/* === Calendar type chips === */
.rcy-cal-filters {
  display: flex; gap: var(--rcy-s2); flex-wrap: wrap;
  padding: var(--rcy-s3) 0;
  border-bottom: 1px solid var(--rcy-border);
  margin-bottom: var(--rcy-s3);
}
.rcy-cal-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 12px; border-radius: var(--rcy-r-pill);
  background: var(--rcy-surface-2); border: 1px solid var(--rcy-border-2);
  font-size: var(--rcy-fs-xs); font-weight: 700; color: var(--rcy-text-muted);
  cursor: pointer;
  transition: all var(--rcy-dur);
}
.rcy-cal-chip:hover { color: var(--rcy-text); }
.rcy-cal-chip__dot {
  display: inline-block; width: 10px; height: 10px;
  border-radius: 50%; background: var(--chip-color, var(--rcy-text-muted));
}
.rcy-cal-chip.is-on {
  background: var(--rcy-surface);
  color: var(--rcy-text);
  border-color: var(--chip-color, var(--rcy-brand));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--chip-color, var(--rcy-brand)) 12%, transparent);
}

/* === Calendar event bars colored === */
.rcy-cal__event {
  font-size: var(--rcy-fs-xxs);
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 4px;
  background: var(--rcy-brand);
  color: white;
  margin-top: 3px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* === Calendar subscription cards === */
.rcy-cal-sub {
  display: flex; justify-content: space-between; gap: var(--rcy-s4);
  align-items: flex-start;
  padding: var(--rcy-s4);
  background: var(--rcy-surface);
  border: 1px solid var(--rcy-border);
  border-left: 4px solid var(--rcy-brand);
  border-radius: var(--rcy-r-md);
}
.rcy-cal-sub strong { font-size: var(--rcy-fs-sm); color: var(--rcy-text); }
@media (max-width: 640px) {
  .rcy-cal-sub { flex-direction: column; }
  .rcy-cal-sub > div:last-child { flex-direction: row; }
}

/* ============================================================
   v1.4.8 — 레이아웃 폭 정상화 + 반응형 전면 보강
   ============================================================ */

/* --- D1: LMS shell 내부 container 이중 max-width 제거 ---
   shortcode 들이 .rcy-container(max 1200px, 가운데정렬) 로 감싸는데
   이게 app-shell__content(이미 패딩+max 1400) 안에 들어가면 좌우가 과하게 좁아짐.
   shell 안에서는 container 를 풀폭으로. */
body.rcy-app .rcy-app-shell__content .rcy-container,
.rcy-app-shell__content .rcy-container {
  max-width: 100%;
  margin: 0;
  padding: 0;
}

/* content 영역 — 메인 영역을 꽉 채움 (가운데 정렬 제거).
   넓은 모니터에서 max-width 가운데정렬은 좌우에 큰 빈 공간을 만들었음 → 풀폭으로. */
.rcy-app-shell__content {
  max-width: none;
  margin: 0;
  width: 100%;
}

/* 풀폭 활용 — 카드/그리드가 가로를 충분히 차지 */
.rcy-app-shell__content > .rcy,
.rcy-app-shell__content > .rcy-container,
.rcy-app-shell__content .rcy-lms-grid,
.rcy-app-shell__content .rcy-lms-kpis {
  width: 100%;
}

/* --- D2: 반응형 전면 보강 --- */

/* 공통: 표는 항상 가로 스크롤 가능 */
.rcy-table-wrap { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.rcy-table { min-width: 520px; }

/* 모달이 작은 화면에서 꽉 차도록 */
@media (max-width: 560px) {
  .rcy-modal { max-width: 96vw; width: 96vw; max-height: 92vh; border-radius: var(--rcy-r-lg); padding: var(--rcy-s4); }
  .rcy-modal__body { max-height: 64vh; overflow-y: auto; }
}

/* 태블릿 (≤ 1024px): 사이드바 오버레이 모드 — content 풀폭 */
@media (max-width: 1024px) {
  .rcy-app-shell__content { padding: var(--rcy-s5) var(--rcy-s5); max-width: 100%; }
  /* 2-컬럼 대시보드 → 1-컬럼 */
  .rcy-lms-grid { grid-template-columns: 1fr; }
  .rcy-lms-kpis { grid-template-columns: repeat(2, 1fr); }
  /* 일반 그리드 축소 */
  .rcy-grid--4 { grid-template-columns: repeat(2, 1fr); }
  .rcy-grid--3 { grid-template-columns: repeat(2, 1fr); }
}

/* 모바일 (≤ 768px) */
@media (max-width: 768px) {
  .rcy-app-shell__content { padding: var(--rcy-s4) var(--rcy-s4); }
  .rcy-lms-kpis { grid-template-columns: 1fr; }
  .rcy-grid--4, .rcy-grid--3, .rcy-grid--2 { grid-template-columns: 1fr; }
  .rcy-h1 { font-size: var(--rcy-fs-2xl); }
  .rcy-h2 { font-size: var(--rcy-fs-xl); }
  /* 헤더 row 들이 세로로 쌓이게 */
  .rcy-row--between { flex-wrap: wrap; gap: var(--rcy-s3); }
  /* 페이지 헤더 액션 풀폭 */
  .rcy-lms-page-head { flex-direction: column; align-items: flex-start; gap: var(--rcy-s3); }
  .rcy-lms-page-head__actions { width: 100%; }
  /* 탭 가로 스크롤 */
  .rcy-tabs { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .rcy-tabs__pill { flex: 0 0 auto; }
  /* 토픽바 액션 압축 */
  .rcy-app-shell__crumb { font-size: var(--rcy-fs-base); }
  /* 버튼이 작은 화면에서 풀폭 옵션 */
  .rcy-btn--block-sm { width: 100%; justify-content: center; }
}

/* 초소형 (≤ 460px) */
@media (max-width: 460px) {
  .rcy-app-shell__topbar { padding: 0 var(--rcy-s3); gap: var(--rcy-s2); }
  .rcy-app-shell__brand-name { font-size: var(--rcy-fs-sm); }
  .rcy-lms-hello__name { font-size: var(--rcy-fs-xl); }
  .rcy-lms-card { padding: var(--rcy-s4); border-radius: var(--rcy-r-lg); }
  /* hero/landing 폰트 축소 */
  .rcy-landing__h1 { font-size: 30px; }
}

/* 가로 넘침 방지 — 전역 안전장치 */
body.rcy-app { overflow-x: hidden; }
.rcy-app-shell, .rcy-app-shell__main { min-width: 0; max-width: 100%; }
.rcy-app-shell__content img,
.rcy-app-shell__content video,
.rcy-app-shell__content iframe { max-width: 100%; height: auto; }

/* ============================================================
   v1.8.4 — Dashboard UX refinement
   ============================================================ */
.rcy-dashboard-home {
  display: grid;
  gap: var(--rcy-s5);
}
.rcy-dashboard-home .rcy-lms-hello,
.rcy-lms-hello--dashboard {
  margin-bottom: 0;
  padding: var(--rcy-s5) var(--rcy-s6);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface);
  border-color: var(--rcy-border-2);
  box-shadow: var(--rcy-shadow-sm);
}
  backdrop-filter: var(--rcy-blur);
  -webkit-backdrop-filter: var(--rcy-blur);
  transition: all var(--rcy-dur) var(--rcy-ease);

.rcy-lms-hello--dashboard::before { display: none; }
.rcy-lms-hello__meta {
  display: flex;
  align-items: center;
  gap: var(--rcy-s2);
  flex-wrap: wrap;
  margin-bottom: var(--rcy-s2);
}
.rcy-lms-hello__badge,
.rcy-admin-console__role-badge {
  display: inline-flex;
  align-items: center;
  min-height: 28px;
  padding: 0 var(--rcy-s3);
  border: 1px solid var(--rcy-brand-border);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-brand-soft);
  color: var(--rcy-brand);
  font-size: var(--rcy-fs-xs);
  font-weight: 900;
  white-space: nowrap;
}
.rcy-lms-hello--dashboard .rcy-lms-hello__name {
  margin: 0 0 var(--rcy-s1);
  font-size: var(--rcy-fs-2xl);
  letter-spacing: 0;
}
.rcy-lms-hello--dashboard .rcy-lms-hello__sub {
  font-size: var(--rcy-fs-sm);
}
.rcy-dashboard-home .rcy-lms-kpis {
  margin-bottom: 0;
}
.rcy-home-action-grid {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: var(--rcy-s3);
}
.rcy-home-action {
  display: grid;
  gap: 4px;
  min-width: 0;
  min-height: 96px;
  padding: var(--rcy-s4);
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface);
  color: var(--rcy-text);
  text-decoration: none;
  box-shadow: var(--rcy-shadow-xs);
}
.rcy-home-action:hover {
  border-color: var(--rcy-brand-border);
  background: var(--rcy-brand-soft);
  color: var(--rcy-text);
}
.rcy-home-action__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-brand-soft);
  color: var(--rcy-brand);
  font-size: 18px;
  font-weight: 900;
}
.rcy-home-action__label {
  font-size: var(--rcy-fs-sm);
  font-weight: 900;
  line-height: 1.2;
}
.rcy-home-action__meta {
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xs);
  line-height: 1.25;
}
.rcy-dashboard-home .rcy-lms-grid {
  grid-template-columns: minmax(0, 1.72fr) minmax(300px, .88fr);
  align-items: start;
}
.rcy-dashboard-home .rcy-lms-card,
.rcy-admin-console .rcy-lms-card,
.rcy-admin-console .rcy-card {
  border-radius: var(--rcy-r-sm);
  border-color: var(--rcy-border-2);
  box-shadow: var(--rcy-shadow-xs);
}
.rcy-dashboard-home .rcy-lms-card {
  padding: var(--rcy-s5);
}
.rcy-dashboard-home .rcy-lms-card:hover,
.rcy-admin-console .rcy-lms-card:hover,
.rcy-admin-console .rcy-card:hover {
  transform: none;
  border-color: var(--rcy-border-2);
  box-shadow: var(--rcy-shadow-sm);
}
.rcy-dashboard-home .rcy-lms-card__head {
  margin-bottom: var(--rcy-s3);
  gap: var(--rcy-s3);
}
.rcy-lms-card__title {
  display: inline-flex;
  align-items: center;
  gap: var(--rcy-s2);
  min-width: 0;
  letter-spacing: 0;
}
.rcy-panel-icon {
  position: relative;
  display: inline-flex;
  flex: 0 0 auto;
  width: 28px;
  height: 28px;
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface-2);
  border: 1px solid var(--rcy-border-2);
}
.rcy-panel-icon::before {
  content: '';
  position: absolute;
  inset: 8px;
  border-radius: 3px;
  background: var(--rcy-brand);
}
.rcy-panel-icon--activity::before { background: var(--rcy-info); }
.rcy-panel-icon--heatmap::before { background: var(--rcy-success); box-shadow: 6px 0 0 rgba(14,143,94,.45), 0 6px 0 rgba(14,143,94,.32), 6px 6px 0 rgba(14,143,94,.22); }
.rcy-panel-icon--goal::before { background: var(--rcy-warning); border-radius: 50%; }
.rcy-panel-icon--calendar::before { background: var(--rcy-brand); box-shadow: 0 -5px 0 rgba(227,32,46,.35); }
.rcy-panel-icon--meeting::before { background: var(--rcy-info); border-radius: 50%; box-shadow: 7px 0 0 rgba(31,76,255,.45); }
.rcy-panel-icon--notice::before { background: var(--rcy-warning); }
.rcy-panel-icon--friend::before { background: var(--rcy-success); border-radius: 50%; box-shadow: 7px 0 0 rgba(14,143,94,.45); }
.rcy-panel-icon--photo::before { background: #7c3aed; }
.rcy-panel-icon--quick::before { background: var(--rcy-text-muted); box-shadow: 6px 0 0 rgba(97,91,81,.45), 0 6px 0 rgba(97,91,81,.35), 6px 6px 0 rgba(97,91,81,.25); }

.rcy-friend-mini {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--rcy-s2);
}
.rcy-friend-mini__stat {
  display: grid;
  gap: 2px;
  min-height: 68px;
  padding: var(--rcy-s3);
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface-2);
  color: var(--rcy-text);
  text-decoration: none;
}
.rcy-friend-mini__stat strong { font-size: var(--rcy-fs-xl); line-height: 1; }
.rcy-friend-mini__stat span { color: var(--rcy-text-muted); font-size: var(--rcy-fs-xs); font-weight: 800; }

.rcy-friends-layout {
  display: grid;
  grid-template-columns: minmax(280px, .82fr) minmax(0, 1.18fr);
  gap: var(--rcy-s5);
  align-items: start;
}
.rcy-friends-search__form {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: var(--rcy-s2);
  margin-bottom: var(--rcy-s4);
}
.rcy-friends-lists {
  display: grid;
  gap: var(--rcy-s4);
}
.rcy-friends-section .rcy-lms-card__head,
.rcy-friends-search .rcy-lms-card__head { margin-bottom: var(--rcy-s3); }
.rcy-friend-row {
  display: flex;
  align-items: center;
  gap: var(--rcy-s3);
  min-width: 0;
  padding: var(--rcy-s3);
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-glass);
}
.rcy-friend-row__avatar {
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--rcy-surface-2);
}
.rcy-friend-row__avatar--empty {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.rcy-friend-row__body {
  flex: 1;
  min-width: 0;
}
.rcy-friend-row__name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--rcy-text);
  font-size: var(--rcy-fs-sm);
  font-weight: 900;
}
.rcy-friend-row__meta {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xs);
  font-weight: 700;
}
.rcy-friend-row__actions {
  display: flex;
  align-items: center;
  gap: var(--rcy-s2);
  flex: 0 0 auto;
  flex-wrap: wrap;
  justify-content: flex-end;
}

.rcy-check {
  display: inline-flex;
  align-items: center;
  gap: var(--rcy-s2);
  color: var(--rcy-text-2);
  font-size: var(--rcy-fs-sm);
  font-weight: 800;
}
.rcy-check input { width: 18px; height: 18px; accent-color: var(--rcy-brand); }

.rcy-sponsors-layout {
  display: grid;
  gap: var(--rcy-s5);
}
.rcy-sponsors-home,
.rcy-sponsor-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 210px), 1fr));
  gap: var(--rcy-s3);
}
.rcy-sponsor-card {
  display: flex;
  align-items: center;
  gap: var(--rcy-s3);
  min-width: 0;
  min-height: 86px;
  padding: var(--rcy-s4);
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface);
  color: var(--rcy-text);
  text-decoration: none;
  box-shadow: var(--rcy-shadow-sm);
}
  backdrop-filter: var(--rcy-blur);
  -webkit-backdrop-filter: var(--rcy-blur);
  transition: all var(--rcy-dur) var(--rcy-ease);

.rcy-sponsor-card:hover {
  border-color: var(--rcy-brand-border);
  background: var(--rcy-brand-soft);
  color: var(--rcy-text);
}
.rcy-sponsor-card__logo {
  flex: 0 0 auto;
  width: 48px;
  height: 48px;
  border-radius: var(--rcy-r-sm);
  object-fit: contain;
  background: var(--rcy-surface-2);
  border: 1px solid var(--rcy-border-2);
}
.rcy-sponsor-card__logo--empty {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--rcy-brand);
  font-weight: 900;
  font-size: var(--rcy-fs-xl);
}
.rcy-sponsor-card__body {
  display: grid;
  gap: 2px;
  min-width: 0;
}
.rcy-sponsor-card__name,
.rcy-sponsor-card__meta,
.rcy-sponsor-card__sub {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rcy-sponsor-card__name {
  font-size: var(--rcy-fs-sm);
  font-weight: 900;
}
.rcy-sponsor-card__meta {
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xs);
  font-weight: 800;
}
.rcy-sponsor-card__sub {
  color: var(--rcy-text-faint);
  font-size: var(--rcy-fs-xs);
}
.rcy-sponsor-group .rcy-lms-card__head,
.rcy-sponsor-manager .rcy-lms-card__head {
  margin-bottom: var(--rcy-s3);
}

.rcy-lms-quick {
  grid-template-columns: 1fr;
  gap: var(--rcy-s2);
}
.rcy-lms-quick__item {
  flex-direction: row;
  justify-content: flex-start;
  min-height: 48px;
  padding: var(--rcy-s2) var(--rcy-s3);
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface);
  color: var(--rcy-text-2);
}
.rcy-lms-quick__item:hover {
  transform: none;
  background: var(--rcy-brand-soft);
  border-color: var(--rcy-brand-border);
  box-shadow: none;
}
.rcy-quick-icon {
  position: relative;
  display: inline-flex;
  flex: 0 0 auto;
  width: 30px;
  height: 30px;
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface-2);
  border: 1px solid var(--rcy-border-2);
}
.rcy-quick-icon::before {
  content: '';
  position: absolute;
  left: 8px;
  top: 8px;
  width: 12px;
  height: 12px;
  border-radius: 4px;
  background: var(--rcy-brand);
}
.rcy-quick-icon--points::before { background: var(--rcy-warning); border-radius: 50%; }
.rcy-quick-icon--blood::before { background: var(--rcy-brand); border-radius: 50% 50% 50% 2px; transform: rotate(-45deg); }
.rcy-quick-icon--messages::before { background: var(--rcy-info); border-radius: 5px; }
.rcy-quick-icon--docs::before { background: #7c3aed; box-shadow: 4px -4px 0 rgba(147,51,234,.28); }
.rcy-quick-icon--forms::before { background: var(--rcy-success); }
.rcy-quick-icon--rank::before { background: var(--rcy-warning); box-shadow: 0 5px 0 rgba(180,95,6,.35); }

.rcy-notify-list {
  display: flex;
  flex-direction: column;
  gap: var(--rcy-s2);
}
.rcy-notify-item {
  display: flex;
  gap: var(--rcy-s3);
  align-items: flex-start;
  padding: var(--rcy-s3);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface);
  color: var(--rcy-text);
  text-decoration: none;
}
.rcy-notify-item:hover { background: var(--rcy-surface-2); }
.rcy-notify-item__dot {
  width: 9px;
  height: 9px;
  margin-top: 7px;
  border-radius: 50%;
  background: var(--rcy-brand);
  flex: 0 0 auto;
}
.rcy-notify-item__body {
  display: flex;
  flex-direction: column;
  min-width: 0;
  gap: 3px;
}
.rcy-notify-item__body strong {
  color: var(--rcy-text);
  font-size: var(--rcy-fs-sm);
  font-weight: 900;
}
.rcy-notify-item__body span {
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xs);
  font-weight: 650;
  line-height: 1.45;
}
.rcy-notify-item__body em {
  color: var(--rcy-text-faint);
  font-size: var(--rcy-fs-xxs);
  font-style: normal;
  font-weight: 800;
}
.rcy-notify-item--compact { padding: 10px; }

.rcy-policy-doc__body {
  color: var(--rcy-text-2);
  font-size: var(--rcy-fs-sm);
  font-weight: 600;
  line-height: 1.75;
  white-space: normal;
}
.rcy-policy-doc__body p { margin: 0 0 var(--rcy-s3); }

/* 리치 텍스트(약관/회칙 본문 + 에디터 출력) */
.rcy-richtext { color: var(--rcy-text-2); line-height: 1.8; }
.rcy-richtext h2 { font-size: 1.25rem; font-weight: 800; margin: 1.2em 0 .5em; color: var(--rcy-text-1); }
.rcy-richtext h3 { font-size: 1.08rem; font-weight: 700; margin: 1em 0 .4em; color: var(--rcy-text-1); }
.rcy-richtext p { margin: 0 0 .75em; }
.rcy-richtext ul, .rcy-richtext ol { margin: 0 0 .75em; padding-left: 1.4em; }
.rcy-richtext li { margin: .2em 0; }
.rcy-richtext a { color: var(--rcy-brand, #c81b28); text-decoration: underline; }
.rcy-richtext blockquote { margin: .75em 0; padding: .5em 1em; border-left: 3px solid var(--rcy-brand, #c81b28); background: var(--rcy-surface-2, #f4f6fb); border-radius: 0 8px 8px 0; }

/* 리치 텍스트 에디터 (회칙·약관 관리) */
.rcy-rte { border: 1px solid var(--rcy-border, #e2e7f0); border-radius: 12px; overflow: hidden; background: var(--rcy-surface, #fff); }
.rcy-rte__bar { display: flex; flex-wrap: wrap; gap: 2px; align-items: center; padding: 6px 8px; background: var(--rcy-surface-2, #f4f6fb); border-bottom: 1px solid var(--rcy-border, #e2e7f0); }
.rcy-rte__btn { min-width: 32px; height: 30px; padding: 0 8px; border: 1px solid transparent; border-radius: 7px; background: transparent; cursor: pointer; font-size: 13px; font-weight: 700; color: var(--rcy-text-2); line-height: 1; }
.rcy-rte__btn:hover { background: var(--rcy-surface, #fff); border-color: var(--rcy-border, #e2e7f0); }
.rcy-rte__btn.is-on { background: var(--rcy-brand, #c81b28); color: #fff; }
.rcy-rte__sep { width: 1px; height: 18px; margin: 0 4px; background: var(--rcy-border, #e2e7f0); }
.rcy-rte__area { min-height: 240px; max-height: 540px; overflow-y: auto; padding: 14px 16px; outline: none; }
.rcy-rte__area:focus { box-shadow: inset 0 0 0 2px rgba(196,18,31,.15); }
.rcy-rte__html { border: 0; border-radius: 0; resize: vertical; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; }
.rcy-policy-history {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: var(--rcy-s3);
}
.rcy-policy-history__item {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 4px;
  min-height: 76px;
  padding: var(--rcy-s4);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-sm);
  background: var(--rcy-surface);
  color: var(--rcy-text);
  cursor: pointer;
  text-align: left;
}
.rcy-policy-history__item:hover { background: var(--rcy-surface-2); }
.rcy-policy-history__item strong {
  font-size: var(--rcy-fs-sm);
  font-weight: 900;
}
.rcy-policy-history__item span {
  color: var(--rcy-text-faint);
  font-size: var(--rcy-fs-xs);
  font-weight: 700;
}

.rcy-admin-console {
  grid-template-columns: 272px minmax(0, 1fr);
  border-radius: var(--rcy-r-sm);
  border-color: var(--rcy-border-2);
  box-shadow: var(--rcy-shadow-sm);
  background: var(--rcy-surface);
}
.rcy-admin-console__side {
  background: #0d1526;
}
.rcy-admin-console__brand {
  min-height: 68px;
  padding: 0 var(--rcy-s4);
}
.rcy-admin-console__brand-mark {
  width: 36px;
  height: 36px;
  border-radius: var(--rcy-r-sm);
  box-shadow: none;
}
.rcy-admin-console__brand-text {
  font-size: var(--rcy-fs-base);
}
.rcy-admin-console__nav {
  gap: 3px;
  padding: var(--rcy-s4);
}
.rcy-admin-console__item,
.rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item {
  display: flex;
  align-items: center;
  gap: var(--rcy-s2);
  min-height: 42px;
  padding: 0 var(--rcy-s2);
  border-radius: var(--rcy-r-sm);
  color: #c2cce0;
}
.rcy-admin-console__item > span:not(.rcy-admin-console__item-ic):not(.rcy-tabs__dot),
.rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item > span:not(.rcy-admin-console__item-ic):not(.rcy-tabs__dot) {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rcy-admin-console__item-ic {
  position: relative;
  display: inline-flex;
  flex: 0 0 auto;
  width: 28px;
  height: 28px;
  border-radius: var(--rcy-r-sm);
  background: rgba(255,255,255,.07);
  border: 1px solid rgba(255,255,255,.08);
}
.rcy-admin-console__item-ic::before {
  content: '';
  position: absolute;
  inset: 8px;
  border-radius: 3px;
  background: #6b7689;
}
.rcy-admin-console__item-ic--dashboard::before { background: var(--rcy-brand); box-shadow: 6px 0 0 rgba(227,32,46,.35), 0 6px 0 rgba(227,32,46,.25), 6px 6px 0 rgba(227,32,46,.18); }
.rcy-admin-console__item-ic--members::before,
.rcy-admin-console__item-ic--officers::before { background: var(--rcy-info); border-radius: 50%; box-shadow: 7px 0 0 rgba(31,76,255,.38); }
.rcy-admin-console__item-ic--projects::before,
.rcy-admin-console__item-ic--resources::before,
.rcy-admin-console__item-ic--settings::before { background: #7c3aed; }
.rcy-admin-console__item-ic--finance::before { background: var(--rcy-success); }
.rcy-admin-console__item-ic--meetings::before { background: var(--rcy-warning); box-shadow: 0 -5px 0 rgba(180,95,6,.35); }
.rcy-admin-console__item-ic--certifications::before,
.rcy-admin-console__item-ic--approvals::before { background: var(--rcy-brand); border-radius: 50%; }
.rcy-admin-console__item-ic--notices::before,
.rcy-admin-console__item-ic--anonymous::before { background: var(--rcy-warning); }
.rcy-admin-console__item-ic--stats::before { background: var(--rcy-info); box-shadow: 5px 0 0 rgba(31,76,255,.35), 10px 0 0 rgba(31,76,255,.2); }
.rcy-admin-console__item-ic--logs::before { background: var(--rcy-text-faint); }
.rcy-admin-console__item.is-active,
.rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item.is-active {
  background: rgba(227,32,46,.16);
  color: #fff;
  box-shadow: inset 3px 0 0 var(--rcy-brand);
}
.rcy-admin-console__item.is-active .rcy-admin-console__item-ic {
  background: rgba(227,32,46,.18);
  border-color: rgba(227,32,46,.35);
}
.rcy-admin-console__main {
  background: #f4f6fb;
}
.rcy-admin-console__top {
  position: sticky;
  top: 0;
  z-index: 5;
  min-height: 68px;
  padding: var(--rcy-s3) var(--rcy-s5);
  background: rgba(255,255,255,.92);
  -webkit-backdrop-filter: saturate(180%) blur(10px);
  backdrop-filter: saturate(180%) blur(10px);
}
.rcy-admin-console__title {
  font-size: var(--rcy-fs-xl);
  letter-spacing: 0;
}
.rcy-admin-console__search {
  width: min(300px, 30vw);
}
.rcy-admin-console__content {
  padding: var(--rcy-s5);
}
.rcy-admin-hero,
.rcy-admin-settings-head {
  border-radius: var(--rcy-r-sm);
  border-color: var(--rcy-border-2);
  box-shadow: var(--rcy-shadow-xs);
}
.rcy-admin-hero__title {
  font-size: var(--rcy-fs-xl);
  letter-spacing: 0;
}
.rcy-admin-task,
.rcy-admin-permission,
.rcy-admin-setting-toggle,
.rcy-admin-settings-health span {
  border-radius: var(--rcy-r-sm);
}

@media (max-width: 1100px) {
  .rcy-dashboard-home .rcy-lms-grid {
    grid-template-columns: 1fr;
  }
  .rcy-home-action-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .rcy-lms-quick {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 980px) {
  .rcy-admin-console {
    grid-template-columns: 1fr;
  }
  .rcy-friends-layout {
    grid-template-columns: 1fr;
  }
  .rcy-admin-console__item,
  .rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item {
    min-height: 40px;
    padding: 0 var(--rcy-s3);
  }
  .rcy-admin-console__item > span:not(.rcy-admin-console__item-ic):not(.rcy-tabs__dot) {
    overflow: visible;
    text-overflow: clip;
  }
  .rcy-admin-console__role-badge {
    display: none;
  }
}
@media (max-width: 640px) {
  .rcy-home-action-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .rcy-home-action {
    min-height: 88px;
    padding: var(--rcy-s3);
  }
  .rcy-friends-search__form {
    grid-template-columns: 1fr;
  }
  .rcy-friend-row {
    align-items: flex-start;
  }
  .rcy-friend-row__actions {
    width: 100%;
    justify-content: flex-start;
  }
  .rcy-lms-hello--dashboard {
    padding: var(--rcy-s4);
  }
  .rcy-lms-hello--dashboard .rcy-lms-hello__name {
    font-size: var(--rcy-fs-xl);
  }
  .rcy-lms-hello__cta {
    width: 100%;
  }
  .rcy-lms-hello__cta .rcy-btn, .rcy-lms-hello__cta .rcy-tw-button {
    flex: 1;
    justify-content: center;
  }
  .rcy-lms-quick {
    grid-template-columns: 1fr;
  }
  .rcy-admin-console__content {
    padding: var(--rcy-s3);
  }
}

@media (prefers-color-scheme: dark) {
  body:not([data-rcy-theme="light"]) .rcy-app-mobile-nav {
    background: rgba(6,7,15,.92);
    border-top-color: var(--rcy-border-2);
  }
  body:not([data-rcy-theme="light"]) .rcy-admin-console__main {
    background: var(--rcy-bg);
  }
  body:not([data-rcy-theme="light"]) .rcy-admin-console__top {
    background: rgba(10,12,23,.82);
  }
}
body[data-rcy-theme="dark"] .rcy-admin-console__main {
  background: var(--rcy-bg);
}
body[data-rcy-theme="dark"] .rcy-app-mobile-nav {
  background: rgba(6,7,15,.92);
  border-top-color: var(--rcy-border-2);
}
body[data-rcy-theme="dark"] .rcy-admin-console__top {
  background: rgba(10,12,23,.82);
}
.rcy-app-shell__content pre,
.rcy-app-shell__content code { white-space: pre-wrap; word-break: break-word; }

/* ============================================================
   v1.6.3 — Club membership application wizard
   ============================================================ */

.rcy-membership-page {
  min-height: 100vh;
  padding: var(--rcy-s10) var(--rcy-s4);
  background:
    radial-gradient(680px 280px at 50% 0%, rgba(227,32,46,.08), transparent 64%),
    var(--rcy-bg);
}
.rcy-membership-hero {
  max-width: 760px;
  margin: 0 auto var(--rcy-s7);
  text-align: center;
}
.rcy-membership-hero__mark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 72px;
  height: 72px;
  margin-bottom: var(--rcy-s4);
  border-radius: var(--rcy-r-2xl);
  background: var(--rcy-surface);
  color: var(--rcy-brand);
  border: 1px solid var(--rcy-border);
  box-shadow: var(--rcy-shadow-sm);
  font-weight: 900;
  letter-spacing: .04em;
}
.rcy-membership-hero__title {
  margin: 0;
  color: var(--rcy-text);
  font-size: var(--rcy-fs-3xl);
  font-weight: 900;
  letter-spacing: 0;
}
.rcy-membership-hero__copy {
  margin: var(--rcy-s2) 0 0;
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-sm);
  font-weight: 700;
}
.rcy-membership-card {
  max-width: 920px;
  margin: 0 auto;
  padding: var(--rcy-s8);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-3xl);
  background: var(--rcy-surface);
  box-shadow: var(--rcy-shadow-lg);
}
.rcy-membership-steps {
  position: relative;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--rcy-s3);
  margin-bottom: var(--rcy-s8);
}
.rcy-membership-steps__track {
  position: absolute;
  top: 19px;
  left: 16.5%;
  right: 16.5%;
  height: 4px;
  z-index: 0;
  overflow: hidden;
  border-radius: var(--rcy-r-pill);
  background: var(--rcy-surface-2);
}
.rcy-membership-steps__track span {
  display: block;
  width: 0;
  height: 100%;
  border-radius: inherit;
  background: var(--rcy-brand);
  transition: width var(--rcy-dur-slow) var(--rcy-ease);
}
.rcy-membership-step {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--rcy-s2);
  min-width: 0;
}
.rcy-membership-step__dot {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: var(--rcy-surface-2);
  color: var(--rcy-text-faint);
  font-weight: 900;
  transition: background var(--rcy-dur), color var(--rcy-dur), box-shadow var(--rcy-dur);
}
.rcy-membership-step.is-active .rcy-membership-step__dot {
  background: var(--rcy-brand);
  color: white;
  box-shadow: 0 0 0 6px var(--rcy-brand-soft), var(--rcy-shadow-red);
}
.rcy-membership-step__label {
  color: var(--rcy-text-faint);
  font-size: var(--rcy-fs-xs);
  font-weight: 900;
  text-align: center;
}
.rcy-membership-step.is-active .rcy-membership-step__label { color: var(--rcy-text); }
.rcy-membership-panel {
  display: none;
  opacity: 0;
  transform: translateX(14px);
}
.rcy-membership-panel.is-active {
  display: block;
  opacity: 1;
  transform: translateX(0);
  animation: rcy-membership-panel-in var(--rcy-dur) var(--rcy-ease);
}
@keyframes rcy-membership-panel-in {
  from { opacity: 0; transform: translateX(14px); }
  to { opacity: 1; transform: translateX(0); }
}
.rcy-membership-panel__head { margin-bottom: var(--rcy-s5); }
.rcy-membership-panel__head h2 {
  margin: 0;
  color: var(--rcy-text);
  font-size: var(--rcy-fs-xl);
  font-weight: 900;
  letter-spacing: 0;
}
.rcy-membership-panel__head p {
  margin: var(--rcy-s1) 0 0;
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-sm);
}
.rcy-field--soft { margin-bottom: var(--rcy-s4); }
.rcy-field--soft .rcy-input,
.rcy-field--soft .rcy-textarea,
.rcy-field--soft .rcy-tw-input,
.rcy-field--soft .rcy-tw-textarea {
  border-radius: var(--rcy-r-xl);
  background: var(--rcy-surface-2);
  border-color: var(--rcy-border);
}
.rcy-field--soft .rcy-input:focus,
.rcy-field--soft .rcy-textarea:focus,
.rcy-field--soft .rcy-tw-input:focus,
.rcy-field--soft .rcy-tw-textarea:focus {
  background: var(--rcy-surface);
  border-color: var(--rcy-brand);
  box-shadow: 0 0 0 4px rgba(227,32,46,.08);
}
.rcy-field__optional {
  margin-left: var(--rcy-s2);
  padding: 2px 8px;
  border-radius: var(--rcy-r-pill);
  background: var(--rcy-surface-2);
  color: var(--rcy-text-faint);
  font-size: 10px;
  font-weight: 900;
}
.rcy-input.is-invalid,
.rcy-textarea.is-invalid {
  border-color: var(--rcy-danger) !important;
  background: #fdecec !important;
  animation: rcy-membership-shake .36s ease-in-out;
}
@keyframes rcy-membership-shake {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-4px); }
  75% { transform: translateX(4px); }
}
.rcy-membership-dept { position: relative; }
.rcy-membership-dept__list {
  position: absolute;
  left: 0;
  right: 0;
  top: calc(100% - var(--rcy-s2));
  z-index: 30;
  max-height: 220px;
  overflow-y: auto;
  padding: var(--rcy-s2);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-xl);
  background: var(--rcy-surface);
  box-shadow: var(--rcy-shadow-lg);
}
.rcy-membership-dept__list button {
  display: block;
  width: 100%;
  padding: var(--rcy-s3) var(--rcy-s4);
  border: 0;
  border-radius: var(--rcy-r-md);
  background: transparent;
  color: var(--rcy-text);
  text-align: left;
  font-weight: 800;
  cursor: pointer;
}
.rcy-membership-dept__list button:hover {
  background: var(--rcy-brand-soft);
  color: var(--rcy-brand);
}
.rcy-membership-sign {
  margin-top: var(--rcy-s2);
  border: 1px dashed var(--rcy-border-2);
  border-radius: var(--rcy-r-xl);
  background: var(--rcy-surface);
  overflow: hidden;
}
.rcy-membership-sign canvas {
  display: block;
  width: 100%;
  height: 180px;
  touch-action: none;
}
.rcy-membership-preview { margin-top: var(--rcy-s2); }
.rcy-membership-terms {
  display: grid;
  gap: var(--rcy-s3);
  margin-top: var(--rcy-s5);
  padding: var(--rcy-s4);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-xl);
  background: var(--rcy-surface-2);
}
.rcy-membership-terms label {
  display: flex;
  align-items: flex-start;
  gap: var(--rcy-s3);
  color: var(--rcy-text-2);
  font-size: var(--rcy-fs-sm);
  font-weight: 700;
  cursor: pointer;
}
.rcy-membership-terms input {
  margin-top: 3px;
  accent-color: var(--rcy-brand);
}
.rcy-membership-terms__all {
  padding-bottom: var(--rcy-s3);
  border-bottom: 1px solid var(--rcy-border);
  color: var(--rcy-text) !important;
  font-weight: 900 !important;
}
.rcy-membership-actions {
  display: flex;
  gap: var(--rcy-s3);
  margin-top: var(--rcy-s7);
}
.rcy-membership-actions .rcy-btn:not([hidden]), .rcy-membership-actions .rcy-tw-button:not([hidden]) {
  flex: 1;
  justify-content: center;
}

@media (max-width: 640px) {
  .rcy-membership-page { padding: var(--rcy-s6) var(--rcy-s3); }
  .rcy-membership-card { padding: var(--rcy-s5); border-radius: var(--rcy-r-2xl); }
  .rcy-membership-hero__title { font-size: var(--rcy-fs-2xl); }
  .rcy-membership-actions { flex-direction: column; }
}

/* ============================================================
   v1.7.4 — Club admin console
   ============================================================ */
.rcy-admin-console {
  display: grid;
  grid-template-columns: 260px minmax(0, 1fr);
  min-height: calc(100vh - var(--rcy-shell-topbar-h) - var(--rcy-wp-adminbar-h) - 32px);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-2xl);
  overflow: hidden;
  background: var(--rcy-bg);
}
.rcy-admin-console__side {
  display: flex;
  flex-direction: column;
  min-height: 0;
  background: #0d1526;
  color: #c2cad9;
}
.rcy-admin-console__brand {
  display: flex;
  align-items: center;
  gap: var(--rcy-s3);
  min-height: 72px;
  padding: 0 var(--rcy-s5);
  border-bottom: 1px solid rgba(255,255,255,.08);
}
.rcy-admin-console__brand-mark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 10px;
  background: var(--rcy-brand);
  color: #fff;
  font-weight: 900;
  box-shadow: 0 10px 28px rgba(227,32,46,.28);
}
.rcy-admin-console__brand-text {
  color: #fff;
  font-weight: 900;
  font-size: var(--rcy-fs-lg);
}
.rcy-admin-console__nav {
  display: flex;
  flex-direction: column;
  gap: 4px;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: var(--rcy-s5) var(--rcy-s4);
}
.rcy-admin-console__nav-label {
  display: block;
  margin: var(--rcy-s4) var(--rcy-s2) var(--rcy-s2);
  color: #64748b;
  font-size: 11px;
  font-weight: 900;
  text-transform: uppercase;
  letter-spacing: .08em;
}
.rcy-admin-console__nav-label:first-child { margin-top: 0; }
.rcy-admin-console__item,
.rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item {
  justify-content: flex-start;
  width: 100%;
  min-height: 42px;
  margin: 0;
  padding: 0 var(--rcy-s3);
  border: 0;
  border-radius: 10px;
  background: transparent;
  color: #c2cad9;
  font-size: var(--rcy-fs-sm);
  font-weight: 800;
  text-align: left;
  box-shadow: none;
}
.rcy-admin-console__item:hover,
.rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item:hover {
  background: rgba(255,255,255,.06);
  color: #fff;
}
.rcy-admin-console__item.is-active,
.rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item.is-active {
  background: rgba(227,32,46,.14);
  color: #fff;
}
.rcy-admin-console__profile {
  display: flex;
  align-items: center;
  gap: var(--rcy-s3);
  padding: var(--rcy-s4);
  border-top: 1px solid rgba(255,255,255,.08);
}
.rcy-admin-console__avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: rgba(255,255,255,.08);
  color: var(--rcy-brand);
  font-weight: 900;
}
.rcy-admin-console__profile-meta {
  min-width: 0;
  display: grid;
  gap: 2px;
}
.rcy-admin-console__profile-meta strong {
  color: #fff;
  font-size: var(--rcy-fs-sm);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rcy-admin-console__profile-meta span {
  color: #9ca3af;
  font-size: var(--rcy-fs-xs);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rcy-admin-console__main {
  min-width: 0;
  background: var(--rcy-bg);
}
.rcy-admin-console__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--rcy-s4);
  min-height: 72px;
  padding: var(--rcy-s4) var(--rcy-s8);
  border-bottom: 1px solid var(--rcy-border);
  background: var(--rcy-surface);
}
.rcy-admin-console__title {
  margin: 0;
  color: var(--rcy-text);
  font-size: var(--rcy-fs-xl);
  font-weight: 900;
}
.rcy-admin-console__actions {
  display: flex;
  align-items: center;
  gap: var(--rcy-s2);
}
.rcy-admin-console__search {
  width: min(260px, 28vw);
}
.rcy-admin-console__content {
  /* 메뉴(좌측 사이드바)는 그대로 — 콘텐츠 영역에만 넉넉한 좌우 여백으로 가독성·UX 향상.
     데스크탑 실제 적용 규칙은 @media(min-width:981px) 의 admin-app 전용 규칙 참고. */
  padding: var(--rcy-s6) var(--rcy-s8);
}
.rcy-admin-hero {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--rcy-s4);
  margin-bottom: var(--rcy-s5);
  padding: var(--rcy-s5);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-xl);
  background: var(--rcy-surface);
}
.rcy-admin-hero__title {
  margin: var(--rcy-s1) 0 var(--rcy-s1);
  color: var(--rcy-text);
  font-size: var(--rcy-fs-xl);
  font-weight: 900;
}
.rcy-admin-task {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--rcy-s3);
  padding: var(--rcy-s3);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-md);
  background: var(--rcy-surface-2);
}
.rcy-admin-task span {
  display: block;
  margin-top: 2px;
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xs);
}
.rcy-admin-metric {
  display: flex;
  justify-content: space-between;
  gap: var(--rcy-s3);
  padding: var(--rcy-s3) 0;
  border-bottom: 1px solid var(--rcy-border);
}
.rcy-admin-metric:last-of-type { border-bottom: 0; }
.rcy-admin-metric span { color: var(--rcy-text-muted); font-weight: 700; }
.rcy-admin-metric strong { color: var(--rcy-text); font-weight: 900; }
.rcy-admin-permissions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--rcy-s2);
}
.rcy-admin-permission {
  display: flex;
  align-items: center;
  gap: var(--rcy-s2);
  min-height: 38px;
  padding: var(--rcy-s2) var(--rcy-s3);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-md);
  background: var(--rcy-surface-2);
  color: var(--rcy-text);
  font-size: var(--rcy-fs-sm);
  font-weight: 800;
}
.rcy-admin-permission input { accent-color: var(--rcy-brand); }
.rcy-admin-settings-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--rcy-s4);
  margin-bottom: var(--rcy-s5);
  padding: var(--rcy-s5);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-xl);
  background: var(--rcy-surface);
}
.rcy-admin-settings-health {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: var(--rcy-s2);
  max-width: 360px;
}
.rcy-admin-settings-health span {
  display: inline-flex;
  align-items: center;
  min-height: 28px;
  padding: 0 var(--rcy-s3);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-md);
  background: var(--rcy-surface-2);
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xs);
  font-weight: 900;
}
.rcy-admin-settings-health span.is-warn {
  border-color: rgba(180,95,6, .35);
  background: rgba(180,95,6, .1);
  color: var(--rcy-warning);
}
.rcy-admin-setting-toggle {
  display: flex;
  align-items: center;
  gap: var(--rcy-s2);
  min-height: 38px;
  padding: var(--rcy-s2) var(--rcy-s3);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-md);
  background: var(--rcy-surface-2);
  color: var(--rcy-text);
  font-size: var(--rcy-fs-sm);
  font-weight: 800;
}
.rcy-admin-setting-toggle input {
  accent-color: var(--rcy-brand);
}
.rcy-admin-diagnostics {
  display: grid;
  gap: var(--rcy-s2);
}
.rcy-admin-diagnostic-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--rcy-s3);
  min-height: 38px;
  padding: var(--rcy-s2) 0;
  border-bottom: 1px solid var(--rcy-border);
}
.rcy-admin-diagnostic-row:last-child {
  border-bottom: 0;
}
.rcy-admin-diagnostic-row span {
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-sm);
  font-weight: 800;
}
.rcy-admin-diagnostic-row strong {
  min-width: 0;
  color: var(--rcy-text);
  font-size: var(--rcy-fs-sm);
  font-weight: 900;
  text-align: right;
  overflow-wrap: anywhere;
}
.rcy-admin-diagnostic-row strong.is-warn {
  color: var(--rcy-warning);
}
@media (max-width: 980px) {
  .rcy-admin-console { grid-template-columns: 1fr; }
  .rcy-admin-console__side { min-height: auto; }
  .rcy-admin-console__nav {
    flex-direction: row;
    overflow-x: auto;
    padding: var(--rcy-s3);
  }
  .rcy-admin-console__nav-label,
  .rcy-admin-console__profile { display: none; }
  .rcy-admin-console__item,
  .rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item {
    flex: 0 0 auto;
    width: auto;
    white-space: nowrap;
  }
  .rcy-admin-console__top {
    flex-direction: column;
    align-items: stretch;
    padding: var(--rcy-s4);
  }
  .rcy-admin-console__actions { justify-content: space-between; }
  .rcy-admin-console__search { width: 100%; }
  .rcy-admin-console__content { padding: var(--rcy-s4); }
  .rcy-admin-settings-head {
    flex-direction: column;
  }
  .rcy-admin-settings-health {
    justify-content: flex-start;
    max-width: none;
  }
}
@media (max-width: 640px) {
  .rcy-admin-hero {
    flex-direction: column;
    align-items: stretch;
  }
  .rcy-admin-permissions { grid-template-columns: 1fr; }
}

/* ============================================================
   v1.7.5 — Personal profile settings
   ============================================================ */
.rcy-profile-settings {
  display: grid;
  grid-template-columns: 300px minmax(0, 1fr);
  gap: var(--rcy-s6);
  align-items: start;
}
.rcy-profile-settings__side {
  display: grid;
  gap: var(--rcy-s4);
}
.rcy-profile-summary {
  position: sticky;
  top: calc(var(--rcy-shell-topbar-h) + var(--rcy-wp-adminbar-h) + 16px);
  overflow: hidden;
  padding: 0 var(--rcy-s5) var(--rcy-s5);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-2xl);
  background: var(--rcy-surface);
  text-align: center;
  box-shadow: var(--rcy-shadow-sm);
}
.rcy-profile-summary__cover {
  height: 86px;
  margin: 0 calc(var(--rcy-s5) * -1);
  background: linear-gradient(135deg, var(--rcy-brand), #0d1526);
  background-size: cover;
  background-position: center;
}
.rcy-profile-summary__avatar {
  width: 96px;
  height: 96px;
  margin-top: -48px;
  border: 4px solid var(--rcy-surface);
  border-radius: 24px;
  object-fit: cover;
  background: var(--rcy-surface-2);
  box-shadow: var(--rcy-shadow-md);
}
.rcy-profile-summary h2 {
  margin: var(--rcy-s3) 0 2px;
  color: var(--rcy-text);
  font-size: var(--rcy-fs-xl);
  font-weight: 900;
}
.rcy-profile-summary p {
  margin: 0;
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-sm);
  font-weight: 800;
}
.rcy-profile-summary__stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0;
  margin: var(--rcy-s5) 0;
  padding-top: var(--rcy-s4);
  border-top: 1px solid var(--rcy-border);
}
.rcy-profile-summary__stats div + div {
  border-left: 1px solid var(--rcy-border);
}
.rcy-profile-summary__stats strong {
  display: block;
  color: var(--rcy-brand);
  font-size: var(--rcy-fs-xl);
  font-weight: 900;
}
.rcy-profile-summary__stats span {
  color: var(--rcy-text-faint);
  font-size: var(--rcy-fs-xxs);
  font-weight: 900;
  text-transform: uppercase;
  letter-spacing: .08em;
}
.rcy-profile-settings__nav {
  display: grid;
  gap: var(--rcy-s2);
  padding: var(--rcy-s3);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-2xl);
  background: var(--rcy-surface);
}
.rcy-profile-settings__nav button {
  display: flex;
  align-items: center;
  width: 100%;
  min-height: 42px;
  padding: 0 var(--rcy-s4);
  border: 0;
  border-radius: var(--rcy-r-lg);
  background: transparent;
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-sm);
  font-weight: 900;
  text-align: left;
  cursor: pointer;
}
.rcy-profile-settings__nav button:hover {
  background: var(--rcy-surface-2);
  color: var(--rcy-text);
}
.rcy-profile-settings__nav button.is-active {
  background: var(--rcy-brand-soft);
  color: var(--rcy-brand);
}
.rcy-profile-settings__main {
  min-width: 0;
}
.rcy-profile-link-row {
  align-items: center;
}
.rcy-profile-link-row .rcy-input:first-child, .rcy-profile-link-row .rcy-tw-input:first-child {
  max-width: 180px;
}
.rcy-profile-block {
  padding: var(--rcy-s4);
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-xl);
  background: var(--rcy-surface-2);
}
@media (max-width: 980px) {
  .rcy-profile-settings {
    grid-template-columns: 1fr;
  }
  .rcy-profile-summary {
    position: relative;
    top: auto;
  }
  .rcy-profile-settings__nav {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 640px) {
  .rcy-profile-settings__nav {
    grid-template-columns: 1fr;
  }
  .rcy-profile-link-row {
    display: grid;
    grid-template-columns: 1fr;
  }
  .rcy-profile-link-row .rcy-input:first-child, .rcy-profile-link-row .rcy-tw-input:first-child {
    max-width: none;
  }
}

/* ============================================================
   v1.7.1 — Messenger (모바일 친화 + 그룹 + 읽음)
   ============================================================ */
.rcy-msgr {
  display: grid;
  grid-template-columns: minmax(300px, 360px) minmax(0, 1fr);
  gap: 0;
  width: 100%;
  max-width: 1180px;
  height: calc(100vh - var(--rcy-shell-topbar-h) - var(--rcy-wp-adminbar-h) - 48px);
  min-height: 560px;
  margin: 0 auto;
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-sm);
  overflow: hidden;
  background: var(--rcy-surface);
  box-shadow: var(--rcy-shadow-sm);
  color: var(--rcy-text);
}
.rcy-msgr__list {
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--rcy-border);
  min-width: 0;
  background: var(--rcy-surface);
}
.rcy-msgr__list-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 74px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--rcy-border);
}
.rcy-msgr__account { display: flex; align-items: center; gap: 12px; min-width: 0; }
.rcy-msgr__account-av {
  width: 42px;
  height: 42px;
  border-radius: 50%;
  object-fit: cover;
  flex: 0 0 auto;
  background: var(--rcy-surface-2);
}
.rcy-msgr__account-text { min-width: 0; }
.rcy-msgr__account-text span {
  display: block;
  margin-top: 2px;
  color: var(--rcy-text-faint);
  font-size: var(--rcy-fs-xs);
  font-weight: 700;
}
.rcy-msgr__title {
  margin: 0;
  color: var(--rcy-text);
  font-size: 18px;
  font-weight: 900;
  line-height: 1.2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rcy-msgr__new {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border: 1px solid var(--rcy-border);
  border-radius: 50%;
  background: var(--rcy-surface);
  color: var(--rcy-text);
  cursor: pointer;
  flex: 0 0 auto;
  font-size: 24px;
  font-weight: 500;
  line-height: 1;
  transition: background var(--rcy-dur), border-color var(--rcy-dur), color var(--rcy-dur);
}
.rcy-msgr__new:hover {
  background: var(--rcy-surface-2);
  border-color: var(--rcy-border-2);
  color: var(--rcy-brand);
}
.rcy-msgr__search {
  position: relative;
  padding: 12px 16px;
  border-bottom: 1px solid var(--rcy-border);
}
.rcy-msgr__search .rcy-input, .rcy-msgr__search .rcy-tw-input {
  height: 40px;
  border: 0;
  border-radius: var(--rcy-r-pill);
  background: var(--rcy-surface-2);
  padding: 0 16px 0 42px;
  font-size: var(--rcy-fs-sm);
  font-weight: 700;
  box-shadow: none;
}
.rcy-msgr__search span {
  position: absolute;
  left: 30px;
  top: 50%;
  width: 14px;
  height: 14px;
  border: 2px solid var(--rcy-text-faint);
  border-radius: 50%;
  transform: translateY(-50%);
  pointer-events: none;
}
.rcy-msgr__search span::after {
  content: '';
  position: absolute;
  right: -5px;
  bottom: -4px;
  width: 7px;
  height: 2px;
  border-radius: 2px;
  background: var(--rcy-text-faint);
  transform: rotate(45deg);
}
.rcy-msgr__threads { flex: 1; overflow-y: auto; }

.rcy-msgr__thread {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  min-height: 76px;
  text-align: left;
  border: 0;
  background: transparent;
  padding: 10px 16px;
  cursor: pointer;
  position: relative;
  color: var(--rcy-text);
  font: inherit;
  transition: background var(--rcy-dur), transform var(--rcy-dur);
}
.rcy-msgr__thread:hover { background: var(--rcy-surface-2); }
.rcy-msgr__thread.is-active { background: var(--rcy-brand-soft); }
.rcy-msgr__thread.is-unread .rcy-msgr__thread-name,
.rcy-msgr__thread.is-unread .rcy-msgr__thread-prev { font-weight: 900; color: var(--rcy-text); }
.rcy-msgr__thread-av {
  width: 54px;
  height: 54px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
  background: var(--rcy-surface-2);
}
.rcy-msgr__thread-av--fallback {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--rcy-border-2);
  color: var(--rcy-text-2);
  font-weight: 900;
}
.rcy-msgr__thread-body { flex: 1; min-width: 0; }
.rcy-msgr__thread-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.rcy-msgr__thread-name {
  font-weight: 800;
  font-size: var(--rcy-fs-sm);
  color: var(--rcy-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rcy-msgr__thread-time { font-size: var(--rcy-fs-xs); color: var(--rcy-text-faint); flex-shrink: 0; }
.rcy-msgr__thread-prev {
  display: block;
  margin-top: 4px;
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xs);
  font-weight: 650;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rcy-msgr__thread-meta {
  display: block;
  margin-top: 3px;
  color: var(--rcy-text-faint);
  font-size: 11px;
  font-weight: 700;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rcy-msgr__badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  border-radius: 10px;
  background: var(--rcy-brand);
  color: #fff;
  font-size: 11px;
  font-weight: 900;
  padding: 0 6px;
  flex-shrink: 0;
}
.rcy-msgr__empty {
  min-height: 220px;
  padding: 40px 24px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  color: var(--rcy-text-muted);
}
.rcy-msgr__empty-mark,
.rcy-msgr__placeholder-ic {
  width: 54px;
  height: 54px;
  border: 2px solid var(--rcy-border-2);
  border-radius: 50%;
  position: relative;
  margin-bottom: 14px;
}
.rcy-msgr__empty-mark::before,
.rcy-msgr__placeholder-ic::before {
  content: '';
  position: absolute;
  left: 14px;
  top: 15px;
  width: 22px;
  height: 16px;
  border: 2px solid var(--rcy-text-faint);
  border-radius: 12px;
}
.rcy-msgr__empty strong,
.rcy-msgr__placeholder strong,
.rcy-msgr__empty-chat strong {
  color: var(--rcy-text);
  font-size: var(--rcy-fs-base);
  font-weight: 900;
}
.rcy-msgr__empty span,
.rcy-msgr__placeholder span,
.rcy-msgr__empty-chat span {
  margin-top: 6px;
  color: var(--rcy-text-faint);
  font-size: var(--rcy-fs-sm);
  font-weight: 650;
}

.rcy-msgr__conv { display: flex; flex-direction: column; min-width: 0; }
.rcy-msgr__conv-head {
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 74px;
  padding: 12px 18px;
  border-bottom: 1px solid var(--rcy-border);
  background: var(--rcy-surface);
}
.rcy-msgr__back {
  display: none;
  align-items: center;
  justify-content: center;
  border: 0;
  background: transparent;
  color: var(--rcy-text);
  width: 36px;
  height: 36px;
  border-radius: 50%;
  font-size: 20px;
  cursor: pointer;
  flex: 0 0 auto;
}
.rcy-msgr__back:hover { background: var(--rcy-surface-2); }
.rcy-msgr__conv-person { display: flex; align-items: center; gap: 12px; min-width: 0; }
.rcy-msgr__conv-av {
  width: 42px;
  height: 42px;
  border-radius: 50%;
  flex: 0 0 auto;
  overflow: hidden;
  background: var(--rcy-surface-2);
}
.rcy-msgr__conv-av:empty { display: none; }
.rcy-msgr__conv-av img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.rcy-msgr__conv-av span {
  width: 100%;
  height: 100%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--rcy-border-2);
  border-radius: 50%;
  color: var(--rcy-text-2);
  font-weight: 900;
}
.rcy-msgr__conv-text { min-width: 0; }
.rcy-msgr__conv-title {
  color: var(--rcy-text);
  font-weight: 900;
  font-size: var(--rcy-fs-base);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rcy-msgr__conv-sub {
  margin-top: 2px;
  color: var(--rcy-text-faint);
  font-size: var(--rcy-fs-xs);
  font-weight: 700;
}
.rcy-msgr__history {
  flex: 1;
  overflow-y: auto;
  padding: 22px 20px;
  background: var(--rcy-surface);
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.rcy-msgr__placeholder,
.rcy-msgr__empty-chat {
  margin: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  color: var(--rcy-text-faint);
}
.rcy-msgr__loading { padding: 12px 4px; }

.rcy-msgr__msg {
  display: flex;
  align-items: flex-end;
  gap: 8px;
  max-width: min(72%, 560px);
  margin-top: 8px;
}
.rcy-msgr__msg.is-compact { margin-top: 2px; }
.rcy-msgr__msg.is-mine { align-self: flex-end; flex-direction: row-reverse; }
.rcy-msgr__msg.is-other { align-self: flex-start; }
.rcy-msgr__msg-av,
.rcy-msgr__msg-av-spacer {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  flex: 0 0 auto;
}
.rcy-msgr__msg-av { object-fit: cover; background: var(--rcy-surface-2); }
.rcy-msgr__msg-av--fallback {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--rcy-border-2);
  color: var(--rcy-text-2);
  font-size: var(--rcy-fs-xs);
  font-weight: 900;
}
.rcy-msgr__msg-col { min-width: 0; display: flex; flex-direction: column; }
.rcy-msgr__msg-sender {
  margin: 0 0 4px 2px;
  color: var(--rcy-text-muted);
  font-size: var(--rcy-fs-xs);
  font-weight: 800;
}
.rcy-msgr__msg-sender-meta {
  margin: -2px 0 4px 2px;
  color: var(--rcy-text-faint);
  font-size: 10px;
  font-weight: 700;
}
.rcy-msgr__bubble {
  padding: 8px 12px;
  border-radius: 18px;
  font-size: var(--rcy-fs-sm);
  font-weight: 650;
  line-height: 1.45;
  word-break: break-word;
}
.is-mine .rcy-msgr__bubble {
  background: var(--rcy-brand);
  color: #fff;
}
.is-other .rcy-msgr__bubble {
  background: var(--rcy-surface-2);
  color: var(--rcy-text);
}
.rcy-msgr__msg-meta {
  margin-top: 3px;
  color: var(--rcy-text-faint);
  font-size: 10px;
  font-weight: 700;
}
.is-mine .rcy-msgr__msg-meta { text-align: right; }
.rcy-msgr__receipt { color: var(--rcy-brand); font-weight: 700; }

.rcy-msgr__compose {
  padding: 14px 18px 18px;
  border-top: 1px solid var(--rcy-border);
  background: var(--rcy-surface);
}
.rcy-msgr__composer-pill {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 44px;
  border: 1px solid var(--rcy-border-2);
  border-radius: var(--rcy-r-pill);
  padding: 5px 6px 5px 16px;
  background: var(--rcy-surface);
}
.rcy-msgr__composer-pill:focus-within {
  border-color: var(--rcy-brand-border);
  box-shadow: 0 0 0 4px rgba(227,32,46,.08);
}
.rcy-msgr__composer-pill input {
  flex: 1;
  min-width: 0;
  border: 0;
  outline: 0;
  background: transparent;
  color: var(--rcy-text);
  font: inherit;
  font-size: var(--rcy-fs-sm);
  font-weight: 700;
}
.rcy-msgr__composer-pill input:disabled { color: var(--rcy-text-faint); cursor: not-allowed; }
.rcy-msgr__send {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border: 0;
  border-radius: 50%;
  background: var(--rcy-brand);
  color: #fff;
  cursor: pointer;
  font-size: 18px;
  font-weight: 900;
  line-height: 1;
  transition: opacity var(--rcy-dur), transform var(--rcy-dur);
}
.rcy-msgr__send:not(:disabled):hover { transform: translateY(-1px); }
.rcy-msgr__send:disabled { opacity: .35; cursor: not-allowed; }

.rcy-msgr__typing {
  min-height: 28px;
  padding: 0 20px 8px;
  color: var(--rcy-text-faint);
  background: var(--rcy-surface);
  font-size: var(--rcy-fs-xs);
  font-weight: 750;
}
.rcy-msgr__typing[hidden] { display: none; }
.rcy-msgr__typing-text { vertical-align: middle; }
.rcy-msgr__typing-dots {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  margin-left: 7px;
  vertical-align: middle;
}
.rcy-msgr__typing-dots i {
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: currentColor;
  opacity: .45;
  animation: rcy-msgr-typing 1.1s infinite ease-in-out;
}
.rcy-msgr__typing-dots i:nth-child(2) { animation-delay: .15s; }
.rcy-msgr__typing-dots i:nth-child(3) { animation-delay: .3s; }
@keyframes rcy-msgr-typing {
  0%, 80%, 100% { transform: translateY(0); opacity: .35; }
  40% { transform: translateY(-3px); opacity: .9; }
}

.rcy-msgr__pick-panel { display: flex; flex-direction: column; gap: 14px; }
.rcy-msgr__pick-list {
  max-height: 320px;
  overflow: auto;
  border: 1px solid var(--rcy-border);
  border-radius: var(--rcy-r-lg);
  background: var(--rcy-surface);
}
.rcy-msgr__pick {
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 58px;
  padding: 9px 12px;
  cursor: pointer;
}
.rcy-msgr__pick + .rcy-msgr__pick { border-top: 1px solid var(--rcy-border); }
.rcy-msgr__pick:hover { background: var(--rcy-surface-2); }
.rcy-msgr__pick input { accent-color: var(--rcy-brand); }
.rcy-msgr__pick-av {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--rcy-surface-2);
  flex: 0 0 auto;
}
.rcy-msgr__pick-av--fallback {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--rcy-border-2);
  color: var(--rcy-text-2);
  font-weight: 900;
}
.rcy-msgr__pick-name {
  display: block;
  color: var(--rcy-text);
  font-size: var(--rcy-fs-sm);
  font-weight: 850;
}
.rcy-msgr__pick-text { min-width: 0; }
.rcy-msgr__pick-meta {
  display: block;
  margin-top: 3px;
  color: var(--rcy-text-faint);
  font-size: var(--rcy-fs-xs);
  font-weight: 700;
}

/* 모바일: 한 화면에 한 패널만 (스레드 ↔ 대화 토글) */
@media (max-width: 768px) {
  .rcy-msgr {
    grid-template-columns: 1fr;
    max-width: none;
    min-height: 0;
    height: calc(100vh - var(--rcy-shell-topbar-h) - var(--rcy-wp-adminbar-h) - var(--rcy-app-mobile-nav-h, 0px) - 10px);
    border-left: 0;
    border-right: 0;
    border-radius: 0;
    box-shadow: none;
  }
  .rcy-msgr__conv { display: none; }
  .rcy-msgr__list { border-right: 0; }
  .rcy-msgr--conv-open .rcy-msgr__list { display: none; }
  .rcy-msgr--conv-open .rcy-msgr__conv { display: flex; }
  .rcy-msgr__back { display: inline-flex; }
  .rcy-msgr__msg { max-width: 86%; }
  .rcy-msgr__history { padding: 18px 12px; }
  .rcy-msgr__typing { padding: 0 12px 8px; }
  .rcy-msgr__compose { padding: 10px 12px 12px; }
  .rcy-msgr__thread { min-height: 74px; }
}

/* Final dashboard/admin override — keep after later module sections. */
.rcy-dashboard-home .rcy-lms-hello,
.rcy-lms-hello--dashboard,
.rcy-dashboard-home .rcy-lms-card,
.rcy-admin-console,
.rcy-admin-console .rcy-lms-card,
.rcy-admin-console .rcy-card,
.rcy-admin-console .rcy-admin-hero,
.rcy-admin-console .rcy-admin-settings-head {
  border-radius: var(--rcy-r-sm);
}
.rcy-lms-hello--dashboard {
  background: var(--rcy-surface);
}
.rcy-lms-hello--dashboard::before {
  display: none;
}
.rcy-admin-console {
  grid-template-columns: 272px minmax(0, 1fr);
  height: calc(100vh - var(--rcy-shell-topbar-h, 64px) - var(--rcy-wp-adminbar-h, 0px) - 32px);
  min-height: 640px;
  overflow: hidden;
  border-color: var(--rcy-border-2);
  box-shadow: var(--rcy-shadow-sm);
}
.rcy-admin-console__side {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
  overflow: hidden;
}
.rcy-admin-console__brand,
.rcy-admin-console__profile {
  flex: 0 0 auto;
}
.rcy-admin-console__nav,
.rcy-admin-console__nav.rcy-tabs {
  display: flex;
  flex-direction: column;
  flex-wrap: nowrap;
  flex: 1 1 auto;
  gap: 3px;
  min-height: 0;
  overflow-y: auto;
  margin: 0;
  padding: var(--rcy-s4);
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
.rcy-admin-console__main {
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: hidden;
}
.rcy-admin-console__top {
  flex: 0 0 auto;
}
.rcy-admin-console__content {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
}
.rcy-admin-console__item,
.rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: var(--rcy-s2);
  flex: 0 0 auto;
  width: 100%;
  min-height: 42px;
  margin: 0;
  padding: 0 var(--rcy-s2);
  border: 0;
  border-radius: var(--rcy-r-sm);
  background: transparent;
  box-shadow: none;
  color: #c2cce0;
  cursor: pointer;
  text-align: left;
  white-space: nowrap;
}
.rcy-admin-console__item > *,
.rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item > * {
  pointer-events: none;
}
.rcy-admin-console__item.is-active,
.rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item.is-active {
  background: rgba(227,32,46,.16);
  color: #fff;
  box-shadow: inset 3px 0 0 var(--rcy-brand);
}
.rcy-admin-console__top {
  position: sticky;
  top: 0;
  z-index: 5;
  min-height: 68px;
  padding: var(--rcy-s3) var(--rcy-s5);
  background: rgba(255,255,255,.92);
  -webkit-backdrop-filter: saturate(180%) blur(10px);
  backdrop-filter: saturate(180%) blur(10px);
}
.rcy-admin-console__main {
  background: #f4f6fb;
}
@media (prefers-color-scheme: dark) {
  body:not([data-rcy-theme="light"]) .rcy-admin-console__main {
    background: var(--rcy-bg);
  }
  body:not([data-rcy-theme="light"]) .rcy-admin-console__top {
    background: rgba(10,12,23,.82);
  }
}
body[data-rcy-theme="dark"] .rcy-admin-console__main {
  background: var(--rcy-bg);
}
body[data-rcy-theme="dark"] .rcy-admin-console__top {
  background: rgba(10,12,23,.82);
}
@media (max-width: 980px) {
  .rcy-admin-console {
    grid-template-columns: 1fr;
    height: auto;
    min-height: 0;
    overflow: visible;
  }
  .rcy-admin-console__side {
    height: auto;
    overflow: visible;
  }
  .rcy-admin-console__main {
    overflow: visible;
  }
  .rcy-admin-console__nav,
  .rcy-admin-console__nav.rcy-tabs {
    flex-direction: row;
    flex-wrap: nowrap;
    flex: 0 0 auto;
    overflow-x: auto;
    overflow-y: hidden;
    padding: var(--rcy-s3);
  }
  .rcy-admin-console__item,
  .rcy-admin-console .rcy-tabs__pill.rcy-admin-console__item {
    width: auto;
    min-width: max-content;
  }
  .rcy-admin-console__content {
    overflow: visible;
  }
}


/* ============================================================
   Global WordPress Theme Constraint Overrides
   Forces RCY app to span full width and ignore narrow block constraints
   ============================================================ */
body.rcy-has-shortcode .wp-site-blocks,
body.rcy-has-shortcode .wp-block-post-content,
body.rcy-has-shortcode .entry-content,
body.rcy-has-shortcode .site-content,
body.rcy-has-shortcode .content-area,
body.rcy-has-shortcode #content,
body.rcy-has-shortcode #primary,
body.rcy-has-shortcode .site-main,
body.rcy-has-shortcode .ast-container,
body.rcy-has-shortcode .generate-columns-container,
body.rcy-has-shortcode .fl-builder-content,
body.rcy-has-shortcode .elementor-section,
body.rcy-has-shortcode main#main,
body.rcy-has-shortcode .is-layout-constrained,
body.rcy-has-shortcode .has-global-padding,
body.rcy-has-shortcode .wp-block-group,
body:has(.rcy) .wp-site-blocks,
body:has(.rcy) .wp-block-post-content,
body:has(.rcy) .entry-content,
body:has(.rcy) .site-content,
body:has(.rcy) #content,
body:has(.rcy) .site-main,
body:has(.rcy) .ast-container,
body:has(.rcy) .generate-columns-container,
body:has(.rcy) .fl-builder-content,
body:has(.rcy) .elementor-section,
body:has(.rcy) main#main,
body:has(.rcy-admin-console) .wp-site-blocks,
body:has(.rcy-admin-console) .entry-content,
body:has(.rcy-admin-console) main {
    max-width: 100% !important;
    padding: 0 !important;
    margin: 0 !important;
    width: 100% !important;
}

/* Ensure the RCY container itself manages the width centrally */
.rcy-container {
    max-width: min(1480px, calc(100vw - 48px)) !important;
    margin: 0 auto !important;
    padding: 0 var(--rcy-s6) !important;
    width: 100% !important;
}

.rcy-form-page {
    max-width: min(960px, calc(100vw - 48px)) !important;
}

body.rcy-app .rcy-container,
body.rcy-admin-app .rcy-container {
    max-width: min(1480px, 100%) !important;
}

body.rcy-has-shortcode .rcy-public__container,
body.rcy-has-shortcode .rcy-clubhome__main,
body.rcy-has-shortcode .rcy-clubhome__footer-inner {
    max-width: min(1360px, calc(100vw - 48px)) !important;
}

@media (min-width: 981px) {
    body.rcy-admin-app {
        background: var(--rcy-bg);
    }
    body.rcy-admin-app .rcy-admin-console {
        width: calc(100% - 32px) !important;
        height: calc(100vh - 32px) !important;
        min-height: 640px;
        margin: 16px auto !important;
        border: 1px solid var(--rcy-border-2);
        border-radius: var(--rcy-r-xl);
    }
    /* 콘텐츠 영역: 세로는 적당히, 좌우는 화면 폭에 따라 넉넉히(28→72px) — 읽기 편한 거터 */
    body.rcy-admin-app .rcy-admin-console__content {
        padding: clamp(20px, 2vw, 32px) clamp(28px, 4vw, 72px);
    }
    /* 상단 바도 같은 좌우 거터로 정렬 */
    body.rcy-admin-app .rcy-admin-console__top {
        padding-left: clamp(28px, 4vw, 72px);
        padding-right: clamp(28px, 4vw, 72px);
    }
}

.rcy-admin-settings-layout {
    display: grid;
    grid-template-columns: minmax(180px, 220px) minmax(0, 1fr);
    gap: var(--rcy-s5);
    align-items: start;
}
.rcy-admin-settings-nav {
    position: sticky;
    top: var(--rcy-s5);
    display: grid;
    gap: 4px;
    padding: var(--rcy-s3);
    border: 1px solid var(--rcy-border);
    border-radius: var(--rcy-r-sm);
    background: var(--rcy-surface);
    box-shadow: var(--rcy-shadow-sm);
}
.rcy-admin-settings-nav__label {
    display: block;
    padding: 0 var(--rcy-s2) var(--rcy-s2);
    color: var(--rcy-text-faint);
    font-size: var(--rcy-fs-xxs);
    font-weight: 900;
}
.rcy-admin-settings-nav button {
    position: relative;
    display: flex;
    align-items: center;
    min-height: 36px;
    padding: 0 var(--rcy-s3);
    border: 0;
    border-radius: var(--rcy-r-sm);
    background: transparent;
    color: var(--rcy-text-muted);
    font-size: var(--rcy-fs-sm);
    font-weight: 800;
    text-align: left;
    cursor: pointer;
    transition: background .12s, color .12s, box-shadow .12s;
}
.rcy-admin-settings-nav button:hover {
    background: var(--rcy-surface-2);
    color: var(--rcy-text);
}
.rcy-admin-settings-nav button.is-active {
    background: var(--rcy-brand-soft);
    color: var(--rcy-brand);
    box-shadow: inset 3px 0 0 var(--rcy-brand);
}
/* 설정 섹션 — 단일 컬럼으로 폼 가독성 향상(스티키 내비 + 스크롤 스파이와 함께) */
.rcy-admin-settings-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--rcy-s5);
    align-items: start;
}
.rcy-admin-settings-section {
    scroll-margin-top: 88px;
}
.rcy-admin-settings-section > .rcy-h3:first-child {
    display: flex;
    align-items: center;
    gap: var(--rcy-s2);
    padding-bottom: var(--rcy-s3);
    border-bottom: 1px solid var(--rcy-border);
    margin-bottom: var(--rcy-s4);
}
.rcy-admin-settings-section__desc {
    margin: calc(var(--rcy-s1) * -1) 0 var(--rcy-s4);
}

.rcy-auth-card {
    width: min(100%, 520px);
    margin: 0 auto;
    padding: var(--rcy-s7);
}
.rcy-auth-card--center {
    text-align: center;
}
.rcy-auth-tabs {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 4px;
    margin: var(--rcy-s5) 0;
    padding: 4px;
    border: 1px solid var(--rcy-border);
    border-radius: var(--rcy-r-sm);
    background: var(--rcy-surface-2);
}
.rcy-auth-tabs button {
    min-width: 0;
    min-height: 40px;
    padding: 0 var(--rcy-s2);
    border: 0;
    border-radius: var(--rcy-r-sm);
    background: transparent;
    color: var(--rcy-text-muted);
    font-size: var(--rcy-fs-sm);
    font-weight: 900;
    cursor: pointer;
    white-space: nowrap;
}
.rcy-auth-tabs button.is-active {
    background: var(--rcy-surface);
    color: var(--rcy-brand);
    box-shadow: var(--rcy-shadow-sm);
}
.rcy-devlogin__pane.is-hidden {
    display: none;
}
.rcy-application-page,
.rcy-form-page.rcy-application-page {
    max-width: min(1120px, calc(100vw - 64px)) !important;
}
.rcy-application-form {
    padding: var(--rcy-s7);
}
@media (min-width: 981px) {
    .rcy-membership-card {
        max-width: min(1040px, calc(100vw - 96px));
    }
}

@media (max-width: 768px) {
    .rcy-container {
        max-width: 100% !important;
        padding: 0 var(--rcy-s4) !important;
    }
    .rcy-form-page,
    body.rcy-has-shortcode .rcy-public__container,
    body.rcy-has-shortcode .rcy-clubhome__main,
    body.rcy-has-shortcode .rcy-clubhome__footer-inner {
        max-width: 100% !important;
    }
    .rcy-admin-settings-layout {
        grid-template-columns: 1fr;
    }
    .rcy-admin-settings-nav {
        position: static;
    }
    .rcy-auth-card,
    .rcy-application-form {
        padding: var(--rcy-s5);
    }
    .rcy-auth-tabs button {
        font-size: var(--rcy-fs-xs);
    }
}

/* ===== 기기 로그인 (QR · 6자리 코드) ===== */
.rcy-notice--warning { border-left-color: var(--rcy-warning); background: rgba(180,95,6,.07); border-color: rgba(180,95,6,.25); }
.rcy-devlogin__qr {
    display: block; margin: 6px auto 4px; border-radius: var(--rcy-radius);
    background: #fff; padding: 10px; box-shadow: 0 4px 16px rgba(0,0,0,.08);
    max-width: 240px; width: 100%; height: auto;
}
.rcy-devlogin__or {
    margin: 14px 0 6px; font-size: 12px; font-weight: 700; letter-spacing: .04em;
    color: var(--rcy-text-muted); text-transform: uppercase; position: relative;
}
.rcy-devlogin__code {
    font-size: 34px; font-weight: 800; letter-spacing: 6px;
    color: var(--rcy-text); font-variant-numeric: tabular-nums;
    background: var(--rcy-surface-2, rgba(0,0,0,.03)); border-radius: var(--rcy-radius);
    padding: 12px 8px; user-select: all;
}
.rcy-devlogin__code span { color: var(--rcy-text-muted); margin: 0 6px; font-weight: 600; }
.rcy-devlogin__status {
    margin-top: 14px; font-size: 14px; font-weight: 600; color: var(--rcy-text-muted);
    display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap;
}
.rcy-devapprove__device {
    display: flex; align-items: center; gap: 12px; margin-top: 14px; padding: 14px;
    border: 1px solid var(--rcy-border); border-radius: var(--rcy-radius);
    background: var(--rcy-surface-2, rgba(0,0,0,.02));
}
.rcy-devapprove__ic { font-size: 28px; line-height: 1; }
.rcy-devapprove__codein {
    text-align: center; letter-spacing: 10px; font-size: 26px; font-weight: 800;
    font-variant-numeric: tabular-nums; padding: 14px;
}
.rcy-btn--block { width: 100%; flex: 1; justify-content: center; }

/* ===== 범용 스피너 (출석 처리 등) ===== */
.rcy-spinner {
    width: 44px; height: 44px; border-radius: 50%;
    border: 4px solid var(--rcy-border, rgba(0,0,0,.12));
    border-top-color: var(--rcy-primary, #e3202e);
    animation: rcy-spin .8s linear infinite;
}
@keyframes rcy-spin { to { transform: rotate(360deg); } }

/* 기기 로그인 — 코드 회전 안내 */
.rcy-devlogin__rotate {
    margin-top: 8px; font-size: 12px; font-weight: 600;
    color: var(--rcy-text-muted); opacity: .85;
}

/* ===== 회칙·약관 자료실 — 공지/적용 일자 + 과거 버전 ===== */
.rcy-policy-doc__dates {
    display: flex; flex-wrap: wrap; gap: 10px 24px; margin-top: 18px; padding-top: 14px;
    border-top: 1px dashed var(--rcy-border); font-size: 13px; color: var(--rcy-text-muted);
}
.rcy-policy-doc__date b { color: var(--rcy-text); font-weight: 700; margin-right: 6px; }
.rcy-policy-doc--old { margin-top: 14px; background: var(--rcy-surface-2, rgba(0,0,0,.02)); }
.rcy-policy-doc--old .rcy-card__title { font-size: 1rem; }
#rcy-policy-old-list[hidden] { display: none; }

/* hidden 속성 강제 — .rcy-btn 등 display 지정 요소가 [hidden] 을 무시하는 문제 방지
   (회원가입 단계 버튼: 다음 단계로 / 가입 완료하기 토글) */
[hidden] { display: none !important; }

/* ===== 커뮤니티 (에브리타임/DC 스타일) ===== */
.rcy-community__scopes { display: flex; gap: 8px; margin: var(--rcy-s4) 0; flex-wrap: wrap; }
.rcy-community__layout { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: var(--rcy-s4); align-items: start; }
.rcy-community__boards { position: sticky; top: 12px; background: var(--rcy-surface, #fff); border: 1px solid var(--rcy-border, #e2e7f0); border-radius: 14px; padding: 8px; }
.rcy-community__boards-title { font-size: 12px; font-weight: 800; color: var(--rcy-text-faint, #6b7689); padding: 8px 10px 4px; letter-spacing: .04em; }
.rcy-community__board { display: block; width: 100%; text-align: left; padding: 9px 12px; border: 0; background: transparent; border-radius: 9px; cursor: pointer; font-weight: 700; font-size: 14px; color: var(--rcy-text-2); }
.rcy-community__board:hover { background: var(--rcy-surface-2, #f4f6fb); }
.rcy-community__board.is-active { background: var(--rcy-brand, #c81b28); color: #fff; }
.rcy-community__toolbar { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: var(--rcy-s3); flex-wrap: wrap; }
.rcy-community__sorts { display: inline-flex; gap: 2px; background: var(--rcy-surface-2, #f4f6fb); padding: 3px; border-radius: 10px; }
.rcy-community__sort { padding: 6px 14px; border: 0; background: transparent; border-radius: 8px; cursor: pointer; font-weight: 700; font-size: 13px; color: var(--rcy-text-2); }
.rcy-community__sort.is-active { background: var(--rcy-surface, #fff); box-shadow: 0 1px 3px rgba(0,0,0,.08); color: var(--rcy-brand, #c81b28); }
.rcy-community__tools { display: inline-flex; gap: 8px; align-items: center; }
.rcy-input--sm { height: 34px; padding: 0 10px; font-size: 13px; max-width: 160px; }
.rcy-community__list { display: flex; flex-direction: column; gap: 6px; }
.rcy-community__post { display: flex; gap: 12px; width: 100%; text-align: left; padding: 14px; border: 1px solid var(--rcy-border, #e2e7f0); border-radius: 12px; background: var(--rcy-surface, #fff); cursor: pointer; transition: border-color .12s, transform .06s; }
.rcy-community__post:hover { border-color: var(--rcy-brand, #c81b28); }
.rcy-community__post:active { transform: scale(.997); }
.rcy-community__post-vote { flex: 0 0 50px; display: flex; flex-direction: column; align-items: center; justify-content: center; border-radius: 9px; background: var(--rcy-surface-2, #f4f6fb); font-size: 11px; color: var(--rcy-text-faint); font-weight: 700; }
.rcy-community__post-vote b { font-size: 17px; color: var(--rcy-text-1); }
.rcy-community__post-vote.is-pos b { color: var(--rcy-brand); }
.rcy-community__post-vote.is-neg b { color: var(--rcy-accent); }
.rcy-community__post-main { min-width: 0; flex: 1; }
.rcy-community__post-title { font-weight: 800; font-size: 15px; color: var(--rcy-text-1); margin-bottom: 3px; }
.rcy-community__post-cc { color: var(--rcy-brand, #c81b28); font-size: 13px; }
.rcy-community__post-excerpt { font-size: 13px; color: var(--rcy-text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin-bottom: 5px; }
.rcy-community__post-meta { font-size: 12px; color: var(--rcy-text-faint, #6b7689); font-weight: 600; }
.rcy-community__detail { margin-top: var(--rcy-s3); }
.rcy-community__detail-title { font-size: 1.4rem; font-weight: 800; margin: 0 0 6px; }
.rcy-community__detail-meta { font-size: 13px; color: var(--rcy-text-faint); font-weight: 600; margin-bottom: var(--rcy-s4); }
.rcy-community__detail-body { font-size: 15px; line-height: 1.85; margin-bottom: var(--rcy-s4); white-space: pre-wrap; }
.rcy-community__votes { display: flex; gap: 8px; justify-content: center; margin-top: var(--rcy-s3); }
.rcy-community__vote { padding: 8px 18px; border: 1px solid var(--rcy-border, #e2e7f0); border-radius: 999px; background: var(--rcy-surface, #fff); cursor: pointer; font-weight: 700; font-size: 14px; color: var(--rcy-text-2); }
.rcy-community__vote.is-on { background: var(--rcy-brand); color: #fff; border-color: var(--rcy-brand); }
.rcy-community__vote--down.is-on { background: var(--rcy-accent); border-color: var(--rcy-accent); color: #fff; }
.rcy-community__comments { margin-top: var(--rcy-s3); }
.rcy-community__comment { padding: 12px 0; border-bottom: 1px solid var(--rcy-border, #eef1f7); }
.rcy-community__comment--reply { margin-left: 22px; padding-left: 12px; border-left: 2px solid var(--rcy-border, #eef1f7); border-bottom: 0; }
.rcy-community__comment-head { display: flex; gap: 8px; align-items: baseline; font-size: 13px; }
.rcy-community__comment-head b { font-weight: 800; }
.rcy-community__comment-head span { color: var(--rcy-text-faint); font-size: 12px; }
.rcy-community__comment-body { font-size: 14px; line-height: 1.6; margin: 3px 0; white-space: pre-wrap; }
.rcy-community__comment-actions { display: flex; gap: 12px; }
.rcy-community__comment-actions button { border: 0; background: transparent; cursor: pointer; font-size: 12px; font-weight: 700; color: var(--rcy-text-faint); padding: 0; }
.rcy-community__clike.is-on { color: var(--rcy-brand); }
.rcy-community__cform { margin-top: var(--rcy-s4); }
.rcy-community__replies { margin-top: 8px; }
@media (max-width: 820px) {
  .rcy-community__layout { grid-template-columns: 1fr; }
  .rcy-community__boards { position: static; display: flex; flex-wrap: wrap; gap: 4px; }
  .rcy-community__boards-title { width: 100%; }
  .rcy-community__board { width: auto; }
}

/* ===== 회원 통합 관리 — 정렬·필터 툴바 ===== */
.rcy-mem-toolbar { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.rcy-mem-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.rcy-mem-chip { display: inline-flex; align-items: center; gap: 4px; height: 38px; padding: 0 14px; border: 1px solid var(--rcy-border); border-radius: 999px; background: var(--rcy-surface); cursor: pointer; font-size: 13px; font-weight: 700; color: var(--rcy-text-2); transition: border-color .12s, background .12s; }
.rcy-mem-chip:hover { border-color: var(--rcy-brand); }
.rcy-mem-chip.is-active { background: var(--rcy-brand); color: #fff; border-color: var(--rcy-brand); }
.rcy-mem-chip b { font-weight: 800; }
.rcy-mem-controls { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
/* 컨트롤 높이 통일(입력/선택/버튼) — 정렬 어긋남 방지 */
.rcy-mem-controls .rcy-tw-input,
.rcy-mem-controls .rcy-tw-select,
.rcy-mem-controls .rcy-tw-button { height: 38px; }
.rcy-mem-controls .rcy-tw-input { max-width: 200px; }
@media (max-width: 640px) {
  .rcy-mem-toolbar { align-items: stretch; }
  .rcy-mem-controls { width: 100%; }
  .rcy-mem-controls .rcy-tw-input { max-width: none; flex: 1 1 140px; }
}

/* ===== 인라인 SVG 아이콘 (이모지 대체) ===== */
.rcy-ico {
  display: inline-block;
  width: 1.05em;
  height: 1.05em;
  vertical-align: -0.18em;
  flex: 0 0 auto;
  stroke-width: 2;
}
.rcy-ico--sm { width: .9em; height: .9em; }
.rcy-ico--lg { width: 1.3em; height: 1.3em; }
.rcy-ico--xl { width: 1.6em; height: 1.6em; }
/* 버튼 안의 아이콘 간격 */
.rcy-tw-button .rcy-ico, .rcy-btn .rcy-ico { margin-right: .15em; }

/* 리더보드 — 내 순위 강조 */
.rcy-card--mine { outline: 2px solid var(--rcy-brand); outline-offset: -2px; }
.rcy-row--mine { background: rgba(227,32,46,.06); }

/* ===== 메신저 — 사진/파일 첨부 · 날짜 구분선 ===== */
.rcy-msgr__attach-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; flex: 0 0 auto;
  border: 0; border-radius: 999px; background: transparent;
  color: var(--rcy-text-muted); cursor: pointer; transition: background .12s, color .12s;
}
.rcy-msgr__attach-btn:hover:not(:disabled) { background: var(--rcy-surface-2); color: var(--rcy-brand); }
.rcy-msgr__attach-btn:disabled { opacity: .4; cursor: not-allowed; }
.rcy-msgr__attach-preview { display: flex; flex-wrap: wrap; gap: 8px; padding: 8px 12px 0; }
.rcy-msgr__chip {
  display: inline-flex; align-items: center; gap: 6px; max-width: 220px;
  padding: 5px 8px 5px 6px; border: 1px solid var(--rcy-border); border-radius: 999px;
  background: var(--rcy-surface); font-size: 12px; font-weight: 600;
}
.rcy-msgr__chip img { width: 26px; height: 26px; border-radius: 6px; object-fit: cover; }
.rcy-msgr__chip-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rcy-msgr__chip-x { border: 0; background: transparent; cursor: pointer; font-size: 15px; line-height: 1; color: var(--rcy-text-faint); padding: 0 2px; }
.rcy-msgr__chip-spin { width: 16px; height: 16px; border: 2px solid var(--rcy-border-2); border-top-color: var(--rcy-brand); border-radius: 999px; animation: rcy-spin .7s linear infinite; }

/* 메시지 내 첨부 렌더 */
.rcy-msgr__atts { display: flex; flex-direction: column; gap: 6px; margin-top: 4px; }
.rcy-msgr__img-wrap { display: inline-block; max-width: 240px; border-radius: 14px; overflow: hidden; line-height: 0; }
.rcy-msgr__img { width: 100%; max-width: 240px; max-height: 320px; object-fit: cover; display: block; }
.rcy-msgr__file {
  display: inline-flex; align-items: center; gap: 8px; max-width: 260px;
  padding: 10px 12px; border: 1px solid var(--rcy-border); border-radius: 14px;
  background: var(--rcy-surface); color: var(--rcy-text); font-size: 13px; font-weight: 600;
  text-decoration: none;
}
.rcy-msgr__file:hover { border-color: var(--rcy-brand); }
.rcy-msgr__file span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rcy-msgr__msg.is-mine .rcy-msgr__atts { align-items: flex-end; }

/* 날짜 구분선 */
.rcy-msgr__date-sep { display: flex; align-items: center; justify-content: center; margin: 16px 0 10px; }
.rcy-msgr__date-sep span {
  padding: 4px 12px; border-radius: 999px;
  background: var(--rcy-surface-2); color: var(--rcy-text-muted);
  font-size: 11.5px; font-weight: 800;
}

/* ============================================================
   Cool High-Tech v4 — motion · glass · glow · grid
   (layered last → wins cascade for overrides; honors reduced-motion)
   ============================================================ */

/* ── Keyframes ─────────────────────────────────────────── */
@keyframes rcy-rise { from { opacity:0; transform:translate3d(0,18px,0) scale(.985); } to { opacity:1; transform:translate3d(0,0,0) scale(1); } }
@keyframes rcy-fade-up { from { opacity:0; transform:translate3d(0,12px,0); } to { opacity:1; transform:translate3d(0,0,0); } }
@keyframes rcy-scale-in { 0% { opacity:0; transform:translate3d(0,-6px,0) scale(.96); } 60% { opacity:1; } 100% { opacity:1; transform:translate3d(0,0,0) scale(1); } }
@keyframes rcy-spring-in { 0% { opacity:0; transform:translate3d(0,28px,0) scale(.94); } 100% { opacity:1; transform:translate3d(0,0,0) scale(1); } }
@keyframes rcy-view-enter { from { opacity:0; transform:translate3d(0,14px,0); filter:blur(2px); } to { opacity:1; transform:translate3d(0,0,0); filter:blur(0); } }
@keyframes rcy-glow-pulse { 0%,100% { box-shadow:0 0 0 0 rgba(227,32,46,.45); } 50% { box-shadow:0 0 0 6px rgba(227,32,46,0); } }
@keyframes rcy-scanline { 0% { transform:translate3d(0,-120%,0); opacity:0; } 12% { opacity:.55; } 88% { opacity:.55; } 100% { transform:translate3d(0,820%,0); opacity:0; } }
@keyframes rcy-gradient-drift { 0% { background-position:0% 50%; } 50% { background-position:100% 50%; } 100% { background-position:0% 50%; } }
@keyframes rcy-shine { from { transform:translate3d(-130%,0,0) skewX(-18deg); } to { transform:translate3d(130%,0,0) skewX(-18deg); } }
@keyframes rcy-skel-sweep { from { transform:translate3d(-100%,0,0); } to { transform:translate3d(100%,0,0); } }
@keyframes rcy-indicator-pop { 0% { transform:scaleY(1); } 45% { transform:scaleY(.82); } 100% { transform:scaleY(1); } }
@keyframes rcy-count-flip { 0% { transform:scale(1); } 40% { transform:scale(1.08); } 100% { transform:scale(1); } }

/* ── Entrance / reveal / view utilities ────────────────── */
.rcy-anim-rise { animation: rcy-rise var(--rcy-dur-entrance) var(--rcy-ease-out-expo) both; }
.rcy-view { animation: rcy-view-enter var(--rcy-dur-view) var(--rcy-ease-out-expo) both; }
/* 셸 콘텐츠 진입 — opacity + translateY 만(scale 금지: 구조 컨테이너 인셋/여백 방지) */
.rcy-content-enter { animation: rcy-fade-up var(--rcy-dur-view) var(--rcy-ease-out-expo) both; will-change: transform, opacity; }
.rcy-reveal { opacity:0; transform:translate3d(0,18px,0); will-change:transform,opacity; }
.rcy-reveal.is-in { animation: rcy-rise var(--rcy-dur-entrance) var(--rcy-ease-out-expo) forwards; }
.rcy-stagger > * { animation: rcy-fade-up var(--rcy-dur-entrance) var(--rcy-ease-out-expo) both; }
.rcy-stagger > *:nth-child(1){animation-delay:calc(var(--rcy-stagger)*0)}
.rcy-stagger > *:nth-child(2){animation-delay:calc(var(--rcy-stagger)*1)}
.rcy-stagger > *:nth-child(3){animation-delay:calc(var(--rcy-stagger)*2)}
.rcy-stagger > *:nth-child(4){animation-delay:calc(var(--rcy-stagger)*3)}
.rcy-stagger > *:nth-child(5){animation-delay:calc(var(--rcy-stagger)*4)}
.rcy-stagger > *:nth-child(6){animation-delay:calc(var(--rcy-stagger)*5)}
.rcy-stagger > *:nth-child(7){animation-delay:calc(var(--rcy-stagger)*6)}
.rcy-stagger > *:nth-child(8){animation-delay:calc(var(--rcy-stagger)*7)}
.rcy-stagger > *:nth-child(9){animation-delay:calc(var(--rcy-stagger)*8)}
.rcy-stagger > *:nth-child(n+10){animation-delay:calc(var(--rcy-stagger)*9)}

/* ── Hover lift + glow ─────────────────────────────────── */
.rcy-lift { transition: transform var(--rcy-dur) var(--rcy-ease-out-expo), box-shadow var(--rcy-dur) var(--rcy-ease), border-color var(--rcy-dur) var(--rcy-ease); }
.rcy-lift:hover { transform: translate3d(0, var(--rcy-lift-lg), 0); box-shadow: var(--rcy-glow-accent); border-color: var(--rcy-accent-border); }
.rcy-lift:active { transform: translate3d(0,-1px,0); }
.rcy-lift--brand:hover { box-shadow: var(--rcy-glow-brand); border-color: var(--rcy-brand-border); }

/* ── Glass surfaces (futuristic translucent panels) ────── */
.rcy-card, .rcy-tw-card, .rcy-lms-card {
  background: var(--rcy-glass);
  -webkit-backdrop-filter: var(--rcy-blur);
  backdrop-filter: var(--rcy-blur);
  border-color: var(--rcy-glass-border);
}
.rcy-glass {
  background: var(--rcy-glass);
  -webkit-backdrop-filter: var(--rcy-blur);
  backdrop-filter: var(--rcy-blur);
  border: 1px solid var(--rcy-glass-border);
}

/* ── Hairline mission-control grid backdrop ────────────── */
.rcy-grid-bg, .rcy-app-shell__main {
  background-image:
    linear-gradient(var(--rcy-grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--rcy-grid-line) 1px, transparent 1px);
  background-size: 48px 48px;
  background-position: -1px -1px;
}

/* ── Hero — living cool console gradient ───────────────── */
.rcy-hero {
  background: linear-gradient(135deg, var(--rcy-sidebar-bg) 0%, var(--rcy-sidebar-bg-2) 55%, #142244 100%);
  background-size: 200% 200%;
  animation: rcy-gradient-drift var(--rcy-dur-ambient) var(--rcy-ease-in-out) infinite;
}

/* ── Focus ring → electric cobalt (red reserved for destructive) ── */
.rcy *:focus-visible,
.rcy-landing *:focus-visible,
.rcy-app-shell *:focus-visible {
  outline: 2px solid var(--rcy-accent);
  outline-offset: 2px;
  box-shadow: var(--rcy-glow-accent);
  border-radius: var(--rcy-r-sm);
}
.rcy .rcy-btn--danger:focus-visible,
.rcy .rcy-tw-button-destructive:focus-visible,
.rcy .rcy-btn--primary:focus-visible,
.rcy .rcy-tw-button-primary:focus-visible {
  outline-color: var(--rcy-brand);
  box-shadow: var(--rcy-glow-brand);
}

/* ── Electric accent button (everyday primary) ─────────── */
.rcy-btn--accent, .rcy-tw-button-accent {
  background: var(--rcy-accent); color:#fff; border-color: var(--rcy-accent);
}
.rcy-btn--accent:hover, .rcy-tw-button-accent:hover { background: var(--rcy-accent-hover); border-color: var(--rcy-accent-hover); color:#fff; }

/* ── Tabs / nav active → cobalt (data signal, not alarm) ── */
.rcy-tw-tab.is-active { border-bottom-color: var(--rcy-accent); }
.rcy-tabs__pill.is-active { color: var(--rcy-accent); }
.rcy-tabs__pill.is-active::after { background: var(--rcy-accent) !important; }
.rcy-sidebar__item.is-active {
  background: rgba(31,76,255,.16); color:#fff;
  box-shadow: inset 3px 0 0 var(--rcy-accent), 0 6px 16px rgba(31,76,255,.20);
}

/* ── Primary-button sheen on hover ─────────────────────── */
.rcy-btn--primary, .rcy-tw-button-primary, .rcy-btn--accent { position: relative; overflow: hidden; }
.rcy-btn--primary::after, .rcy-tw-button-primary::after, .rcy-btn--accent::after {
  content:''; position:absolute; top:0; bottom:0; left:0; width:45%; pointer-events:none;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,.38), transparent);
  transform: translate3d(-130%,0,0) skewX(-18deg);
}
.rcy-btn--primary:hover::after, .rcy-tw-button-primary:hover::after, .rcy-btn--accent:hover::after { animation: rcy-shine .9s var(--rcy-ease-out-expo); }

/* ── Expressive popovers / toasts / chips ──────────────── */
.rcy-toast { animation: rcy-spring-in var(--rcy-dur-slow) var(--rcy-ease-spring); }
.rcy-usermenu__panel { animation: rcy-scale-in var(--rcy-dur) var(--rcy-ease-spring); transform-origin: top right; }
.rcy-chip { transition: color var(--rcy-dur), background var(--rcy-dur), transform var(--rcy-dur-fast) var(--rcy-ease-spring); }
.rcy-chip:active { transform: scale(.95); }

/* ── Live mission-control status dot ───────────────────── */
.rcy-badge--live::before, .rcy-status-dot--live { animation: rcy-glow-pulse 2s var(--rcy-ease-in-out) infinite; }

/* ── Transform-based skeleton shimmer ──────────────────── */
.rcy-skeleton--sweep { position: relative; overflow: hidden; background: var(--rcy-surface-2); }
.rcy-skeleton--sweep::after {
  content:''; position:absolute; inset:0; transform: translate3d(-100%,0,0);
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--rcy-surface) 70%, transparent), transparent);
  animation: rcy-skel-sweep 1.3s var(--rcy-ease-in-out) infinite;
}

/* ── Sliding tab indicator (JS positions via --x/--w) ──── */
.rcy-tabs__ind {
  position:absolute; top:var(--rcy-s2); bottom:var(--rcy-s2); left:0; width:var(--w,0);
  transform: translate3d(var(--x,0),0,0); background: var(--rcy-accent-soft);
  border:1px solid var(--rcy-accent-border); border-radius: var(--rcy-r-pill);
  transition: transform var(--rcy-dur-slow) var(--rcy-ease-spring), width var(--rcy-dur-slow) var(--rcy-ease-spring);
  z-index:0; pointer-events:none;
}
.rcy-tabs__ind.is-landing { animation: rcy-indicator-pop var(--rcy-dur-slow) var(--rcy-ease-spring); }

/* ── KPI count-up ──────────────────────────────────────── */
[data-rcy-count] { font-variant-numeric: tabular-nums; font-feature-settings:'tnum' 1; }
[data-rcy-count].is-counted { animation: rcy-count-flip var(--rcy-dur) var(--rcy-ease-spring); }

/* ── Reduced-motion — extend the existing blanket guard ── */
@media (prefers-reduced-motion: reduce) {
  .rcy .rcy-reveal, .rcy .rcy-stagger > *, .rcy .rcy-anim-rise, .rcy .rcy-view, .rcy .rcy-content-enter {
    opacity:1 !important; transform:none !important; filter:none !important; animation:none !important;
  }
  .rcy .rcy-hero, .rcy .rcy-skeleton--sweep::after, .rcy .rcy-badge--live::before,
  .rcy .rcy-status-dot--live, .rcy .rcy-emergency-banner, .rcy-btn--primary::after, .rcy-tw-button-primary::after {
    animation: none !important;
  }
  .rcy .rcy-hero { background-position: 0 50% !important; }
  .rcy .rcy-tabs__ind { transition: none !important; }
}

/* ============================================================
   EDITORIAL AURORA — ink + RCY-red signature layer
   (참고 목업: 메인 랜딩 · 모바일 관리자/회원 대시보드 · 학교 RCY 홈)
   토큰 기반이라 라이트/다크 모두에서 동작. 공통 셸 + 핵심 컴포넌트에
   촉각적 표면(상단 sheen + 레이어드 그림자), 레드 글로우 CTA,
   모노 수치, 하단탭 레드 인디케이터, 앰비언트 글로우를 부여한다.
   ============================================================ */

/* ---- Ambient aurora: 페이지 상단 레드 글로우 (다크=뚜렷, 라이트=은은) ---- */
body.rcy-body,
body.page-template-default.rcy-app,
body.rcy-app {
  background-image:
    radial-gradient(900px 360px at 50% -150px, rgba(227,32,46,.05), transparent 60%);
  background-attachment: fixed;
}
@media (prefers-color-scheme: dark) {
  body.rcy-body:not([data-rcy-theme="light"]),
  body.rcy-app:not([data-rcy-theme="light"]) {
    background-image:
      radial-gradient(920px 400px at 50% -160px, rgba(227,32,46,.12), transparent 60%),
      radial-gradient(760px 340px at 100% -40px, rgba(124,107,255,.07), transparent 62%);
  }
}
body[data-rcy-theme="dark"].rcy-body,
body[data-rcy-theme="dark"].rcy-app {
  background-image:
    radial-gradient(920px 400px at 50% -160px, rgba(227,32,46,.12), transparent 60%),
    radial-gradient(760px 340px at 100% -40px, rgba(124,107,255,.07), transparent 62%);
  background-attachment: fixed;
}

/* ---- Tactile surfaces: 상단 sheen + 레이어드 그림자 ---- */
.rcy .rcy-card {
  background-image: var(--rcy-card-top);
  box-shadow: var(--rcy-elev-1);
}
.rcy .rcy-card--hover:hover {
  box-shadow: var(--rcy-elev-2);
  border-color: var(--rcy-brand-border);
}
.rcy .rcy-stat,
.rcy .rcy-quick,
.rcy .rcy-clubhome__joinbox {
  background-image: var(--rcy-card-top);
  box-shadow: var(--rcy-elev-1);
}
.rcy .rcy-lms-kpis .rcy-stat {
  background-image: var(--rcy-card-top);
  box-shadow: var(--rcy-elev-1);
}

/* 헤어라인 디바이더 유틸 + .rcy 내부 hr */
.rcy-hairline,
.rcy hr.rcy-hr {
  height: 1px; border: 0; margin: var(--rcy-s5) 0;
  background: var(--rcy-hairline-grad);
}

/* ---- Kicker / eyebrow: 모노 + 레드 리드라인 (목업 .kicker) ---- */
.rcy-kicker {
  display: inline-flex; align-items: center; gap: .55rem;
  font-family: var(--rcy-font-mono);
  font-size: var(--rcy-fs-xxs); font-weight: 700;
  letter-spacing: .13em; text-transform: uppercase;
  color: var(--rcy-brand-bright);
}
.rcy-kicker::before {
  content: ""; width: 1.1rem; height: 1px;
  background: var(--rcy-brand); flex: none;
}

/* 데이터-콘솔 라벨은 모노로 (목업 .field-label / group-label) */
.rcy .rcy-stat__label,
.rcy .rcy-app-shell__group-label,
.rcy .rcy-sidebar__group-label,
.rcy .rcy-badge {
  font-family: var(--rcy-font-mono);
}

/* ---- 수치 = 모노 tabular (목업 .stat-xl / .num) ---- */
.rcy .rcy-stat__value,
.rcy .rcy-lms-kpis .rcy-stat .rcy-stat__value,
.rcy .rcy-stat-row__cell b,
.rcy .rcy-num {
  font-family: var(--rcy-font-mono);
  font-variant-numeric: tabular-nums slashed-zero;
  letter-spacing: -.01em;
}

/* ---- Primary CTA: 레드 그라데이션 + 글로우 (목업 .btn-primary) ---- */
.rcy .rcy-btn--primary {
  background: linear-gradient(180deg, #e3202e 0%, #c81b28 100%);
  border-color: #9d1721;
  color: #fff;
  box-shadow: var(--rcy-cta-glow);
}
.rcy .rcy-btn--primary:hover {
  background: linear-gradient(180deg, #ec2c3a 0%, #d11f2d 100%);
  border-color: #9d1721;
  filter: brightness(1.02);
}
.rcy .rcy-btn--primary:active { transform: translateY(1px) scale(.99); filter: brightness(.97); }
/* 모든 버튼에 상단 inset 하이라이트(촉각감) + 부드러운 프레스 */
.rcy .rcy-btn { box-shadow: var(--rcy-sheen), var(--rcy-shadow-xs); }
.rcy .rcy-btn--ghost { box-shadow: none; }
.rcy .rcy-btn:active { transform: translateY(1px) scale(.99); }

/* ---- 폼: 살짝 가라앉은 well 느낌 (포커스 시 레드 링은 기존 규칙 유지) ---- */
.rcy .rcy-input,
.rcy .rcy-select,
.rcy .rcy-textarea {
  box-shadow: var(--rcy-well);
}

/* ---- 모바일 하단탭: 활성 레드 상단 인디케이터 (목업 .navitem.on::before) ---- */
@media (max-width: 768px) {
  .rcy-app-mobile-nav__item { position: relative; }
  .rcy-app-mobile-nav__item.is-active {
    background: transparent;
    color: var(--rcy-brand);
  }
  .rcy-app-mobile-nav__item.is-active::before {
    content: "";
    position: absolute; top: 0; left: 50%;
    transform: translateX(-50%);
    width: 24px; height: 3px;
    border-radius: 0 0 999px 999px;
    background: var(--rcy-brand);
    box-shadow: 0 0 12px rgba(227,32,46,.6);
  }
  .rcy-app-mobile-nav__item.is-active .rcy-app-mobile-nav__icon {
    filter: drop-shadow(0 2px 8px rgba(227,32,46,.45));
  }
}

/* ---- Topbar: 상단 inset 하이라이트로 패널이 떠 보이게 ---- */
.rcy .rcy-app-shell__topbar { box-shadow: var(--rcy-sheen); }

/* ---- 선택 영역 = 레드 (목업 ::selection) ---- */
.rcy ::selection { background: rgba(227,32,46,.28); color: inherit; }
