﻿/**
 * Roll20 Global Resource Center ??common.css
 * ---------------------------------------------------------------------------
 * ??븷: CSS 由ъ뀑, ?섎?濡좎쟻 ?뚮쭏 蹂???쇱씠???ㅽ겕), ??댄룷洹몃옒?? 諛섏쓳??湲곗?,
 *       ?덉씠?꾩썐 ?좏떥由ы떚.
 * ?뺤옣: ???섏씠吏?????뚯씪留?留곹겕?섍퀬, 而댄룷?뚰듃蹂?CSS??assets/css/ ?섏쐞??
 *       異붽?????HTML?먯꽌 ?쒖꽌?濡?濡쒕뱶?섎㈃ 罹먯뒪耳?대뱶媛 ?덉륫 媛?ν빀?덈떎.
 * ---------------------------------------------------------------------------
 */

/* ?몃? ?고듃??諛섎뱶???ㅻⅨ 洹쒖튃蹂대떎 癒쇱?(@import 洹쒖튃 ?쒖꽌) */
@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=Inter:wght@400;500;600;700&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;500;600;700&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&display=swap");

/* --------------------------------------------------------------------------
   1. CSS Reset (湲곕낯 諛뺤뒪 紐⑤뜽쨌?щ갚 ?뺢퇋??
   -------------------------------------------------------------------------- */
*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

body,
h1, h2, h3, h4, h5, h6,
p, ul, ol, li, figure, blockquote,
dl, dd {
  margin: 0;
}

ul, ol {
  padding: 0;
  list-style: none;
}

img, picture, video, canvas, svg {
  display: block;
  max-width: 100%;
  height: auto;
}

button, input, select, textarea {
  font: inherit;
  color: inherit;
}

button {
  cursor: pointer;
  background: none;
  border: 0;
}

a {
  color: inherit;
  text-decoration: none;
}

/* --------------------------------------------------------------------------
   2. 諛섏쓳??湲곗?: 猷⑦듃 rem ?ㅼ???+ 以묐떒??二쇱꽍?쇰줈 臾몄꽌?? JS? 怨듭쑀 媛??
   --------------------------------------------------------------------------
   --bp-sm: 480px   ???뚰삎 紐⑤컮???댁긽
   --bp-md: 768px   ???쒕툝由??몃줈
   --bp-lg: 1024px  ???쒕툝由?媛濡?/ ?뚰삎 ?곗뒪?ы넲
   --bp-xl: 1280px  ???곗뒪?ы넲
   -------------------------------------------------------------------------- */
html {
  /* 紐⑤컮???곗꽑: 1rem ??16px 湲곗?, ???붾㈃?먯꽌 ?쎄컙 ?뺣? */
  font-size: 100%;
  line-height: 1.5;
  scroll-behavior: smooth;
}

@media (min-width: 768px) {
  html {
    font-size: 106.25%;
  }
}

@media (min-width: 1280px) {
  html {
    font-size: 112.5%;
  }
}

/* --------------------------------------------------------------------------
   3. ?뚮쭏: ?섎?濡좎쟻 蹂??(:root = ?쇱씠?? html.dark-mode = ?ㅽ겕)
   - FOUC 諛⑹????몃씪???ㅽ겕由쏀듃??documentElement??dark-mode瑜?遺숈엯?덈떎.
   - body?먮룄 ?숈씪 ?대옒?ㅻ? 留욎텛誘濡? ?꾩슂 ??body.dark-mode濡??ㅼ퐫??媛??
   -------------------------------------------------------------------------- */
:root {
  color-scheme: light;
  /* ?쒕㈃쨌?띿뒪??*/
  --bg-primary: #ffffff;
  --bg-secondary: #f8fafc;
  --text-main: #1a1a1a;
  --text-muted: #64748b;
  /* 媛뺤“쨌寃쎄퀎 */
  --accent: #7c3aed;
  --accent-hover: #6d28d9;
  --border: #e2e8f0;
  /* ?ㅻ뜑쨌而⑦듃濡?*/
  --header-bg: var(--bg-secondary);
  --header-border: var(--border);
  --control-bg: #ffffff;
  --control-active-bg: rgba(124, 58, 237, 0.12);
  --control-active-border: var(--accent);
  /* 媛꾧꺽쨌諛섍꼍(?뺤옣 ??而댄룷?뚰듃?먯꽌 ?ъ궗?? */
  --space-xs: 0.25rem;
  --space-sm: 0.5rem;
  --space-md: 1rem;
  --space-lg: 1.5rem;
  --space-xl: 2rem;
  --radius-sm: 0.375rem;
  --radius-md: 0.5rem;
  --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.06);
  --font-sans: system-ui, sans-serif;
  --transition-theme: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

