/*!*************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[10].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[10].use[3]!./app/globals.css ***!
  \*************************************************************************************************************************************************************************************************************************************************************/
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ── 모바일 가로 스크롤 방지 baseline ──────────────────────────────────────
 * 한 컴포넌트라도 자기 너비를 넘기면 모바일에서 화면이 가로로 밀려나
 * 모든 영역이 깨져 보인다. body 차원에서 한 번 막아두면 부분 깨짐이
 * 페이지 전체로 번지지 않는다. (특정 가로 스크롤이 필요한 곳은
 * 자체 .wrap { overflow-x: auto } 로 처리)
 */
html, body { overflow-x: hidden; max-width: 100vw; }
img, svg, video { max-width: 100%; height: auto; }
/* iOS Safari 가 input focus 시 16px 미만 폰트에서 자동 줌하는 걸 막음 */
@media (max-width: 760px) {
  input, select, textarea { font-size: 16px; }
}

/* ══════════════════════════════════════════════════════════════════════
 * 디자인 토큰 — "mindBlog Redesign" 디자인 시스템
 *
 * 원칙 03: 네이버 친화 그린(#077A39)이 자사 키 컬러.
 *          네이버 공식 그린(#03C75A)은 --naver 로 분리해 연동 배지 전용.
 *          → 브랜드색과 성공 상태색이 겹치던 문제를 해소.
 * 원칙 04: 한글 가독성 기준 — 15px / 행간 1.65 / 자간 -1%.
 *
 * 하위호환: 기존 27개 .module.css 가 쓰는 --accent* / --green / --red 등
 *          레거시 이름은 아래 "Legacy aliases" 에서 새 토큰으로 매핑한다.
 *          새 코드는 --brand / --ok / --err 계열을 직접 쓸 것.
 * ══════════════════════════════════════════════════════════════════════ */
:root {
  color-scheme: light;

  /* Brand — 그린 (Naver 친화). 자사 키 컬러 */
  --brand:       #077A39;   /* 기본 액션 (흰 텍스트 대비 4.9:1) */
  --brand-hover: #05622E;
  --brand-weak:  #E4F6EC;   /* 틴트 배경 */
  --brand-line:  rgba(7,122,57,.28);
  --on-brand:    #ffffff;

  /* Neutral — 클린 그레이 */
  --bg:        #F6F8F7;
  --surface:   #ffffff;
  --surface-2: #EEF2F0;
  --surface-3: #E3E9E6;
  --border:    #E4EAE7;
  --border-2:  #CDD6D2;
  --text:      #14201A;
  --text-2:    #4F5F58;
  /* 날짜·건수·보조 라벨이 전부 이 색이다. 예전 #8A9A93 은 흰 배경에서 2.95:1 로
   * 본문 크기 기준(4.5:1)에 한참 못 미쳤다 — 가장 어두운 면(--surface-3)에서도
   * 4.5 를 넘도록 내렸다. */
  --muted:     #5B6C66;

  /* Status — 전 화면 공통 작업 상태 언어 (대기·실행·일시정지·완료·실패) */
  /* 상태색을 꽉 채운 배경 위에 얹는 글자색. 라이트에선 흰색이지만 다크에선
   * 상태색 자체가 밝아지므로(--err #F98466 등) 어두운 글자로 뒤집어야 읽힌다. */
  --on-fill:   #ffffff;

  /* 각 상태색은 (a) 흰 면·회색 면 위, (b) 자기 *-weak 배경 위 두 곳 모두에서
   * 글자로 쓰인다(.ds-status-*, .ds-badge-*). 둘 다 4.5:1 을 넘겨야 한다.
   *
   * --ok 는 원래 #0E9F55 였는데 자기 틴트 위에서 2.94:1 밖에 안 나와 "완료"
   * 배지 글자가 사실상 안 읽혔다. 그렇다고 그냥 어둡게만 하면 --brand(#077A39,
   * hue 146) 와 색이 겹쳐 원칙 03 이 깨진다 → 청록 쪽으로 hue 165 로 밀어서
   * 브랜드 그린과 구분되면서 대비도 확보했다. */
  --ok:        #047256;  --ok-weak:   #DCF3EC;
  --warn:      #B45309;  --warn-weak: #FDF4E3;
  --err:       #C2321F;  --err-weak:  #FCE7E2;
  --info:      #1D4ED8;  --info-weak: #DDE6FB;

  /* Naver — 로그인·발행·크롤 등 "네이버 연동" 표시에만 사용.
   * --naver 는 네이버 공식 그린이라 그대로 둔다(로고·칩 배경 전용).
   * 다만 글자색으로 쓰면 흰 배경에서 2.25:1 이라 못 읽는다 → 텍스트는 반드시
   * --naver-ink 를 쓸 것. */
  --naver:      #03C75A;
  --naver-ink:  #026B31;
  --naver-weak: #E1F7EB;

  /* 공감(하트) — 상태색이 아니라 행동의 색이라 별도로 둔다 */
  --like:       #BE185D;
  --like-weak:  #FCE7F0;

  /* 자동 선택·자동 실행 — "내가 누른 것"과 "비서가 알아서 한 것"을 구분하는 색.
   * 상태(성공/실패)도 브랜드도 아니라서 별도 축이 필요하다. */
  --auto:       #5B3DF0;
  --auto-hover: #4A2CE3;
  --auto-weak:  #EAE6FE;

  /* Typography */
  --mono: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
  /* Hanken Grotesk 를 뺐다 — Pretendard 가 라틴·한글을 모두 덮어서 실제로 이
   * 자리까지 내려올 일이 없는데, 그 폰트 하나 때문에 실패하는 원격 요청이
   * 하나 더 붙어 있었다. */
  --sans: "Pretendard Variable", "Pretendard",
          -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --font-size-base: 15px;
  --line-base: 1.65;

  /* Shadows */
  --shadow-sm: 0 1px 2px rgba(20,45,32,.07), 0 1px 3px rgba(20,45,32,.05);
  --shadow-md: 0 2px 6px rgba(20,45,32,.06), 0 8px 24px rgba(20,45,32,.07);
  --shadow-lg: 0 8px 24px rgba(20,45,32,.09), 0 24px 60px rgba(20,45,32,.10);

  /* Radii */
  --r-sm:   8px;
  --r:      12px;
  --r-md:   12px;
  --r-lg:   16px;
  --r-xl:   22px;
  --r-pill: 999px;
}

/* ── Dark theme ──────────────────────────────────────────────────────────
 * html[data-theme="dark"] 이 붙어야 활성화된다. 토글을 붙이기 전까지는
 * 라이트 그대로 — 즉 이 블록만으로 기존 화면이 바뀌지는 않는다.
 */
[data-theme="dark"] {
  color-scheme: dark;

  --brand:       #34C86E;
  --brand-hover: #55D687;
  --brand-weak:  #10301E;
  --brand-line:  rgba(52,200,110,.32);
  --on-brand:    #08210F;

  --bg:        #0E1512;
  --surface:   #14201B;
  --surface-2: #1B2A24;
  --surface-3: #24352D;
  --border:    #24352D;
  --border-2:  #35493F;
  --text:      #EAF2EE;
  --text-2:    #A9BDB4;
  /* 라이트와 같은 이유 — #6F847B 는 --surface-2/3 위에서 3.2~3.8:1 이었다 */
  --muted:     #8FA298;

  --on-fill: #0B1611;

  /* 라이트에서 --ok 를 청록 쪽으로 민 것과 짝 — "완료" 색이 테마를 넘나들며
   * 같은 색으로 읽히고, 다크 브랜드 그린(#34C86E) 과도 구분된다. */
  --ok:   #3FD9A8;  --ok-weak:   #123028;
  --warn: #FBBF24;  --warn-weak: #3A2C10;
  --err:  #F98466;  --err-weak:  #3A1E17;
  --info: #7CA2F7;  --info-weak: #1A2340;

  /* 다크에선 공식 그린이 어두운 면 위에서 7:1 이라 글자로 써도 된다 */
  --naver: #03C75A; --naver-ink: #2FDE7F; --naver-weak: #0F3220;
  --like:  #F472B6; --like-weak:  #3A1526;
  --auto:  #A78BFA; --auto-hover: #C4B5FD; --auto-weak: #241C46;

  --shadow-sm: 0 1px 2px rgba(0,0,0,.4);
  --shadow-md: 0 8px 24px rgba(0,0,0,.45);
  --shadow-lg: 0 24px 60px rgba(0,0,0,.55);
}

/* ── Legacy aliases ──────────────────────────────────────────────────────
 * 기존 .module.css 들이 참조하는 이름. 새 토큰을 가리키므로
 * 라이트/다크 어느 쪽이든 자동으로 따라온다. 신규 작성 시 사용 금지.
 */
:root, [data-theme="dark"] {
  --accent:       var(--brand);
  --accent-hover: var(--brand-hover);
  --accent-light: var(--brand-weak);
  --accent-bg:    var(--brand-weak);
  /* --accent-dark 는 실사용이 전부 "틴트 배경 위 텍스트" 라 --brand 가 맞다 */
  --accent-dark:  var(--brand);

  --green:        var(--ok);
  --red:          var(--err);
  --red-light:    var(--err-weak);
  --yellow:       var(--warn);
  --yellow-light: var(--warn-weak);
  --blue:         var(--info);
  --blue-light:   var(--info-weak);
  --danger:       var(--err);
  --danger-bg:    var(--err-weak);

  --fg:         var(--text);
  --fg-muted:   var(--muted);
  --text-1:     var(--text);
  --text-muted: var(--muted);
  --surface-1:  var(--surface);
  --bg-2:       var(--surface-2);

  --font:      var(--sans);
  --font-mono: var(--mono);
  --shadow:    var(--shadow-md);
}

/* body 는 height 가 아니라 min-height 여야 한다.
 * 둘 다 height:100% 면 body 가 뷰포트 높이에 딱 고정되고, 넘치는 본문 때문에
 * *body 자신이* 스크롤 컨테이너가 된다. 그러면 뷰포트(html)는 스크롤할 게 없어서
 * window.scrollY 가 영원히 0, window.scrollTo() 는 아무 일도 하지 않는다.
 * 실제로 댓글 관리의 "맨 위로" 버튼(scrollY>400 에서 노출)이 절대 안 뜨고,
 * 글 생성 후 window.scrollTo({top:0}) 도 먹지 않았다.
 * min-height 로 두면 body 가 본문만큼 늘어나고 스크롤이 뷰포트로 돌아온다. */
html { height: 100%; }
body {
  min-height: 100%;
}
html, body {
  background: var(--bg);
  color: var(--text);
  font-family: var(--sans);
  font-size: var(--font-size-base);
  line-height: var(--line-base);
  letter-spacing: -.01em;
  -webkit-font-smoothing: antialiased;
}

a { color: var(--brand); text-decoration: none; }
a:hover { color: var(--brand-hover); text-decoration: underline; }
button { cursor: pointer; font-family: inherit; }

::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-thumb {
  background: var(--border-2);
  border-radius: var(--r-pill);
  border: 2px solid transparent;
  background-clip: content-box;
}
::-webkit-scrollbar-track { background: transparent; }

/* ── 상태 모션 — 다마고치·로그·pill·테이블 전 화면 공통 ─────────────────── */
@keyframes mb-pulse   { 0%,100% { opacity:1; transform:scale(1) } 50% { opacity:.45; transform:scale(.7) } }
@keyframes mb-blink   { 0%,100% { opacity:1 } 50% { opacity:.35 } }
@keyframes mb-shimmer { 100% { background-position:-200% 0 } }
@keyframes mb-float   { 0%,100% { transform:translateY(0) } 50% { transform:translateY(-5px) } }
@keyframes mb-spin    { to { transform:rotate(360deg) } }
@keyframes mb-jiggle  { 0%,100% { transform:rotate(0) } 25% { transform:rotate(-5deg) } 75% { transform:rotate(5deg) } }
@keyframes mb-buzz    { 0%,100% { transform:translateX(0) } 15% { transform:translateX(-3px) } 30% { transform:translateX(3px) } 45% { transform:translateX(-2px) } 60% { transform:translateX(2px) } 75% { transform:translateX(-1px) } }
@keyframes mb-rise    { from { opacity:0; transform:translateY(8px) } to { opacity:1; transform:translateY(0) } }
@keyframes mb-blob    { 0%,100% { border-radius:42% 58% 56% 44%/54% 48% 52% 46% } 50% { border-radius:56% 44% 46% 54%/44% 56% 44% 56% } }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
}