html.dark-mode {
  color-scheme: dark;
  --bg-primary: #0f172a;
  --bg-secondary: #1e293b;
  --text-main: #f1f5f9;
  --text-muted: #94a3b8;
  --accent: #a78bfa;
  --accent-hover: #c4b5fd;
  --border: #334155;
  --header-bg: var(--bg-secondary);
  --header-border: var(--border);
  --control-bg: #1e293b;
  --control-active-bg: rgba(167, 139, 250, 0.15);
  --control-active-border: var(--accent);
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.25);
}

/* --------------------------------------------------------------------------
   4. ??댄룷洹몃옒?? 濡쒖??쇰퀎 ?뱁룿??+ ?쒖뒪???대갚
   - Pretendard(KR), Inter(EN), Noto Sans JP, Noto Sans SC
   - ?ㅼ꽌鍮꾩뒪?먯꽌??font-display: swap 怨??쒕툕??URL濡?理쒖쟻?뷀븯?몄슂.
   -------------------------------------------------------------------------- */

body {
  font-family: "Pretendard", "Inter", "Noto Sans JP", "Noto Sans SC", var(--font-sans);
  background-color: var(--bg-primary);
  color: var(--text-main);
  min-height: 100vh;
  transition: var(--transition-theme);
}

/* lang ?띿꽦???곕Ⅸ ?곗꽑 ?고듃 ?뚰듃(釉뚮씪?곗?쨌OS ?대갚怨??④퍡 ?숈옉) */
html[lang="ko"] body {
  font-family: "Pretendard", "Inter", "Noto Sans JP", "Noto Sans SC", var(--font-sans);
}

html[lang="en"] body {
  font-family: "Inter", "Pretendard", "Noto Sans JP", "Noto Sans SC", var(--font-sans);
}

html[lang="jp"] body {
  font-family: "Noto Sans JP", "Pretendard", "Inter", "Noto Sans SC", var(--font-sans);
}

html[lang="cn"] body {
  font-family: "Noto Sans SC", "Pretendard", "Inter", "Noto Sans JP", var(--font-sans);
}

/* --------------------------------------------------------------------------
   5. ?덉씠?꾩썐 ?좏떥由ы떚 (硫붿씤쨌?쒕툕 ?섏씠吏 怨듯넻)
   -------------------------------------------------------------------------- */
.container {
  width: 100%;
  max-width: 75rem;
  margin-inline: auto;
  padding-inline: var(--space-md);
}

@media (min-width: 768px) {
  .container {
    padding-inline: var(--space-lg);
  }
}

.flex-center {
  display: flex;
  align-items: center;
  justify-content: center;
}

.flex-between {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.flex-wrap {
  flex-wrap: wrap;
}

.gap-sm {
  gap: var(--space-sm);
}

.gap-md {
  gap: var(--space-md);
}

.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;
}