/* ── JetBrains Mono (자체 호스팅) ─────────────────────────────────────────
 * 아이콘 폰트와 같은 이유 — Google Fonts 요청이 실패하면 로그 콘솔·수치 표시가
 * 시스템 고정폭으로 조용히 대체된다. 깨져 보이진 않지만 자릿수 정렬이 흐트러진다.
 *
 * latin 서브셋만 받는다 (숫자·ASCII 로그 전용이라 키릴/그리스/베트남어 불필요).
 *
 * 웨이트는 400 하나만 선언한다. 예전엔 400/500/700 을 각각 선언했는데
 * jetbrains-mono-{400,500,700}.woff2 세 파일이 바이트 단위로 동일한 사본이었다
 * (셋 다 md5 570751c5…). 그래서 font-weight:700 요청이 "700 페이스 있음" 으로
 * 매칭돼 합성 볼드가 꺼진 채 400 글리프가 나왔다 — 로그 콘솔·수치의 굵은 글씨가
 * 조용히 안 굵어졌다. 면을 하나만 두면 브라우저가 볼드를 합성해준다.
 * (진짜 500/700 파일을 받아오면 그때 다시 선언할 것.)
 */
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/jetbrains-mono-400.woff2") format("woff2");
}

/* ── Material Symbols (자체 호스팅) ────────────────────────────────────────
 * 예전엔 Google Fonts CSS 를 <link> 로 불러왔는데, 그 요청이 실패하면
 * .material-symbols-rounded 클래스 자체가 존재하지 않게 된다. 그러면 아이콘
 * 자리에 리거처 원문("home", "dashboard", "cloud_download")이 그대로 노출됐다.
 *
 * 그래서 폰트를 public/fonts 로 내려받고 클래스도 여기서 정의한다.
 * 네트워크 의존이 사라져서 실패 자체가 없다.
 *
 * 파일은 실제 사용하는 아이콘만 서브셋한 것 (5.1MB → 84KB).
 * 새 아이콘을 쓰려면 scripts/icon-names.json 에 추가하고 폰트를 다시 받아야 한다.
 * `npm run check:icons` 가 누락을 잡아준다.
 */
@font-face {
  font-family: "Material Symbols Rounded";
  font-style: normal;
  font-weight: 100 700;
  /* block — 폰트 로드 전에는 글자를 아예 감춘다. 로컬 파일이라 사실상 즉시지만,
   * swap 이면 그 찰나에 리거처 원문이 보일 수 있어서 block 이 맞다. */
  font-display: block;
  src: url("/fonts/material-symbols-rounded.woff2") format("woff2");
}

.material-symbols-rounded {
  font-family: "Material Symbols Rounded";
  font-weight: normal;
  font-style: normal;
  font-size: 24px;
  line-height: 1;
  letter-spacing: normal;
  text-transform: none;
  display: inline-block;
  white-space: nowrap;
  word-wrap: normal;
  direction: ltr;
  font-feature-settings: "liga";
  -webkit-font-feature-settings: "liga";
  -webkit-font-smoothing: antialiased;
  /* 폰트가 어떤 이유로든 안 붙었을 때 옆 글자로 넘치지 않게 */
  overflow: hidden;
}

/* Utility: 네이버 연동 그라데이션 — 연동 배지·버튼 전용 */
.naver-gradient {
  background: linear-gradient(135deg, var(--naver) 0%, #02a94c 100%);
}

/* Glass card */
.glass-card {
  background: color-mix(in srgb, var(--surface) 80%, transparent);
  -webkit-backdrop-filter: blur(12px);
          backdrop-filter: blur(12px);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-md);
}

/*!*******************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[10].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[10].use[3]!./app/design-system.css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************/
/* ══════════════════════════════════════════════════════════════════════
 * mindBlog 디자인 시스템 — 공통 컴포넌트 레이어
 *
 * 기존 구조는 CSS Modules 이지만, 화면마다 버튼·배지·통계타일을 따로 짜면서
 * 스타일이 제각각이 된 게 리디자인의 출발점이었다. 그래서 "여러 화면에
 * 반복되는 것"만 전역 유틸 클래스로 뽑는다. 레이아웃(그리드·간격·배치)은
 * 계속 각 .module.css 의 몫 — 이 파일은 요소 하나의 생김새만 책임진다.
 *
 * 모든 클래스는 .ds- 프리픽스. CSS Modules 의 해시 클래스와 절대 충돌하지
 * 않으므로 <div className={`ds-card ${styles.myGrid}`}> 처럼 섞어 쓴다.
 *
 * 토큰은 globals.css 참조. 이 파일에 하드코딩된 색은 없다 → 다크 모드 자동 대응.
 * ══════════════════════════════════════════════════════════════════════ */

/* ── Button ────────────────────────────────────────────────────────────
 * 상태: default / hover / active / disabled / loading
 * loading 은 .ds-btn-spinner 자식을 함께 넣는다.
 */
.ds-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  background: var(--brand); color: var(--on-brand);
  border: 1px solid transparent; border-radius: var(--r-sm);
  font-family: var(--sans); font-size: 13px; font-weight: 700; line-height: 1.2;
  padding: 9px 16px;
  box-shadow: var(--shadow-sm);
  cursor: pointer;
  transition: background .15s, box-shadow .15s, transform .1s, border-color .15s, color .15s;
}
.ds-btn:hover:not(:disabled) { background: var(--brand-hover); }
.ds-btn:active:not(:disabled) {
  background: var(--brand-hover);
  transform: translateY(1px);
  box-shadow: inset 0 2px 6px rgba(0,0,0,.2);
}
.ds-btn:disabled,
.ds-btn[aria-disabled="true"] {
  background: var(--surface-2); color: var(--muted);
  box-shadow: none; cursor: not-allowed;
}
.ds-btn:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px var(--brand-weak), 0 0 0 4px var(--brand-line);
}

/* 변형 */
.ds-btn-secondary {
  background: var(--surface); color: var(--text); border-color: var(--border-2);
}
.ds-btn-secondary:hover:not(:disabled) { background: var(--surface-2); }
.ds-btn-secondary:active:not(:disabled) { background: var(--surface-2); }

.ds-btn-outline {
  background: transparent; color: var(--brand); border-color: var(--brand-line);
  box-shadow: none;
}
.ds-btn-outline:hover:not(:disabled) { background: var(--brand-weak); }
.ds-btn-outline:active:not(:disabled) { background: var(--brand-weak); }

.ds-btn-text {
  background: transparent; color: var(--text-2);
  border-color: transparent; box-shadow: none; padding: 9px 12px;
}
.ds-btn-text:hover:not(:disabled) { background: var(--surface-2); color: var(--text); }
.ds-btn-text:active:not(:disabled) { background: var(--surface-2); }

.ds-btn-danger {
  background: var(--err-weak); color: var(--err);
  border-color: color-mix(in srgb, var(--err) 30%, transparent);
  box-shadow: none;
}
.ds-btn-danger:hover:not(:disabled) {
  background: color-mix(in srgb, var(--err) 18%, var(--surface));
}
.ds-btn-danger:active:not(:disabled) {
  background: color-mix(in srgb, var(--err) 18%, var(--surface));
}

/* 크기 */
.ds-btn-sm { font-size: 12px; padding: 7px 13px; }
.ds-btn-lg { font-size: 14px; padding: 11px 20px; border-radius: var(--r); }
.ds-btn-block { width: 100%; }

.ds-btn-spinner {
  width: 12px; height: 12px; flex-shrink: 0;
  border: 2px solid color-mix(in srgb, currentColor 35%, transparent);
  border-top-color: currentColor;
  border-radius: 50%;
  animation: mb-spin .7s linear infinite;
}

/* ── Input · Select ────────────────────────────────────────────────────
 * 상태: default / focus / error / disabled
 */
.ds-input, .ds-select, .ds-textarea {
  width: 100%;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border-2); border-radius: var(--r-sm);
  padding: 10px 13px;
  font-family: var(--sans); font-size: 14px; line-height: 1.5;
  transition: border-color .15s, box-shadow .15s;
}
.ds-input::placeholder, .ds-textarea::placeholder { color: var(--muted); }
.ds-input:focus, .ds-select:focus, .ds-textarea:focus {
  outline: none;
  border: 1.5px solid var(--brand);
  box-shadow: 0 0 0 3px var(--brand-weak);
}
.ds-input:disabled, .ds-select:disabled, .ds-textarea:disabled {
  background: var(--surface-2); color: var(--muted); cursor: not-allowed;
}
.ds-input-error, .ds-input-error:focus {
  border: 1.5px solid var(--err);
  box-shadow: 0 0 0 3px var(--err-weak);
}
.ds-field-error {
  display: block;
  font-size: 11.5px; font-weight: 600; color: var(--err); margin-top: 5px;
}
.ds-label {
  display: block;
  font-size: 12.5px; font-weight: 700; color: var(--text-2); margin-bottom: 6px;
}

/* ── Card ──────────────────────────────────────────────────────────── */
.ds-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 20px;
  box-shadow: var(--shadow-sm);
}
.ds-card-flush { padding: 0; }

/* ── Badge · Chip ──────────────────────────────────────────────────── */
.ds-badge {
  display: inline-flex; align-items: center; gap: 5px;
  background: var(--brand-weak); color: var(--brand);
  border-radius: var(--r-pill);
  padding: 3px 10px;
  font-size: 11.5px; font-weight: 700; line-height: 1.5;
  white-space: nowrap;
}
.ds-badge-warn { background: var(--warn-weak); color: var(--warn); }
.ds-badge-err  { background: var(--err-weak);  color: var(--err); }
.ds-badge-ok   { background: var(--ok-weak);   color: var(--ok); }
.ds-badge-info { background: var(--info-weak); color: var(--info); }
.ds-badge-neutral {
  background: var(--surface-2); color: var(--text-2);
  border: 1px solid var(--border); font-weight: 600;
}

/* 네이버 연동 배지 — 공식 그린은 ::before 의 "N" 칩 배경에만.
 * 글자까지 --naver 로 쓰면 라이트에서 2.0:1 이라 못 읽어서 --naver-ink 로 뺐다. */
.ds-badge-naver { background: var(--naver-weak); color: var(--naver-ink); }
.ds-badge-naver::before {
  content: "N";
  display: grid; place-items: center;
  width: 12px; height: 12px; border-radius: 3px;
  background: var(--naver); color: #fff;
  font-size: 8px; font-weight: 800;
}

.ds-chip {
  display: inline-flex; align-items: center; gap: 5px;
  background: var(--surface-2); color: var(--text-2);
  border: 1px solid var(--border); border-radius: var(--r-pill);
  padding: 3px 10px;
  font-size: 11.5px; font-weight: 600;
}

/* ── 작업 상태 언어 ────────────────────────────────────────────────────
 * 원칙 02 — 대기·실행 중·일시정지·완료·실패를 색·아이콘·모션으로
 * 전 화면 동일하게. 다마고치·로그·pill·테이블 어디서든 이 클래스를 쓴다.
 */
.ds-status {
  display: inline-flex; align-items: center; gap: 7px;
  border-radius: var(--r-pill);
  padding: 6px 14px;
  font-size: 13px; font-weight: 700; line-height: 1.3;
  white-space: nowrap;
}
.ds-status::before { font-size: 12px; }

.ds-status-idle {
  background: var(--surface-2); color: var(--text-2); border: 1px solid var(--border);
}
.ds-status-idle::before {
  content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--muted);
}