/* --------------------------------------------------------------------------
   6. 湲濡쒕쾶 ?ㅻ뜑 (GNB) ??ui-controller媛 二쇱엯?섎뒗 留덊겕?낃낵 1:1 ???
   -------------------------------------------------------------------------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background-color: var(--header-bg);
  border-bottom: 1px solid var(--header-border);
  box-shadow: var(--shadow-sm);
  transition: var(--transition-theme);
}

.site-header__inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-md);
  min-height: 3.5rem;
  padding-block: var(--space-sm);
}

.site-header__start {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-md);
}

.site-header__nav {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: var(--space-sm);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
}

.site-header__nav-link {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--text-muted);
  padding: var(--space-xs) var(--space-sm);
  border-radius: var(--radius-sm);
  transition: color 0.15s ease, background 0.15s ease;
}

.site-header__nav-link:hover {
  color: var(--accent);
  background: var(--control-active-bg);
}

.site-header__nav-link.active,
.site-header__nav-link[aria-current="page"] {
  color: var(--accent);
  background: var(--control-active-bg);
  box-shadow: inset 0 0 0 1px var(--control-active-border);
}

.site-header__brand {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border-radius: 999px;
  color: var(--text-main);
}

.site-header__brand-icon {
  width: 1.75rem;
  height: 1.75rem;
  object-fit: contain;
  border-radius: 6px;
}

.site-header__brand:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}

.site-header__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-sm);
}

.save-indicator {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  border: 1px solid var(--border-subtle);
  border-radius: 999px;
  padding: 0.28rem 0.55rem;
  font-size: 0.75rem;
  color: var(--text-muted);
  background: var(--surface-1);
}

.offline-indicator {
  border: 1px solid #f59e0b;
  color: #b45309;
  background: rgba(245, 158, 11, 0.12);
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  padding: 0.26rem 0.5rem;
}

.project-btn {
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-sm);
  padding: 0.35rem 0.55rem;
  background: var(--surface-1);
  font-size: 0.75rem;
  font-weight: 600;
}

.project-btn:hover { border-color: var(--accent); }

.grc-project-modal { position: fixed; inset: 0; display: none; z-index: 1200; }
.grc-project-modal.is-open { display: block; }
.grc-project-modal__backdrop { position:absolute; inset:0; background: rgba(2,6,23,.45); }
.grc-project-modal__panel {
  position: relative;
  width: min(40rem, calc(100% - 2rem));
  margin: 8vh auto 0;
  background: var(--surface-1);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-md);
  padding: var(--space-md);
}
.grc-project-modal__head { display:flex; justify-content:space-between; align-items:center; margin-bottom: var(--space-sm); }
.grc-project-modal__actions { display:flex; gap: var(--space-sm); margin-bottom: var(--space-sm); }
.grc-project-modal__actions button, .grc-import-btn {
  border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); background: var(--surface-0);
  padding: .35rem .55rem; font-size:.78rem; cursor: pointer;
}
.grc-project-modal__list { display:grid; gap: .4rem; }
.grc-project-item {
  list-style: none; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm);
  background: var(--surface-0); padding: .45rem .55rem; display:flex; align-items:center; gap:.5rem;
}
.grc-project-item .sw { width: .8rem; height: .8rem; border-radius: 999px; flex: 0 0 auto; }
.grc-project-item .meta { flex: 1; min-width: 0; display:flex; flex-direction:column; }
.grc-project-item .meta small { color: var(--text-muted); font-size: .72rem; }
.grc-project-item .acts { display:flex; gap:.35rem; }
.grc-project-item .acts button { border:1px solid var(--border-subtle); background: var(--surface-1); border-radius: var(--radius-sm); padding:.25rem .45rem; }

@media (max-width: 402px) {
  .site-header__inner {
    align-items: stretch;
  }
  .site-header__start {
    width: 100%;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-sm);
  }
  .site-header__nav {
    width: 100%;
    padding-bottom: 2px;
  }
  .site-header__actions {
    width: 100%;
    justify-content: space-between;
  }
}

/* ?몄뼱 ?멸렇癒쇳듃 而⑦듃濡?*/
.lang-group {
  display: inline-flex;
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--control-bg);
}

.lang-group__btn {
  padding: var(--space-xs) var(--space-sm);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--text-muted);
  border-inline-end: 1px solid var(--border);
  transition: background 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}

.lang-group__btn:last-child {
  border-inline-end: 0;
}

.lang-group__btn:hover {
  color: var(--text-main);
  background: var(--bg-secondary);
}

.lang-group__btn:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: -2px;
  z-index: 1;
}

.lang-group__btn.is-active {
  color: var(--accent);
  background: var(--control-active-bg);
  box-shadow: inset 0 0 0 1px var(--control-active-border);
}

/* ?뚮쭏 ?좉? */
.theme-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.5rem;
  height: 2.5rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  background: var(--control-bg);
  color: var(--text-main);
  transition: background 0.15s ease, border-color 0.15s ease, transform 0.1s ease;
}

.theme-toggle:hover {
  border-color: var(--accent);
  background: var(--control-active-bg);
}

.theme-toggle:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

.theme-toggle:active {
  transform: scale(0.96);
}

.theme-toggle__icon {
  width: 1.25rem;
  height: 1.25rem;
  pointer-events: none;
}

/* 硫붿씤 ?섑띁(異뷀썑 肄섑뀗痢??뺤옣) */
.main-content {
  padding-block: var(--space-xl);
}