.ds-status-running {
  background: var(--brand-weak); color: var(--brand); border: 1px solid var(--brand-line);
}
.ds-status-running::before {
  content: ""; width: 8px; height: 8px; border-radius: 50%;
  background: var(--brand); animation: mb-pulse 1.3s infinite;
}

.ds-status-paused {
  background: var(--warn-weak); color: var(--warn);
  border: 1px solid color-mix(in srgb, var(--warn) 30%, transparent);
}
.ds-status-paused::before { content: "⏸"; }

.ds-status-done {
  background: var(--ok-weak); color: var(--ok);
  border: 1px solid color-mix(in srgb, var(--ok) 30%, transparent);
}
.ds-status-done::before { content: "✓"; }

.ds-status-failed {
  background: var(--err-weak); color: var(--err);
  border: 1px solid color-mix(in srgb, var(--err) 30%, transparent);
}
.ds-status-failed::before { content: "✕"; }

/* 작은 변형 — 테이블 셀·리스트 행용 */
.ds-status-sm { font-size: 11.5px; padding: 3px 10px; gap: 5px; }

/* ── Progress ──────────────────────────────────────────────────────── */
.ds-progress {
  height: 8px; width: 100%;
  background: var(--surface-2);
  border-radius: var(--r-pill);
  overflow: hidden;
}
.ds-progress-bar {
  height: 100%;
  background: linear-gradient(90deg, var(--brand), var(--brand-hover));
  border-radius: var(--r-pill);
  transition: width .3s ease;
}
/* 진행률을 모를 때 — 끝날 때까지 흐르는 셔머 */
.ds-progress-indeterminate .ds-progress-bar {
  width: 40%;
  background: linear-gradient(90deg, transparent, var(--brand), transparent);
  background-size: 200% 100%;
  animation: mb-shimmer 1.2s linear infinite;
}
.ds-progress-head {
  display: flex; justify-content: space-between; align-items: baseline;
  font-size: 12px; font-weight: 700; margin-bottom: 6px;
}
.ds-progress-pct { color: var(--brand); font-family: var(--mono); }

/* ── StatTile ──────────────────────────────────────────────────────── */
.ds-stat {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 12px 14px;
}
.ds-stat-val {
  font-size: 24px; font-weight: 800; letter-spacing: -.02em; line-height: 1.15;
  color: var(--text);
}
.ds-stat-val-brand { color: var(--brand); }
.ds-stat-unit { font-size: 12px; font-weight: 500; color: var(--text-2); margin-left: 2px; }
.ds-stat-label { font-size: 11px; color: var(--muted); margin-top: 2px; }

/* ── EmptyState ────────────────────────────────────────────────────── */
.ds-empty {
  border: 1px dashed var(--border-2);
  border-radius: var(--r);
  padding: 24px 18px;
  text-align: center;
}
.ds-empty-icon { font-size: 22px; line-height: 1; }
.ds-empty-text {
  font-size: 12.5px; font-weight: 600; color: var(--text-2); margin-top: 6px;
}

/* ── LogConsole ────────────────────────────────────────────────────────
 * 스트리밍 로그는 라이트/다크 무관하게 항상 어두운 판 위에 — 터미널 관습을
 * 따르는 편이 읽기 쉽고, 로그 색(성공 초록·경고 등)을 한 벌만 유지하면 된다.
 */
.ds-log {
  background: #111A16;
  border: 1px solid var(--border-2);
  border-radius: var(--r-sm);
  padding: 12px;
  font-family: var(--mono); font-size: 11.5px; line-height: 1.7;
  color: #C4B4A7;
  overflow-y: auto;
  overscroll-behavior: contain;
}
.ds-log-cmd  { color: #948477; }
.ds-log-info { color: #C4B4A7; }
.ds-log-step { color: #34C86E; }
.ds-log-ok   { color: #4ADE80; }
.ds-log-warn { color: #FBBF24; }
.ds-log-err  { color: #F98466; }
.ds-log-caret {
  display: inline-block;
  width: 7px; height: 13px; margin-left: 3px; vertical-align: -2px;
  background: #34C86E;
  animation: mb-blink .9s step-end infinite;
}

/* ── Toast ─────────────────────────────────────────────────────────── */
.ds-toast {
  display: flex; align-items: center; gap: 10px;
  background: var(--text); color: var(--bg);
  border-radius: var(--r);
  padding: 11px 14px;
  box-shadow: var(--shadow-md);
  font-size: 13px; font-weight: 600;
  animation: mb-rise .22s ease-out;
}
/* 상태색으로 꽉 채운 원 위의 아이콘 — 다크에선 --ok/--err 자체가 밝아지므로
 * 흰 글자면 1.8:1 로 사라진다. 그래서 --on-fill (테마별로 뒤집히는 토큰). */
.ds-toast-icon {
  display: grid; place-items: center; flex-shrink: 0;
  width: 20px; height: 20px; border-radius: 50%;
  background: var(--ok); color: var(--on-fill); font-size: 11px;
}
.ds-toast-err .ds-toast-icon { background: var(--err); }
.ds-toast-action {
  margin-left: auto;
  font-size: 12px; font-weight: 700; color: var(--brand);
}

/* ── Tabs ──────────────────────────────────────────────────────────── */
.ds-tabs {
  display: flex; gap: 2px;
  border-bottom: 1px solid var(--border);
}
.ds-tab {
  background: none; border: none;
  padding: 8px 14px;
  font-family: var(--sans); font-size: 13px; font-weight: 600;
  color: var(--text-2);
  border-bottom: 2px solid transparent;
  transition: color .15s, border-color .15s;
}
.ds-tab:hover { color: var(--text); }
.ds-tab-active { color: var(--brand); font-weight: 800; border-bottom-color: var(--brand); }

/* ── Section heading ───────────────────────────────────────────────── */
.ds-eyebrow {
  font-size: 12px; font-weight: 800; letter-spacing: .12em;
  color: var(--brand); text-transform: uppercase;
}
.ds-h2 {
  font-size: 26px; font-weight: 800; letter-spacing: -.02em; margin-top: 6px;
}

/*!****************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[5].use[3]!./components/Tamagotchi.module.css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************/
/*
 * 다마고치 — 전역 마스코트.
 * 모든 페이지의 우하단에 떠 있고, 진행 중 잡이 있으면 떨면서 어필.
 * 클릭하면 잡 패널이 위로 펼쳐져 진행률·일시정지·정지 제어를 보여준다.
 */

.Tamagotchi_root__WPj2P {
  position: fixed;
  right: 20px;
  bottom: 20px;
  z-index: 9999;
  /* 마스코트가 다른 모든 UI 위에 떠야 함 (모달 9000대 가정) */
  pointer-events: none;
}
/* 모바일에서는 본문 잠식을 줄이기 위해 살짝 안쪽으로 + 작게 */
@media (max-width: 640px) {
  .Tamagotchi_root__WPj2P { right: 12px; bottom: 12px; }
}

.Tamagotchi_root__WPj2P > * {
  pointer-events: auto;
}

/* ── 마스코트 본체 (버튼) ───────────────────────────────────── */

.Tamagotchi_mascot__8j2_0 {
  display: block;
  width: 36px;
  height: 36px;
  padding: 0;
  border: none;
  background: transparent;
  cursor: pointer;
  position: relative;
  /* 살짝 떠 있는 그림자 */
  filter: drop-shadow(0 3px 4px rgba(0, 0, 0, 0.15));
  transition: transform 0.18s ease;
}

.Tamagotchi_mascot__8j2_0:hover { transform: translateY(-2px) scale(1.04); }
.Tamagotchi_mascot__8j2_0:active { transform: translateY(0) scale(0.96); }

.Tamagotchi_mascotSvg__8ZBpP {
  width: 100%;
  height: 100%;
  /* pixel-perfect — 안티앨리어싱 끄기 */
  image-rendering: pixelated;
  image-rendering: crisp-edges;
}

/* idle: 천천히 좌우로 살짝 흔들 — 한가하게 손 흔드는 느낌 */
.Tamagotchi_idle__bzvMV .Tamagotchi_mascotSvg__8ZBpP {
  animation: Tamagotchi_wave__8JJ5q 3.6s ease-in-out infinite;
}

@keyframes Tamagotchi_wave__8JJ5q {
  0%, 100% { transform: translateX(0); }
  25%      { transform: translateX(-3px); }
  50%      { transform: translateX(0); }
  75%      { transform: translateX(3px); }
}

/*
 * busy: 일하는 느낌 — squash & stretch 로 "꾹 누르기 → 튀어 오르기" 반복.
 * 알람처럼 좌우로 빠르게 떨지 않고, 무게를 들어올리거나 망치질하는 듯
 * 리듬감 있는 상하 펌핑. transform-origin 을 본체 발 아래쪽에 두어서
 * 눌릴 때 바닥을 누르는 느낌이 나도록.
 */
.Tamagotchi_busy__YOplC .Tamagotchi_mascotSvg__8ZBpP {
  animation: Tamagotchi_working__6odSs 0.9s ease-in-out infinite;
  transform-origin: 50% 88%;
}

@keyframes Tamagotchi_working__6odSs {
  0%, 100% { transform: translateY(0)    scale(1.00, 1.00); }
  40%      { transform: translateY(3px)  scale(1.08, 0.90); } /* 누름(effort) — 옆으로 퍼지면서 짜부 */
  70%      { transform: translateY(-2px) scale(0.96, 1.06); } /* 튀어오름(release) — 길쭉하게 늘어남 */
}

/* busy 상태일 때 글로우(주변 빛) — 본체와 같은 밝은 연두 */
.Tamagotchi_busy__YOplC {
  filter: drop-shadow(0 3px 5px rgba(0, 0, 0, 0.18))
          drop-shadow(0 0 6px color-mix(in srgb, var(--brand) 70%, transparent));
}

/* busy 상태 우측 상단 카운트 배지 — 마스코트 바깥으로 띄워서 겹침 최소화 */
.Tamagotchi_busyDot__JV_f5 {
  position: absolute;
  top: -2px;
  right: -2px;
  min-width: 20px;
  height: 20px;
  padding: 0 5px;
  border-radius: var(--r-pill);
  background: var(--err);
  color: var(--on-fill);
  font-size: 11px;
  font-weight: 800;
  font-family: var(--mono);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
  border: 2px solid var(--surface);
  /* 살짝 펄스 */
  animation: Tamagotchi_badgePulse__4ooFN 1.4s ease-in-out infinite;
}

@keyframes Tamagotchi_badgePulse__4ooFN {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.12); }
}

/* ── 펼쳐지는 패널 ─────────────────────────────────────────
 * 톤·색은 globals.css 의 디자인 토큰(--surface, --border, --accent ...)
 * 과 NeighborView.module.css 의 .card 패턴에 맞춤.
 */

.Tamagotchi_panel__hZBi0 {
  position: absolute;
  bottom: calc(100% + 10px);
  right: 0;
  width: 308px;
  max-height: 460px;
  overflow-y: auto;
  background: var(--surface);
  border: 1px solid var(--border-2);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-lg);
  font-family: var(--font);
  color: var(--text);
  animation: Tamagotchi_panelIn__iWllO 0.16s ease-out;
}

@keyframes Tamagotchi_panelIn__iWllO {
  from { opacity: 0; transform: translateY(6px) scale(0.98); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

.Tamagotchi_panelHeader__xPT3M {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 12px 16px;
  background: var(--bg);
  border-bottom: 1px solid var(--border);
  border-radius: var(--r-lg) var(--r-lg) 0 0;
  font-weight: 800;
  font-size: 13px;
  color: var(--text);
}

.Tamagotchi_panelClose__wTfRH {
  width: 24px;
  height: 24px;
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: 15px;
  color: var(--muted);
  border-radius: var(--r-sm);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.12s, color 0.12s;
}
.Tamagotchi_panelClose__wTfRH:hover { background: var(--surface-2); color: var(--text-2); }

.Tamagotchi_empty__6Nor6 {
  padding: 24px 16px 20px;
  text-align: center;
  color: var(--muted);
  font-size: 13px;
  line-height: 1.6;
}

.Tamagotchi_nextRun__u3KVM {
  margin-top: 8px;
  font-size: 11px;
  color: var(--accent-dark);
  background: var(--accent-light);
  display: inline-block;
  padding: 2px 10px;
  border-radius: 12px;
  font-weight: 500;
}

.Tamagotchi_autoVisitBtn__4tuom {
  display: block;
  margin: 12px auto 0;
  padding: 7px 16px;
  border: 1.5px solid var(--border);
  border-radius: var(--r-sm);
  background: var(--surface-2);
  color: var(--text-2);
  font-size: 12px;
  font-weight: 500;
  text-decoration: none;
  transition: border-color 0.12s, background 0.12s, color 0.12s;
  cursor: pointer;
  font-family: inherit;
  width: -moz-fit-content;
  width: fit-content;
}
.Tamagotchi_autoVisitBtn__4tuom:hover {
  border-color: var(--accent);
  background: var(--accent-light);
  color: var(--accent-dark);
}

.Tamagotchi_jobList__LpKtk {
  list-style: none;
  margin: 0;
  padding: 10px;
}

.Tamagotchi_jobItem__R5goE {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 12px;
  margin-bottom: 8px;
}
.Tamagotchi_jobItem__R5goE:last-child { margin-bottom: 0; }

.Tamagotchi_jobTop__Dsq2R {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
}

.Tamagotchi_jobLabel__LvdpC {
  font-weight: 800;
  font-size: 13px;
  color: var(--text);
}

.Tamagotchi_jobBadge__4Ycqk {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 700;
  color: var(--brand);
  white-space: nowrap;
}

.Tamagotchi_jobSub__aDuMu {
  font-size: 12px;
  color: var(--text-2);
  margin-bottom: 8px;
  line-height: 1.4;
  /* 한 줄 자르기 */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.Tamagotchi_jobStatus__34mS5  { color: var(--accent-dark); font-weight: 500; }
.Tamagotchi_jobTitle__OrAQ4   { color: var(--muted); }
.Tamagotchi_jobKeyword__J1Rqw { color: var(--accent); font-weight: 600; font-size: 0.78rem; }

.Tamagotchi_jobBar__fRM7a {
  width: 100%;
  height: 7px;
  background: var(--surface-2);
  border-radius: var(--r-pill);
  overflow: hidden;
  margin-bottom: 12px;
}

.Tamagotchi_jobBarFill__jkLU_ {
  height: 100%;
  background: linear-gradient(90deg, var(--brand), var(--brand-hover));
  border-radius: var(--r-pill);
  transition: width 0.5s ease;
}

.Tamagotchi_jobBtns__XHTiq {
  display: flex;
  gap: 6px;
}

.Tamagotchi_btn__we77D {
  flex: 1 1;
  padding: 7px 10px;
  border: 1px solid var(--border-2);
  border-radius: var(--r-sm);
  background: var(--surface);
  font-size: 12px;
  font-weight: 700;
  color: var(--text);
  cursor: pointer;
  transition: border-color 0.12s, background 0.12s;
  font-family: inherit;
}
.Tamagotchi_btn__we77D:hover { border-color: var(--accent); background: var(--accent-light); }
.Tamagotchi_btn__we77D:active { transform: translateY(1px); }
.Tamagotchi_btn__we77D:disabled { opacity: 0.5; cursor: not-allowed; }

.Tamagotchi_btnStop__57WIT {
  background: var(--err-weak);
  color: var(--err);
  border-color: color-mix(in srgb, var(--err) 30%, transparent);
}
.Tamagotchi_btnStop__57WIT:hover { border-color: var(--red); background: color-mix(in srgb, var(--red) 18%, var(--surface)); }

.Tamagotchi_btnHeadless__5W3wt {
  background: var(--surface-2);
  color: var(--text-2);
  border-color: var(--border);
}
.Tamagotchi_btnHeadless__5W3wt:hover { border-color: var(--accent); background: var(--accent-light); }

.Tamagotchi_headlessToast__t4RDm {
  font-size: 11px;
  color: var(--accent-dark);
  background: var(--accent-light);
  border-radius: var(--r-sm);
  padding: 4px 10px;
  margin-bottom: 6px;
  text-align: center;
  animation: Tamagotchi_fadeInOut__k94F0 3.5s ease forwards;
}

@keyframes Tamagotchi_fadeInOut__k94F0 {
  0%   { opacity: 0; }
  10%  { opacity: 1; }
  80%  { opacity: 1; }
  100% { opacity: 0; }
}

/* 패널 안 잡 카드 — "방금 댓글" 한 줄 표시 */
.Tamagotchi_jobLastComment__HKoxj {
  display: flex;
  align-items: flex-start;
  gap: 6px;
  padding: 8px 10px;
  margin-bottom: 10px;
  background: var(--accent-light);
  border-left: 2px solid var(--accent);
  border-radius: 4px;
  font-size: 12px;
  line-height: 1.5;
  color: var(--text-2);
}
.Tamagotchi_jobLastCommentLabel__ybAgG {
  flex-shrink: 0;
  font-weight: 600;
  color: var(--accent-dark);
  font-size: 11px;
  padding-top: 1px;
}
.Tamagotchi_jobLastCommentText__arMYn {
  flex: 1 1;
  color: var(--text);
  word-break: break-word;
}

/* ── 마스코트 옆 떠오르는 말풍선 ────────────────────────────
 * 위치는 마스코트 좌측 위 — 패널이 닫혀 있고 잡 진행 중 + 댓글이 있을 때만.
 * 새 댓글이 올 때마다 React key 가 바뀌어서 fade-in 애니메이션 재실행.
 */
.Tamagotchi_bubble__d4rK3 {
  position: absolute;
  bottom: calc(100% + 12px);
  right: 8px;
  min-width: 200px;
  max-width: 220px;
  background: var(--surface);
  border: 1px solid var(--border-2);
  /* 오른쪽 아래만 각지게 — 마스코트 쪽을 가리키는 꼬리와 이어진다 */
  border-radius: 14px 14px 4px 14px;
  padding: 10px 13px;
  box-shadow: var(--shadow-md);
  font-family: var(--font);
  color: var(--text);
  pointer-events: none;
  animation: Tamagotchi_bubbleIn__dsxZQ 0.32s cubic-bezier(0.34, 1.56, 0.64, 1);
}

@keyframes Tamagotchi_bubbleIn__dsxZQ {
  0%   { opacity: 0; transform: translateY(8px) scale(0.9); }
  100% { opacity: 1; transform: translateY(0)   scale(1);   }
}

.Tamagotchi_bubbleHeader__TU5mN {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-bottom: 4px;
}
.Tamagotchi_bubbleLabel__tN8i4 {
  font-size: 10px;
  font-weight: 800;
  color: var(--brand);
  letter-spacing: 0.02em;
}
.Tamagotchi_bubbleNick__JWNMs {
  font-size: 11px;
  color: var(--text-2);
  font-weight: 500;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.Tamagotchi_bubbleText__pApKY {
  font-size: 12px;
  color: var(--text);
  line-height: 1.5;
  word-break: break-word;
}
.Tamagotchi_bubbleTitle__CCcde {
  font-size: 10px;
  color: var(--muted);
  margin-top: 4px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 말풍선 꼬리 — 우하단에서 마스코트 쪽으로.
 * 말풍선의 오른쪽 아래 모서리를 4px 로 각지게 뒀기 때문에(디자인 스펙)
 * 꼬리를 그 모서리에 딱 붙여야 하나로 이어져 보인다. 예전처럼 12px 안쪽에
 * 두면 둥근 모서리와 꼬리가 따로 노는 모양이 된다. */
.Tamagotchi_bubbleTail__FDEq1 {
  position: absolute;
  bottom: -6px;
  right: 0;
  width: 12px;
  height: 12px;
  background: var(--surface);
  border-right: 1px solid var(--border-2);
  border-bottom: 1px solid var(--border-2);
  transform: rotate(45deg);
}

/* ── 실시간 로그 토글 버튼 ──────────────────────────────────── */
.Tamagotchi_logToggle__8Q_b3 {
  width: 100%;
  margin-top: 8px;
  padding: 5px 0;
  border: 1px dashed var(--border);
  border-radius: var(--r-sm);
  background: transparent;
  font-size: 11px;
  color: var(--muted);
  cursor: pointer;
  font-family: var(--mono);
  transition: border-color 0.12s, color 0.12s;
}
.Tamagotchi_logToggle__8Q_b3:hover { border-color: var(--accent); color: var(--accent-dark); }

/* ── 로그 콘솔 ──────────────────────────────────────────────── */
.Tamagotchi_logConsole__mm1G4 {
  margin-top: 6px;
  height: 150px;
  overflow-y: auto;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  padding: 6px 8px;
  font-family: var(--mono);
  font-size: 11px;
  line-height: 1.55;
  scrollbar-width: thin;
}

.Tamagotchi_logEmpty__nOCjx {
  color: var(--muted);
  text-align: center;
  padding: 24px 0;
  font-size: 11px;
}

.Tamagotchi_logLine__n7rbY { color: var(--text-2); white-space: pre-wrap; word-break: break-all; }
.Tamagotchi_ok__pZgil   { color: var(--accent-dark); }
.Tamagotchi_err__opHia  { color: var(--red); }
.Tamagotchi_sep__9NR3x  { color: var(--muted); }
.Tamagotchi_dim__Cf1at  { color: var(--muted); opacity: 0.55; }

/* ── 리소스 풀 게이지 (PoC: 잡 큐 대시보드) ─────────────────────
 * 패널 헤더 바로 아래에 표시.
 * 풀 = 동시 실행 가능한 슬롯(브라우저=1, LLM=3, 크롤=2, 분석=1).
 * 셀 하나 = 슬롯 하나. 채워진 셀 = 사용 중. +N = 대기 중 잡 수.
 */
.Tamagotchi_poolGauges__746UN {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 10px;
  padding: 8px 12px;
  border-bottom: 1px solid var(--border);
  background: var(--surface-1);
  font-size: 11px;
}

.Tamagotchi_poolGauge__mSFm8 {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: var(--muted);
}

.Tamagotchi_poolLabel__yzrFP { font-family: var(--mono); font-size: 10px; font-weight: 500; color: var(--muted); }

.Tamagotchi_poolCells__TX_0x {
  display: inline-flex;
  gap: 3px;
}

.Tamagotchi_poolCell__5bzJ4 {
  width: 14px;
  height: 8px;
  border-radius: 2px;
  background: var(--surface-2);
}

.Tamagotchi_poolCellOn__aapZ3 {
  background: var(--brand);
}

.Tamagotchi_poolText___o7lk { font-feature-settings: "tnum"; font-variant-numeric: tabular-nums; }
.Tamagotchi_poolQueued__aoDvX { color: var(--red); font-weight: 600; }

/* pending 잡은 살짝 흐리고 점선 테두리로 "대기 중" 시각화 */
.Tamagotchi_jobItemPending___8i7T {
  opacity: 0.78;
  border-style: dashed !important;
}

/* 리소스 풀 chip — 잡 라벨 옆에 어떤 풀을 점유하는지 표시 */
.Tamagotchi_resChip__esw_5 {
  display: inline-flex;
  align-items: center;
  margin-left: 6px;
  padding: 1px 6px;
  font-size: 10px;
  font-weight: 600;
  color: var(--accent-dark);
  background: var(--accent-light);
  border-radius: 8px;
  white-space: nowrap;
}
.Tamagotchi_resChipPrio___q4RZ {
  margin-left: 3px;
  font-style: normal;
  color: var(--red);
}

/* 모바일 화면 — 패널 폭 조정 */
@media (max-width: 480px) {
  .Tamagotchi_root__WPj2P { right: 12px; bottom: 12px; }
  .Tamagotchi_panel__hZBi0 { width: calc(100vw - 24px); right: 0; }
  .Tamagotchi_mascot__8j2_0 { width: 30px; height: 30px; }
}