.main-content__placeholder {
  padding: var(--space-xl);
  text-align: center;
  color: var(--text-muted);
  border: 1px dashed var(--border);
  border-radius: var(--radius-md);
  background: var(--bg-secondary);
}

/* ?붾젆?곕━ 蹂듭궗 ?좎뒪????ui-controller.ensureToastHost */
.grc-toast {
  position: fixed;
  bottom: var(--space-lg);
  left: 50%;
  transform: translateX(-50%) translateY(120%);
  z-index: 1000;
  max-width: min(90vw, 24rem);
  padding: var(--space-sm) var(--space-md);
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--text-main);
  background: var(--header-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-sm);
  opacity: 0;
  pointer-events: none;
  transition: transform 0.25s ease, opacity 0.25s ease;
}

.grc-toast--visible {
  transform: translateX(-50%) translateY(0);
  opacity: 1;
}

.grc-toast--success {
  border-color: var(--accent);
  box-shadow: 0 0 0 1px var(--control-active-border), var(--shadow-sm);
}

/* Global footer (all pages) */
.site-footer {
  margin-top: var(--space-xl);
  border-top: 1px solid var(--border);
  background: var(--bg-secondary);
  padding-block: var(--space-lg);
}

.site-footer__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: var(--space-sm);
}

.site-footer__nav {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-md);
}

.site-footer__nav a,
.site-footer__community {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.site-footer__branding {
  font-size: 0.8rem;
  color: var(--text-main);
}

.site-footer__copy {
  font-size: 0.75rem;
  color: var(--text-muted);
}

/* Legal document pages */
.legal-page {
  max-width: 48rem;
}

.legal-doc {
  display: grid;
  gap: var(--space-lg);
  font-size: 16px;
  line-height: 1.6;
}

.legal-doc h1 {
  font-size: clamp(1.4rem, 3vw, 1.9rem);
  line-height: 1.3;
}

.legal-doc h2 {
  font-size: clamp(1.05rem, 2.4vw, 1.25rem);
  line-height: 1.35;
}

.legal-doc p {
  color: var(--text-main);
  word-break: keep-all;
  overflow-wrap: anywhere;
}

.legal-doc a {
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.legal-toc {
  border: 1px solid var(--border);
  background: var(--bg-secondary);
  border-radius: var(--radius-md);
  padding: var(--space-md);
}

.legal-toc ul {
  list-style: none;
  display: grid;
  gap: 0.35rem;
  margin-top: var(--space-sm);
}

.legal-section {
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: var(--space-md);
  background: var(--bg-secondary);
}

.legal-column {
  border-inline-start: 4px solid var(--accent);
  padding-inline-start: var(--space-md);
}

@media (max-width: 402px) {
  .legal-page {
    padding-inline: 0.5rem;
  }

  .legal-doc {
    font-size: 16px;
    line-height: 1.6;
    gap: var(--space-md);
  }

  .legal-section,
  .legal-toc {
    padding: 0.75rem;
  }
}

/* Netlify contact form (pages/contact.html) */
.contact-netlify-form label {
  display: block;
  font-weight: 600;
}

.contact-netlify-form input[type="text"],
.contact-netlify-form input[type="email"] {
  display: block;
  width: 100%;
  max-width: 24rem;
  margin-top: var(--space-xs);
  padding: 0.5rem 0.65rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--bg-primary);
  color: var(--text-main);
}

.contact-netlify-form__message-row label {
  display: block;
}

.contact-netlify-form textarea {
  display: block;
  width: 100%;
  max-width: 36rem;
  min-height: 8rem;
  margin-top: var(--space-xs);
  padding: 0.5rem 0.65rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--bg-primary);
  color: var(--text-main);
  resize: vertical;
}

.contact-netlify-form button[type="submit"] {
  margin-top: var(--space-sm);
  padding: 0.5rem 1.25rem;
  border-radius: var(--radius-md);
  border: 1px solid var(--accent);
  background: var(--accent);
  color: #fff;
  font-weight: 600;
}

.contact-netlify-form button[type="submit"]:hover {
  background: var(--accent-hover);
  border-color: var(--accent-hover);
}

.contact-form-success {
  margin-bottom: var(--space-md);
  padding: var(--space-md);
  border: 1px solid var(--accent);
  border-radius: var(--radius-md);
  background: var(--control-active-bg);
  color: var(--text-main);
  font-weight: 600;
}

