/*
 * IBM Plex Sans KR — 앱에 넣어 배포한다.
 *
 * **인터넷 없이 동작해야 한다.** 데스크톱 앱이고, CSP 가 `default-src 'self'` 라
 * 외부 호스트를 아예 못 부른다. 구글 폰트 CDN 을 쓰려면 CSP 를 열어야 하는데
 * 그건 보안 기준선을 되돌리는 일이다. 파일을 넣는 쪽이 맞다.
 *
 * 출처 — IBM 공식 저장소 v5.0.0 의 `complete/woff2/hinted`.
 *   github.com/IBM/plex/tree/v5.0.0/IBM-Plex-Sans-KR/fonts/complete
 * 구글 폰트에도 같은 글꼴이 있지만 TTF 로 내려와 직접 변환해야 하고,
 * 힌팅 선택권이 없다. 제작사 원본을 그대로 쓴다.
 *
 * hinted 를 고른 이유 — 윈도우(WebView2 = Chromium + DirectWrite)에서 획을
 * 픽셀 격자에 맞춰준다. 맥은 무시한다. 대상이 40~60대라 300KB 더 쓰고
 * 선명도를 사는 쪽으로 정했다.
 *
 * 라이선스 — SIL Open Font License 1.1. 전문은 `assets/fonts/OFL.txt`.
 * 배포물에 그 파일을 동봉해야 한다. 폰트만 따로 파는 것은 금지.
 * 고쳐서 쓰려면 "Plex" 이름을 뗀 다른 이름을 붙여야 한다 (Reserved Font Name).
 * 동봉 사본은 `public/OFL.txt` 다 — 이 파일은 아무 코드도 import 하지 않아
 * Vite 가 그냥 두면 결과물에 안 실린다. `public/` 은 손대지 않고 그대로 복사된다.
 *
 * 굵기는 400 과 500 둘만 넣는다. 600 이상은 쓰지 않는다는 규칙(theme.css)이라
 * 넣어봐야 용량만 는다. 굵기를 늘리려면 파일부터 받아야 한다 — 그게 제동 장치다.
 *
 * `complete` 는 한글과 라틴이 한 파일에 다 들어 있다. 유니코드 구간을 쪼갠
 * 서브셋 방식은 웹에서 필요한 조각만 받으려는 것인데, 앱에 넣으면 어차피
 * 전부 실리므로 파일 수만 늘어난다. 여기서는 이득이 없다.
 */

@font-face {
  font-family: 'IBM Plex Sans KR';
  font-style: normal;
  font-weight: 400;
  /* 파일이 앱 안에 있어 지연이 없다. 그래도 못 읽을 때 글자가 사라지면 안 된다 */
  font-display: swap;
  src: url('/src/assets/fonts/IBMPlexSansKR-Regular.woff2') format('woff2');
}

@font-face {
  font-family: 'IBM Plex Sans KR';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/src/assets/fonts/IBMPlexSansKR-Medium.woff2') format('woff2');
}

/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer properties;
@layer theme, base, components, utilities;
@layer theme {
  :root, :host {
    --font-sans: "IBM Plex Sans KR", -apple-system, BlinkMacSystemFont,
    "Apple SD Gothic Neo", "Malgun Gothic", "Segoe UI", system-ui, sans-serif;
    --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
      "Courier New", monospace;
    --container-lg: 32rem;
    --font-weight-thin: 100;
    --font-weight-extralight: 200;
    --font-weight-light: 300;
    --font-weight-normal: 400;
    --font-weight-medium: 500;
    --font-weight-semibold: 600;
    --font-weight-bold: 700;
    --font-weight-extrabold: 800;
    --font-weight-black: 900;
    --tracking-tight: -0.025em;
    --ease-out: cubic-bezier(0, 0, 0.2, 1);
    --animate-spin: spin 1s linear infinite;
    --default-transition-duration: 150ms;
    --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    --default-font-family: var(--font-sans);
    --default-mono-font-family: var(--font-mono);
    --color-app-bar: #e6e9ea;
    --color-app-bg: #f2f5f6;
    --color-app-surface: #ffffff;
    --color-app-sunk: #edf1f2;
    --color-app-raised: #ffffff;
    --color-app-picked: #e3ebed;
    --color-app-ink: #1a1d1e;
    --color-app-ink2: #585d60;
    --color-app-ink3: #646a6d;
    --color-app-line: #e0e4e5;
    --color-app-line2: #ccd2d4;
    --color-app-line3: #a8afb2;
    --color-on-fill: #ffffff;
    --color-on-bright: #0f1213;
    --color-bubble: #bce9f2;
    --color-bubble-chip: #6fc2d5;
    --color-select: #b6dfe6;
    --color-pine: #17bed9;
    --color-pine-ink: #11748a;
    --color-pine-bg: #e2f0f2;
    --color-pine-surface: #d2e8ed;
    --color-rose: #f2568a;
    --color-rose-ink: #a3285a;
    --color-rose-bg: #fbe3ec;
    --color-ochre: #8c6110;
    --color-ochre-bg: #f7eeda;
    --color-error: #c81e1e;
    --color-error-bg: #e8c4c4;
    --color-ochre-line: #e3d3ae;
    --color-ochre-surface: #f3ebd9;
    --color-scrim: #343839;
    --color-clay: #9c5738;
    --color-clay-bg: #f6e9e2;
    --color-plum: #6b4a6b;
    --color-plum-bg: #f0e8f0;
    --color-indigo: #3d5a80;
    --color-indigo-bg: #e6ebf2;
    --color-slate: #495663;
    --color-slate-bg: #e8ebed;
    --color-lead-bg: #eaedee;
    --text-meta: 13px;
    --text-sub: 14px;
    --text-card: 15px;
    --text-body: 16px;
    --text-body--line-height: 1.65;
    --text-headline3: 17px;
    --text-headline2: 20px;
    --text-headline1: 26px;
    --text-display: 28px;
    --text-hero: 30px;
    --spacing-0: 0px;
    --spacing-2: 2px;
    --spacing-4: 4px;
    --spacing-6: 6px;
    --spacing-8: 8px;
    --spacing-12: 12px;
    --spacing-16: 16px;
    --spacing-20: 20px;
    --spacing-28: 28px;
    --spacing-36: 36px;
    --spacing-48: 48px;
    --spacing-60: 60px;
    --spacing-80: 80px;
    --spacing-100: 100px;
    --radius-tag: 6px;
    --radius-control: 8px;
    --radius-tile: 9px;
    --radius-row: 10px;
    --radius-panel: 11px;
    --radius-card: 12px;
    --radius-composer: 13px;
    --radius-modal: 14px;
    --shadow-modal: 0 12px 40px -8px rgb(58 60 54 / 0.3);
    --shadow-float: 0 0 16px 0 rgb(23 190 217 / 0.35);
    --leading-tight: 1.25;
    --leading-snug: 1.5;
  }
}
@layer base {
  *, ::after, ::before, ::backdrop, ::file-selector-button {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    border: 0 solid;
  }
  html, :host {
    line-height: 1.5;
    -webkit-text-size-adjust: 100%;
    tab-size: 4;
    font-family: var(--default-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
    font-feature-settings: var(--default-font-feature-settings, normal);
    font-variation-settings: var(--default-font-variation-settings, normal);
    -webkit-tap-highlight-color: transparent;
  }
  hr {
    height: 0;
    color: inherit;
    border-top-width: 1px;
  }
  abbr:where([title]) {
    -webkit-text-decoration: underline dotted;
    text-decoration: underline dotted;
  }
  h1, h2, h3, h4, h5, h6 {
    font-size: inherit;
    font-weight: inherit;
  }
  a {
    color: inherit;
    -webkit-text-decoration: inherit;
    text-decoration: inherit;
  }
  b, strong {
    font-weight: bolder;
  }
  code, kbd, samp, pre {
    font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
    font-feature-settings: var(--default-mono-font-feature-settings, normal);
    font-variation-settings: var(--default-mono-font-variation-settings, normal);
    font-size: 1em;
  }
  small {
    font-size: 80%;
  }
  sub, sup {
    font-size: 75%;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
  }
  sub {
    bottom: -0.25em;
  }
  sup {
    top: -0.5em;
  }
  table {
    text-indent: 0;
    border-color: inherit;
    border-collapse: collapse;
  }
  :-moz-focusring:where(:not(iframe)) {
    outline: auto;
  }
  progress {
    vertical-align: baseline;
  }
  summary {
    display: list-item;
  }
  ol, ul, menu {
    list-style: none;
  }
  img, svg, video, canvas, audio, iframe, embed, object {
    display: block;
    vertical-align: middle;
  }
  img, video {
    max-width: 100%;
    height: auto;
  }
  button, input, select, optgroup, textarea, ::file-selector-button {
    font: inherit;
    font-feature-settings: inherit;
    font-variation-settings: inherit;
    letter-spacing: inherit;
    color: inherit;
    border-radius: 0;
    background-color: transparent;
    opacity: 1;
  }
  :where(select:is([multiple], [size])) optgroup {
    font-weight: bolder;
  }
  :where(select:is([multiple], [size])) optgroup option {
    padding-inline-start: 20px;
  }
  ::file-selector-button {
    margin-inline-end: 4px;
  }
  ::placeholder {
    opacity: 1;
  }
  @supports (not (-webkit-appearance: -apple-pay-button))  or (contain-intrinsic-size: 1px) {
    ::placeholder {
      color: currentcolor;
      @supports (color: color-mix(in lab, red, red)) {
        color: color-mix(in oklab, currentcolor 50%, transparent);
      }
    }
  }
  textarea {
    resize: vertical;
  }
  ::-webkit-search-decoration {
    -webkit-appearance: none;
  }
  ::-webkit-date-and-time-value {
    min-height: 1lh;
    text-align: inherit;
  }
  ::-webkit-datetime-edit {
    display: inline-flex;
  }
  ::-webkit-datetime-edit-fields-wrapper {
    padding: 0;
  }
  ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
    padding-block: 0;
  }
  ::-webkit-calendar-picker-indicator {
    line-height: 1;
  }
  :-moz-ui-invalid {
    box-shadow: none;
  }
  button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
    appearance: button;
  }
  ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
    height: auto;
  }
  [hidden]:where(:not([hidden="until-found"])) {
    display: none !important;
  }
}
@layer utilities {
  .pointer-events-none {
    pointer-events: none;
  }
  .collapse {
    visibility: collapse;
  }
  .sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
    border-width: 0;
  }
  .absolute {
    position: absolute;
  }
  .fixed {
    position: fixed;
  }
  .relative {
    position: relative;
  }
  .static {
    position: static;
  }
  .sticky {
    position: sticky;
  }
  .inset-0 {
    inset: var(--spacing-0);
  }
  .inset-x-0 {
    inset-inline: var(--spacing-0);
  }
  .inset-y-0 {
    inset-block: var(--spacing-0);
  }
  .top-0 {
    top: var(--spacing-0);
  }
  .top-1\/2 {
    top: calc(1 / 2 * 100%);
  }
  .top-6 {
    top: var(--spacing-6);
  }
  .top-16 {
    top: var(--spacing-16);
  }
  .top-60 {
    top: var(--spacing-60);
  }
  .top-\[50\%\] {
    top: 50%;
  }
  .right-0 {
    right: var(--spacing-0);
  }
  .right-8 {
    right: var(--spacing-8);
  }
  .right-16 {
    right: var(--spacing-16);
  }
  .bottom-full {
    bottom: 100%;
  }
  .left-0 {
    left: var(--spacing-0);
  }
  .left-1\/2 {
    left: calc(1 / 2 * 100%);
  }
  .left-12 {
    left: var(--spacing-12);
  }
  .left-\[50\%\] {
    left: 50%;
  }
  .z-10 {
    z-index: 10;
  }
  .z-40 {
    z-index: 40;
  }
  .z-50 {
    z-index: 50;
  }
  .container {
    width: 100%;
    @media (width >= 40rem) {
      max-width: 40rem;
    }
    @media (width >= 48rem) {
      max-width: 48rem;
    }
    @media (width >= 64rem) {
      max-width: 64rem;
    }
    @media (width >= 80rem) {
      max-width: 80rem;
    }
    @media (width >= 96rem) {
      max-width: 96rem;
    }
  }
  .m-2 {
    margin: var(--spacing-2);
  }
  .m-4 {
    margin: var(--spacing-4);
  }
  .mx-2 {
    margin-inline: var(--spacing-2);
  }
  .mx-auto {
    margin-inline: auto;
  }
  .my-6 {
    margin-block: var(--spacing-6);
  }
  .my-16 {
    margin-block: var(--spacing-16);
  }
  .-mt-12 {
    margin-top: calc(var(--spacing-12) * -1);
  }
  .mt-2 {
    margin-top: var(--spacing-2);
  }
  .mt-4 {
    margin-top: var(--spacing-4);
  }
  .mt-6 {
    margin-top: var(--spacing-6);
  }
  .mt-8 {
    margin-top: var(--spacing-8);
  }
  .mt-12 {
    margin-top: var(--spacing-12);
  }
  .mt-16 {
    margin-top: var(--spacing-16);
  }
  .mt-20 {
    margin-top: var(--spacing-20);
  }
  .mt-28 {
    margin-top: var(--spacing-28);
  }
  .mt-auto {
    margin-top: auto;
  }
  .mr-4 {
    margin-right: var(--spacing-4);
  }
  .-mb-2 {
    margin-bottom: calc(var(--spacing-2) * -1);
  }
  .mb-2 {
    margin-bottom: var(--spacing-2);
  }
  .mb-4 {
    margin-bottom: var(--spacing-4);
  }
  .mb-6 {
    margin-bottom: var(--spacing-6);
  }
  .mb-8 {
    margin-bottom: var(--spacing-8);
  }
  .mb-12 {
    margin-bottom: var(--spacing-12);
  }
  .mb-16 {
    margin-bottom: var(--spacing-16);
  }
  .mb-20 {
    margin-bottom: var(--spacing-20);
  }
  .mb-28 {
    margin-bottom: var(--spacing-28);
  }
  .mb-60 {
    margin-bottom: var(--spacing-60);
  }
  .ml-2 {
    margin-left: var(--spacing-2);
  }
  .ml-4 {
    margin-left: var(--spacing-4);
  }
  .line-clamp-2 {
    overflow: hidden;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
  }
  .block {
    display: block;
  }
  .flex {
    display: flex;
  }
  .grid {
    display: grid;
  }
  .inline {
    display: inline;
  }
  .inline-block {
    display: inline-block;
  }
  .inline-flex {
    display: inline-flex;
  }
  .table {
    display: table;
  }
  .aspect-\[4\/3\] {
    aspect-ratio: 4/3;
  }
  .size-8 {
    width: var(--spacing-8);
    height: var(--spacing-8);
  }
  .size-16 {
    width: var(--spacing-16);
    height: var(--spacing-16);
  }
  .size-20 {
    width: var(--spacing-20);
    height: var(--spacing-20);
  }
  .size-28 {
    width: var(--spacing-28);
    height: var(--spacing-28);
  }
  .size-\[14px\] {
    width: 14px;
    height: 14px;
  }
  .size-\[19px\] {
    width: 19px;
    height: 19px;
  }
  .h-8 {
    height: var(--spacing-8);
  }
  .h-12 {
    height: var(--spacing-12);
  }
  .h-28 {
    height: var(--spacing-28);
  }
  .h-36 {
    height: var(--spacing-36);
  }
  .h-60 {
    height: var(--spacing-60);
  }
  .h-\[1px\] {
    height: 1px;
  }
  .h-\[17px\] {
    height: 17px;
  }
  .h-\[20px\] {
    height: 20px;
  }
  .h-\[25px\] {
    height: 25px;
  }
  .h-\[34px\] {
    height: 34px;
  }
  .h-\[calc\(100vh-var\(--spacing-60\)\)\] {
    height: calc(100vh - var(--spacing-60));
  }
  .h-full {
    height: 100%;
  }
  .max-h-\[128px\] {
    max-height: 128px;
  }
  .max-h-\[168px\] {
    max-height: 168px;
  }
  .min-h-0 {
    min-height: var(--spacing-0);
  }
  .min-h-28 {
    min-height: var(--spacing-28);
  }
  .min-h-60 {
    min-height: var(--spacing-60);
  }
  .min-h-80 {
    min-height: var(--spacing-80);
  }
  .w-6 {
    width: var(--spacing-6);
  }
  .w-8 {
    width: var(--spacing-8);
  }
  .w-16 {
    width: var(--spacing-16);
  }
  .w-28 {
    width: var(--spacing-28);
  }
  .w-36 {
    width: var(--spacing-36);
  }
  .w-48 {
    width: var(--spacing-48);
  }
  .w-60 {
    width: var(--spacing-60);
  }
  .w-80 {
    width: var(--spacing-80);
  }
  .w-\[34px\] {
    width: 34px;
  }
  .w-\[36px\] {
    width: 36px;
  }
  .w-\[44px\] {
    width: 44px;
  }
  .w-\[160px\] {
    width: 160px;
  }
  .w-\[200px\] {
    width: 200px;
  }
  .w-\[240px\] {
    width: 240px;
  }
  .w-\[250px\] {
    width: 250px;
  }
  .w-\[260px\] {
    width: 260px;
  }
  .w-\[280px\] {
    width: 280px;
  }
  .w-\[300px\] {
    width: 300px;
  }
  .w-\[320px\] {
    width: 320px;
  }
  .w-\[420px\] {
    width: 420px;
  }
  .w-full {
    width: 100%;
  }
  .max-w-\[40ch\] {
    max-width: 40ch;
  }
  .max-w-\[46ch\] {
    max-width: 46ch;
  }
  .max-w-\[76\%\] {
    max-width: 76%;
  }
  .max-w-\[220px\] {
    max-width: 220px;
  }
  .max-w-\[240px\] {
    max-width: 240px;
  }
  .max-w-\[320px\] {
    max-width: 320px;
  }
  .max-w-\[400px\] {
    max-width: 400px;
  }
  .max-w-\[420px\] {
    max-width: 420px;
  }
  .max-w-\[560px\] {
    max-width: 560px;
  }
  .max-w-\[620px\] {
    max-width: 620px;
  }
  .max-w-\[720px\] {
    max-width: 720px;
  }
  .max-w-\[860px\] {
    max-width: 860px;
  }
  .max-w-\[900px\] {
    max-width: 900px;
  }
  .max-w-\[1200px\] {
    max-width: 1200px;
  }
  .max-w-\[calc\(100\%-2rem\)\] {
    max-width: calc(100% - 2rem);
  }
  .max-w-\[calc\(100vw-160px\)\] {
    max-width: calc(100vw - 160px);
  }
  .max-w-full {
    max-width: 100%;
  }
  .min-w-0 {
    min-width: var(--spacing-0);
  }
  .min-w-\[140px\] {
    min-width: 140px;
  }
  .flex-1 {
    flex: 1;
  }
  .shrink-0 {
    flex-shrink: 0;
  }
  .grow {
    flex-grow: 1;
  }
  .border-collapse {
    border-collapse: collapse;
  }
  .-translate-x-1\/2 {
    --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .translate-x-\[-50\%\] {
    --tw-translate-x: -50%;
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .-translate-y-1\/2 {
    --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .translate-y-\[-50\%\] {
    --tw-translate-y: -50%;
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .transform {
    transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
  }
  .animate-spin {
    animation: var(--animate-spin);
  }
  .cursor-col-resize {
    cursor: col-resize;
  }
  .cursor-default {
    cursor: default;
  }
  .touch-none {
    touch-action: none;
  }
  .resize {
    resize: both;
  }
  .resize-none {
    resize: none;
  }
  .scroll-mt-28 {
    scroll-margin-top: var(--spacing-28);
  }
  .auto-rows-fr {
    grid-auto-rows: minmax(0, 1fr);
  }
  .grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .flex-col {
    flex-direction: column;
  }
  .flex-col-reverse {
    flex-direction: column-reverse;
  }
  .flex-wrap {
    flex-wrap: wrap;
  }
  .items-baseline {
    align-items: baseline;
  }
  .items-center {
    align-items: center;
  }
  .items-end {
    align-items: flex-end;
  }
  .items-start {
    align-items: flex-start;
  }
  .justify-between {
    justify-content: space-between;
  }
  .justify-center {
    justify-content: center;
  }
  .justify-end {
    justify-content: flex-end;
  }
  .justify-start {
    justify-content: flex-start;
  }
  .gap-0 {
    gap: var(--spacing-0);
  }
  .gap-2 {
    gap: var(--spacing-2);
  }
  .gap-4 {
    gap: var(--spacing-4);
  }
  .gap-6 {
    gap: var(--spacing-6);
  }
  .gap-8 {
    gap: var(--spacing-8);
  }
  .gap-12 {
    gap: var(--spacing-12);
  }
  .gap-16 {
    gap: var(--spacing-16);
  }
  .gap-20 {
    gap: var(--spacing-20);
  }
  .gap-28 {
    gap: var(--spacing-28);
  }
  .gap-x-16 {
    column-gap: var(--spacing-16);
  }
  .gap-y-12 {
    row-gap: var(--spacing-12);
  }
  .truncate {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .overflow-auto {
    overflow: auto;
  }
  .overflow-hidden {
    overflow: hidden;
  }
  .overflow-x-auto {
    overflow-x: auto;
  }
  .overflow-y-auto {
    overflow-y: auto;
  }
  .rounded-card {
    border-radius: var(--radius-card);
  }
  .rounded-composer {
    border-radius: var(--radius-composer);
  }
  .rounded-control {
    border-radius: var(--radius-control);
  }
  .rounded-full {
    border-radius: calc(infinity * 1px);
  }
  .rounded-modal {
    border-radius: var(--radius-modal);
  }
  .rounded-panel {
    border-radius: var(--radius-panel);
  }
  .rounded-row {
    border-radius: var(--radius-row);
  }
  .rounded-tag {
    border-radius: var(--radius-tag);
  }
  .rounded-tile {
    border-radius: var(--radius-tile);
  }
  .border {
    border-style: var(--tw-border-style);
    border-width: 1px;
  }
  .border-0 {
    border-style: var(--tw-border-style);
    border-width: 0px;
  }
  .border-t {
    border-top-style: var(--tw-border-style);
    border-top-width: 1px;
  }
  .border-r {
    border-right-style: var(--tw-border-style);
    border-right-width: 1px;
  }
  .border-b {
    border-bottom-style: var(--tw-border-style);
    border-bottom-width: 1px;
  }
  .border-l {
    border-left-style: var(--tw-border-style);
    border-left-width: 1px;
  }
  .border-l-2 {
    border-left-style: var(--tw-border-style);
    border-left-width: 2px;
  }
  .border-dashed {
    --tw-border-style: dashed;
    border-style: dashed;
  }
  .border-app-ink {
    border-color: var(--color-app-ink);
  }
  .border-app-line {
    border-color: var(--color-app-line);
  }
  .border-app-line2 {
    border-color: var(--color-app-line2);
  }
  .border-error {
    border-color: var(--color-error);
  }
  .border-error-bg {
    border-color: var(--color-error-bg);
  }
  .border-ochre-line {
    border-color: var(--color-ochre-line);
  }
  .border-pine {
    border-color: var(--color-pine);
  }
  .border-pine-ink {
    border-color: var(--color-pine-ink);
  }
  .border-rose {
    border-color: var(--color-rose);
  }
  .border-transparent {
    border-color: transparent;
  }
  .bg-app-bar {
    background-color: var(--color-app-bar);
  }
  .bg-app-bg {
    background-color: var(--color-app-bg);
  }
  .bg-app-ink {
    background-color: var(--color-app-ink);
  }
  .bg-app-ink\/90 {
    background-color: color-mix(in srgb, #1a1d1e 90%, transparent);
    @supports (color: color-mix(in lab, red, red)) {
      background-color: color-mix(in oklab, var(--color-app-ink) 90%, transparent);
    }
  }
  .bg-app-ink3 {
    background-color: var(--color-app-ink3);
  }
  .bg-app-line {
    background-color: var(--color-app-line);
  }
  .bg-app-picked {
    background-color: var(--color-app-picked);
  }
  .bg-app-raised {
    background-color: var(--color-app-raised);
  }
  .bg-app-sunk {
    background-color: var(--color-app-sunk);
  }
  .bg-app-surface {
    background-color: var(--color-app-surface);
  }
  .bg-bubble {
    background-color: var(--color-bubble);
  }
  .bg-bubble-chip {
    background-color: var(--color-bubble-chip);
  }
  .bg-clay-bg {
    background-color: var(--color-clay-bg);
  }
  .bg-error {
    background-color: var(--color-error);
  }
  .bg-indigo-bg {
    background-color: var(--color-indigo-bg);
  }
  .bg-lead-bg {
    background-color: var(--color-lead-bg);
  }
  .bg-ochre-surface {
    background-color: var(--color-ochre-surface);
  }
  .bg-pine {
    background-color: var(--color-pine);
  }
  .bg-pine-bg {
    background-color: var(--color-pine-bg);
  }
  .bg-pine-surface {
    background-color: var(--color-pine-surface);
  }
  .bg-plum-bg {
    background-color: var(--color-plum-bg);
  }
  .bg-rose {
    background-color: var(--color-rose);
  }
  .bg-scrim\/70 {
    background-color: color-mix(in srgb, #343839 70%, transparent);
    @supports (color: color-mix(in lab, red, red)) {
      background-color: color-mix(in oklab, var(--color-scrim) 70%, transparent);
    }
  }
  .bg-slate-bg {
    background-color: var(--color-slate-bg);
  }
  .bg-transparent {
    background-color: transparent;
  }
  .bg-linear-to-b {
    --tw-gradient-position: to bottom;
    @supports (background-image: linear-gradient(in lab, red, red)) {
      --tw-gradient-position: to bottom in oklab;
    }
    background-image: linear-gradient(var(--tw-gradient-stops));
  }
  .from-transparent {
    --tw-gradient-from: transparent;
    --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
  }
  .to-app-surface {
    --tw-gradient-to: var(--color-app-surface);
    --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
  }
  .fill-app-ink\/90 {
    fill: color-mix(in srgb, #1a1d1e 90%, transparent);
    @supports (color: color-mix(in lab, red, red)) {
      fill: color-mix(in oklab, var(--color-app-ink) 90%, transparent);
    }
  }
  .fill-app-surface {
    fill: var(--color-app-surface);
  }
  .fill-current {
    fill: currentcolor;
  }
  .fill-on-fill {
    fill: var(--color-on-fill);
  }
  .fill-pine {
    fill: var(--color-pine);
  }
  .object-contain {
    object-fit: contain;
  }
  .p-0 {
    padding: var(--spacing-0);
  }
  .p-4 {
    padding: var(--spacing-4);
  }
  .p-8 {
    padding: var(--spacing-8);
  }
  .p-12 {
    padding: var(--spacing-12);
  }
  .p-16 {
    padding: var(--spacing-16);
  }
  .p-20 {
    padding: var(--spacing-20);
  }
  .p-28 {
    padding: var(--spacing-28);
  }
  .px-4 {
    padding-inline: var(--spacing-4);
  }
  .px-6 {
    padding-inline: var(--spacing-6);
  }
  .px-8 {
    padding-inline: var(--spacing-8);
  }
  .px-12 {
    padding-inline: var(--spacing-12);
  }
  .px-16 {
    padding-inline: var(--spacing-16);
  }
  .px-20 {
    padding-inline: var(--spacing-20);
  }
  .px-28 {
    padding-inline: var(--spacing-28);
  }
  .px-60 {
    padding-inline: var(--spacing-60);
  }
  .py-2 {
    padding-block: var(--spacing-2);
  }
  .py-4 {
    padding-block: var(--spacing-4);
  }
  .py-6 {
    padding-block: var(--spacing-6);
  }
  .py-8 {
    padding-block: var(--spacing-8);
  }
  .py-12 {
    padding-block: var(--spacing-12);
  }
  .py-16 {
    padding-block: var(--spacing-16);
  }
  .py-20 {
    padding-block: var(--spacing-20);
  }
  .py-28 {
    padding-block: var(--spacing-28);
  }
  .py-48 {
    padding-block: var(--spacing-48);
  }
  .pt-12 {
    padding-top: var(--spacing-12);
  }
  .pt-16 {
    padding-top: var(--spacing-16);
  }
  .pt-20 {
    padding-top: var(--spacing-20);
  }
  .pt-28 {
    padding-top: var(--spacing-28);
  }
  .pr-20 {
    padding-right: var(--spacing-20);
  }
  .pr-28 {
    padding-right: var(--spacing-28);
  }
  .pb-8 {
    padding-bottom: var(--spacing-8);
  }
  .pb-20 {
    padding-bottom: var(--spacing-20);
  }
  .pb-28 {
    padding-bottom: var(--spacing-28);
  }
  .pl-8 {
    padding-left: var(--spacing-8);
  }
  .pl-12 {
    padding-left: var(--spacing-12);
  }
  .pl-36 {
    padding-left: var(--spacing-36);
  }
  .text-center {
    text-align: center;
  }
  .text-left {
    text-align: left;
  }
  .text-right {
    text-align: right;
  }
  .align-bottom {
    vertical-align: bottom;
  }
  .align-middle {
    vertical-align: middle;
  }
  .align-text-bottom {
    vertical-align: text-bottom;
  }
  .align-top {
    vertical-align: top;
  }
  .text-body {
    font-size: var(--text-body);
    line-height: var(--tw-leading, var(--text-body--line-height));
  }
  .text-card {
    font-size: var(--text-card);
  }
  .text-display {
    font-size: var(--text-display);
  }
  .text-headline1 {
    font-size: var(--text-headline1);
  }
  .text-headline2 {
    font-size: var(--text-headline2);
  }
  .text-headline3 {
    font-size: var(--text-headline3);
  }
  .text-hero {
    font-size: var(--text-hero);
  }
  .text-meta {
    font-size: var(--text-meta);
  }
  .text-sub {
    font-size: var(--text-sub);
  }
  .leading-\[1\.2\] {
    --tw-leading: 1.2;
    line-height: 1.2;
  }
  .leading-none {
    --tw-leading: 1;
    line-height: 1;
  }
  .leading-snug {
    --tw-leading: var(--leading-snug);
    line-height: var(--leading-snug);
  }
  .leading-tight {
    --tw-leading: var(--leading-tight);
    line-height: var(--leading-tight);
  }
  .font-black {
    --tw-font-weight: var(--font-weight-black);
    font-weight: var(--font-weight-black);
  }
  .font-bold {
    --tw-font-weight: var(--font-weight-bold);
    font-weight: var(--font-weight-bold);
  }
  .font-extrabold {
    --tw-font-weight: var(--font-weight-extrabold);
    font-weight: var(--font-weight-extrabold);
  }
  .font-extralight {
    --tw-font-weight: var(--font-weight-extralight);
    font-weight: var(--font-weight-extralight);
  }
  .font-light {
    --tw-font-weight: var(--font-weight-light);
    font-weight: var(--font-weight-light);
  }
  .font-medium {
    --tw-font-weight: var(--font-weight-medium);
    font-weight: var(--font-weight-medium);
  }
  .font-normal {
    --tw-font-weight: var(--font-weight-normal);
    font-weight: var(--font-weight-normal);
  }
  .font-semibold {
    --tw-font-weight: var(--font-weight-semibold);
    font-weight: var(--font-weight-semibold);
  }
  .font-thin {
    --tw-font-weight: var(--font-weight-thin);
    font-weight: var(--font-weight-thin);
  }
  .tracking-tight {
    --tw-tracking: var(--tracking-tight);
    letter-spacing: var(--tracking-tight);
  }
  .break-words {
    overflow-wrap: break-word;
  }
  .wrap-anywhere {
    overflow-wrap: anywhere;
  }
  .break-keep {
    word-break: keep-all;
  }
  .whitespace-nowrap {
    white-space: nowrap;
  }
  .whitespace-pre-line {
    white-space: pre-line;
  }
  .whitespace-pre-wrap {
    white-space: pre-wrap;
  }
  .text-app-ink {
    color: var(--color-app-ink);
  }
  .text-app-ink2 {
    color: var(--color-app-ink2);
  }
  .text-app-ink3 {
    color: var(--color-app-ink3);
  }
  .text-app-line2 {
    color: var(--color-app-line2);
  }
  .text-app-surface {
    color: var(--color-app-surface);
  }
  .text-clay {
    color: var(--color-clay);
  }
  .text-error {
    color: var(--color-error);
  }
  .text-indigo {
    color: var(--color-indigo);
  }
  .text-ochre {
    color: var(--color-ochre);
  }
  .text-on-bright {
    color: var(--color-on-bright);
  }
  .text-on-fill {
    color: var(--color-on-fill);
  }
  .text-pine {
    color: var(--color-pine);
  }
  .text-pine-bg {
    color: var(--color-pine-bg);
  }
  .text-pine-ink {
    color: var(--color-pine-ink);
  }
  .text-plum {
    color: var(--color-plum);
  }
  .text-rose {
    color: var(--color-rose);
  }
  .text-rose-ink {
    color: var(--color-rose-ink);
  }
  .text-slate {
    color: var(--color-slate);
  }
  .lowercase {
    text-transform: lowercase;
  }
  .line-through {
    text-decoration-line: line-through;
  }
  .underline {
    text-decoration-line: underline;
  }
  .opacity-0 {
    opacity: 0%;
  }
  .opacity-40 {
    opacity: 40%;
  }
  .opacity-70 {
    opacity: 70%;
  }
  .opacity-100 {
    opacity: 100%;
  }
  .shadow-float {
    --tw-shadow: 0 0 16px 0 var(--tw-shadow-color, rgb(23 190 217 / 0.35));
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .shadow-modal {
    --tw-shadow: 0 12px 40px -8px var(--tw-shadow-color, rgb(58 60 54 / 0.3));
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .shadow-none {
    --tw-shadow: 0 0 #0000;
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .ring {
    --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .ring-0 {
    --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .outline {
    outline-style: var(--tw-outline-style);
    outline-width: 1px;
  }
  .filter {
    filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
  }
  .transition-colors {
    transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .transition-opacity {
    transition-property: opacity;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .transition-transform {
    transition-property: transform, translate, scale, rotate;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .outline-none {
    --tw-outline-style: none;
    outline-style: none;
  }
  .select-none {
    -webkit-user-select: none;
    user-select: none;
  }
  .select-text {
    -webkit-user-select: text;
    user-select: text;
  }
  .peer-data-\[state\=checked\]\:font-medium:is(:where(.peer)[data-state="checked"] ~ *) {
    --tw-font-weight: var(--font-weight-medium);
    font-weight: var(--font-weight-medium);
  }
  .placeholder\:text-app-ink3::placeholder {
    color: var(--color-app-ink3);
  }
  .after\:absolute::after {
    content: var(--tw-content);
    position: absolute;
  }
  .after\:inset-y-0::after {
    content: var(--tw-content);
    inset-block: var(--spacing-0);
  }
  .after\:right-0::after {
    content: var(--tw-content);
    right: var(--spacing-0);
  }
  .after\:left-0::after {
    content: var(--tw-content);
    left: var(--spacing-0);
  }
  .after\:w-2::after {
    content: var(--tw-content);
    width: var(--spacing-2);
  }
  .after\:bg-app-line3::after {
    content: var(--tw-content);
    background-color: var(--color-app-line3);
  }
  .after\:opacity-0::after {
    content: var(--tw-content);
    opacity: 0%;
  }
  .last\:mb-0:last-child {
    margin-bottom: var(--spacing-0);
  }
  @media (hover: hover) {
    .hover\:border-app-line2:hover {
      border-color: var(--color-app-line2);
    }
  }
  .hover\:border-app-line2.preview-hover {
    border-color: var(--color-app-line2);
  }
  @media (hover: hover) {
    .hover\:border-app-line3:hover {
      border-color: var(--color-app-line3);
    }
  }
  .hover\:border-app-line3.preview-hover {
    border-color: var(--color-app-line3);
  }
  @media (hover: hover) {
    .hover\:bg-app-sunk:hover {
      background-color: var(--color-app-sunk);
    }
  }
  .hover\:bg-app-sunk.preview-hover {
    background-color: var(--color-app-sunk);
  }
  @media (hover: hover) {
    .hover\:bg-pine-surface:hover {
      background-color: var(--color-pine-surface);
    }
  }
  .hover\:bg-pine-surface.preview-hover {
    background-color: var(--color-pine-surface);
  }
  @media (hover: hover) {
    .hover\:text-app-ink:hover {
      color: var(--color-app-ink);
    }
  }
  .hover\:text-app-ink.preview-hover {
    color: var(--color-app-ink);
  }
  @media (hover: hover) {
    .hover\:text-app-ink2:hover {
      color: var(--color-app-ink2);
    }
  }
  .hover\:text-app-ink2.preview-hover {
    color: var(--color-app-ink2);
  }
  @media (hover: hover) {
    .hover\:opacity-90:hover {
      opacity: 90%;
    }
  }
  .hover\:opacity-90.preview-hover {
    opacity: 90%;
  }
  @media (hover: hover) {
    .hover\:opacity-100:hover {
      opacity: 100%;
    }
  }
  .hover\:opacity-100.preview-hover {
    opacity: 100%;
  }
  @media (hover: hover) {
    .hover\:after\:opacity-100:hover::after {
      content: var(--tw-content);
      opacity: 100%;
    }
  }
  .hover\:after\:opacity-100.preview-hover::after {
    content: var(--tw-content);
    opacity: 100%;
  }
  .focus\:ring-2:focus {
    --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .focus-visible\:opacity-100:focus-visible {
    opacity: 100%;
  }
  .focus-visible\:after\:opacity-100:focus-visible::after {
    content: var(--tw-content);
    opacity: 100%;
  }
  .active\:bg-app-line:active {
    background-color: var(--color-app-line);
  }
  .active\:bg-app-line.preview-pressed {
    background-color: var(--color-app-line);
  }
  .active\:bg-app-sunk:active {
    background-color: var(--color-app-sunk);
  }
  .active\:bg-app-sunk.preview-pressed {
    background-color: var(--color-app-sunk);
  }
  .active\:bg-pine-bg:active {
    background-color: var(--color-pine-bg);
  }
  .active\:bg-pine-bg.preview-pressed {
    background-color: var(--color-pine-bg);
  }
  .active\:opacity-70:active {
    opacity: 70%;
  }
  .active\:opacity-70.preview-pressed {
    opacity: 70%;
  }
  .active\:opacity-80:active {
    opacity: 80%;
  }
  .active\:opacity-80.preview-pressed {
    opacity: 80%;
  }
  .disabled\:pointer-events-none:disabled {
    pointer-events: none;
  }
  .disabled\:cursor-default:disabled {
    cursor: default;
  }
  .disabled\:opacity-40:disabled {
    opacity: 40%;
  }
  @media (hover: hover) {
    .disabled\:hover\:border-app-line2:disabled:hover {
      border-color: var(--color-app-line2);
    }
  }
  .disabled\:hover\:border-app-line2:disabled.preview-hover {
    border-color: var(--color-app-line2);
  }
  @media (hover: hover) {
    .disabled\:hover\:bg-app-surface:disabled:hover {
      background-color: var(--color-app-surface);
    }
  }
  .disabled\:hover\:bg-app-surface:disabled.preview-hover {
    background-color: var(--color-app-surface);
  }
  @media (hover: hover) {
    .disabled\:hover\:bg-transparent:disabled:hover {
      background-color: transparent;
    }
  }
  .disabled\:hover\:bg-transparent:disabled.preview-hover {
    background-color: transparent;
  }
  @media (hover: hover) {
    .disabled\:hover\:opacity-40:disabled:hover {
      opacity: 40%;
    }
  }
  .disabled\:hover\:opacity-40:disabled.preview-hover {
    opacity: 40%;
  }
  .data-\[highlighted\]\:bg-app-sunk[data-highlighted] {
    background-color: var(--color-app-sunk);
  }
  .data-\[state\=checked\]\:translate-x-\[19px\][data-state="checked"] {
    --tw-translate-x: 19px;
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .data-\[state\=checked\]\:translate-x-\[22px\][data-state="checked"] {
    --tw-translate-x: 22px;
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .data-\[state\=checked\]\:border-app-ink[data-state="checked"] {
    border-color: var(--color-app-ink);
  }
  .data-\[state\=checked\]\:bg-app-ink[data-state="checked"] {
    background-color: var(--color-app-ink);
  }
  .data-\[state\=checked\]\:bg-pine[data-state="checked"] {
    background-color: var(--color-pine);
  }
  @media (hover: hover) {
    .not-disabled\:data-\[state\=checked\]\:hover\:opacity-90:not(:disabled)[data-state="checked"]:hover {
      opacity: 90%;
    }
  }
  .not-disabled\:data-\[state\=checked\]\:hover\:opacity-90:not(:disabled)[data-state="checked"].preview-hover {
    opacity: 90%;
  }
  .data-\[state\=open\]\:bg-app-sunk[data-state="open"] {
    background-color: var(--color-app-sunk);
  }
  .data-\[state\=open\]\:text-app-ink3[data-state="open"] {
    color: var(--color-app-ink3);
  }
  .data-\[state\=unchecked\]\:translate-x-\[3px\][data-state="unchecked"] {
    --tw-translate-x: 3px;
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .data-\[state\=unchecked\]\:bg-app-line2[data-state="unchecked"] {
    background-color: var(--color-app-line2);
  }
  @media (hover: hover) {
    .not-disabled\:data-\[state\=unchecked\]\:hover\:bg-app-line3:not(:disabled)[data-state="unchecked"]:hover {
      background-color: var(--color-app-line3);
    }
  }
  .not-disabled\:data-\[state\=unchecked\]\:hover\:bg-app-line3:not(:disabled)[data-state="unchecked"].preview-hover {
    background-color: var(--color-app-line3);
  }
  @media (width >= 40rem) {
    .sm\:max-w-\[400px\] {
      max-width: 400px;
    }
    .sm\:max-w-\[560px\] {
      max-width: 560px;
    }
    .sm\:max-w-\[860px\] {
      max-width: 860px;
    }
    .sm\:max-w-\[calc\(100vw-160px\)\] {
      max-width: calc(100vw - 160px);
    }
    .sm\:max-w-lg {
      max-width: var(--container-lg);
    }
    .sm\:flex-row {
      flex-direction: row;
    }
    .sm\:items-start {
      align-items: flex-start;
    }
    .sm\:justify-end {
      justify-content: flex-end;
    }
    .sm\:gap-28 {
      gap: var(--spacing-28);
    }
    .sm\:text-left {
      text-align: left;
    }
  }
  .dark\:border-app-line2:where([data-theme='dark'], [data-theme='dark'] *) {
    border-color: var(--color-app-line2);
  }
  @media (hover: hover) {
    .group-hover\:opacity-100:is(:where(.group):hover *) {
      opacity: 100%;
    }
  }
  .group-hover\:opacity-100:is(:where(.group).preview-hover *) {
    opacity: 100%;
  }
  @media (hover: hover) {
    .not-disabled\:group-hover\:border-app-line3:not(:disabled):is(:where(.group):hover *) {
      border-color: var(--color-app-line3);
    }
  }
  .not-disabled\:group-hover\:border-app-line3:not(:disabled):is(:where(.group).preview-hover *) {
    border-color: var(--color-app-line3);
  }
  .\[\&_svg\]\:pointer-events-none svg {
    pointer-events: none;
  }
  .\[\&_svg\]\:shrink-0 svg {
    flex-shrink: 0;
  }
  .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-16 svg:not([class*='size-']) {
    width: var(--spacing-16);
    height: var(--spacing-16);
  }
}
:root {
  color-scheme: light;
}
:root[data-theme='dark'] {
  color-scheme: dark;
  --color-app-bar: #14181a;
  --color-app-bg: #1a1e20;
  --color-app-surface: #232829;
  --color-app-sunk: #151819;
  --color-app-raised: #2f3537;
  --color-app-picked: #3a4245;
  --color-app-ink: #e8ecee;
  --color-app-ink2: #adb4b7;
  --color-app-ink3: #949b9e;
  --color-app-line: #2e3436;
  --color-app-line2: #3f464a;
  --color-app-line3: #565e62;
  --color-on-fill: #0f1213;
  --color-on-bright: #0f1213;
  --color-bubble: #60c5d8;
  --color-bubble-chip: #35a0b4;
  --color-select: #2c4c53;
  --color-pine: #60c5d8;
  --color-pine-ink: #4a9aa9;
  --color-pine-surface: #16292d;
  --color-pine-bg: #1d3a3f;
  --color-rose: #f58aae;
  --color-rose-ink: #d98aa8;
  --color-rose-bg: #4d2b39;
  --color-ochre: #d9a441;
  --color-ochre-bg: #3a2f16;
  --color-error: #ff6b6b;
  --color-error-bg: #41201f;
  --color-ochre-line: #574726;
  --color-ochre-surface: #2e2716;
  --color-scrim: #080a0b;
  --shadow-float: 0 0 16px 0 rgb(96 197 216 / 0.25);
  --color-clay: #d99570;
  --color-clay-bg: #3a2a22;
  --color-plum: #b98fb9;
  --color-plum-bg: #332633;
  --color-indigo: #8aa9cf;
  --color-indigo-bg: #232f3f;
  --color-slate: #9fadba;
  --color-slate-bg: #2a3138;
  --color-lead-bg: #272c2d;
}
.focus-ring:focus-visible, .focus-ring-within:focus-within {
  outline: none;
  box-shadow: 0 0 0 2px var(--color-app-surface), 0 0 0 4px var(--color-pine);
}
html, body, #root {
  height: 100%;
}
html[data-os='mac'] .app-bar {
  padding-left: 80px;
}
html[data-page='styleguide'] #root {
  height: auto;
  min-height: 100%;
}
body {
  margin: 0;
  background: var(--color-app-bg);
  color: var(--color-app-ink);
  font-family: var(--font-sans);
  font-size: var(--text-body);
  line-height: var(--text-body--line-height);
  font-weight: 400;
  -webkit-font-smoothing: antialiased;
  user-select: none;
  cursor: default;
}
@layer base {
  button:not(:disabled) {
    cursor: pointer;
  }
}
.text-behind {
  color: transparent;
  caret-color: var(--color-app-ink);
}
.text-behind::selection {
  background-color: var(--color-select);
}
.pick-react:hover {
  border-color: var(--color-pine);
  background: var(--color-pine-bg);
}
.pick-react:active {
  background: var(--color-pine-surface);
}
@property --tw-translate-x {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-translate-y {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-translate-z {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-rotate-x {
  syntax: "*";
  inherits: false;
}
@property --tw-rotate-y {
  syntax: "*";
  inherits: false;
}
@property --tw-rotate-z {
  syntax: "*";
  inherits: false;
}
@property --tw-skew-x {
  syntax: "*";
  inherits: false;
}
@property --tw-skew-y {
  syntax: "*";
  inherits: false;
}
@property --tw-border-style {
  syntax: "*";
  inherits: false;
  initial-value: solid;
}
@property --tw-gradient-position {
  syntax: "*";
  inherits: false;
}
@property --tw-gradient-from {
  syntax: "<color>";
  inherits: false;
  initial-value: #0000;
}
@property --tw-gradient-via {
  syntax: "<color>";
  inherits: false;
  initial-value: #0000;
}
@property --tw-gradient-to {
  syntax: "<color>";
  inherits: false;
  initial-value: #0000;
}
@property --tw-gradient-stops {
  syntax: "*";
  inherits: false;
}
@property --tw-gradient-via-stops {
  syntax: "*";
  inherits: false;
}
@property --tw-gradient-from-position {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0%;
}
@property --tw-gradient-via-position {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 50%;
}
@property --tw-gradient-to-position {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-leading {
  syntax: "*";
  inherits: false;
}
@property --tw-font-weight {
  syntax: "*";
  inherits: false;
}
@property --tw-tracking {
  syntax: "*";
  inherits: false;
}
@property --tw-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-shadow-color {
  syntax: "*";
  inherits: false;
}
@property --tw-shadow-alpha {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-inset-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-inset-shadow-color {
  syntax: "*";
  inherits: false;
}
@property --tw-inset-shadow-alpha {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-ring-color {
  syntax: "*";
  inherits: false;
}
@property --tw-ring-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-inset-ring-color {
  syntax: "*";
  inherits: false;
}
@property --tw-inset-ring-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-ring-inset {
  syntax: "*";
  inherits: false;
}
@property --tw-ring-offset-width {
  syntax: "<length>";
  inherits: false;
  initial-value: 0px;
}
@property --tw-ring-offset-color {
  syntax: "*";
  inherits: false;
  initial-value: #fff;
}
@property --tw-ring-offset-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-outline-style {
  syntax: "*";
  inherits: false;
  initial-value: solid;
}
@property --tw-blur {
  syntax: "*";
  inherits: false;
}
@property --tw-brightness {
  syntax: "*";
  inherits: false;
}
@property --tw-contrast {
  syntax: "*";
  inherits: false;
}
@property --tw-grayscale {
  syntax: "*";
  inherits: false;
}
@property --tw-hue-rotate {
  syntax: "*";
  inherits: false;
}
@property --tw-invert {
  syntax: "*";
  inherits: false;
}
@property --tw-opacity {
  syntax: "*";
  inherits: false;
}
@property --tw-saturate {
  syntax: "*";
  inherits: false;
}
@property --tw-sepia {
  syntax: "*";
  inherits: false;
}
@property --tw-drop-shadow {
  syntax: "*";
  inherits: false;
}
@property --tw-drop-shadow-color {
  syntax: "*";
  inherits: false;
}
@property --tw-drop-shadow-alpha {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-drop-shadow-size {
  syntax: "*";
  inherits: false;
}
@property --tw-content {
  syntax: "*";
  initial-value: "";
  inherits: false;
}
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@layer properties {
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
    *, ::before, ::after, ::backdrop {
      --tw-translate-x: 0;
      --tw-translate-y: 0;
      --tw-translate-z: 0;
      --tw-rotate-x: initial;
      --tw-rotate-y: initial;
      --tw-rotate-z: initial;
      --tw-skew-x: initial;
      --tw-skew-y: initial;
      --tw-border-style: solid;
      --tw-gradient-position: initial;
      --tw-gradient-from: #0000;
      --tw-gradient-via: #0000;
      --tw-gradient-to: #0000;
      --tw-gradient-stops: initial;
      --tw-gradient-via-stops: initial;
      --tw-gradient-from-position: 0%;
      --tw-gradient-via-position: 50%;
      --tw-gradient-to-position: 100%;
      --tw-leading: initial;
      --tw-font-weight: initial;
      --tw-tracking: initial;
      --tw-shadow: 0 0 #0000;
      --tw-shadow-color: initial;
      --tw-shadow-alpha: 100%;
      --tw-inset-shadow: 0 0 #0000;
      --tw-inset-shadow-color: initial;
      --tw-inset-shadow-alpha: 100%;
      --tw-ring-color: initial;
      --tw-ring-shadow: 0 0 #0000;
      --tw-inset-ring-color: initial;
      --tw-inset-ring-shadow: 0 0 #0000;
      --tw-ring-inset: initial;
      --tw-ring-offset-width: 0px;
      --tw-ring-offset-color: #fff;
      --tw-ring-offset-shadow: 0 0 #0000;
      --tw-outline-style: solid;
      --tw-blur: initial;
      --tw-brightness: initial;
      --tw-contrast: initial;
      --tw-grayscale: initial;
      --tw-hue-rotate: initial;
      --tw-invert: initial;
      --tw-opacity: initial;
      --tw-saturate: initial;
      --tw-sepia: initial;
      --tw-drop-shadow: initial;
      --tw-drop-shadow-color: initial;
      --tw-drop-shadow-alpha: 100%;
      --tw-drop-shadow-size: initial;
      --tw-content: "";
    }
  }
}

/*
 * 애니메이션 타이밍. **이 파일이 원본이다.** 전부 조정 대상이다.
 * 자바스크립트 안에 타이밍 값을 넣지 않는다. 넣으면 기획·디자인 담당이 손대기 어려워진다.
 */
:root {
  --motion-card-in: 200ms; /* 카드 등장 — fade + 8px 위로 */
  --motion-card-out: 180ms; /* 카드 접힘 */
  --motion-crew-stagger: 400ms; /* 크루 소집 카드 간격 — 한 장씩 순차 */
  --motion-status-hold: 3s; /* 상태 문구 최소 유지 — 깜빡임 방지 */
  --motion-tick: 1s; /* 경과 시간 갱신 */
  --motion-count-flash: 1.2s; /* 숫자 강조 지속 */
  --motion-modal: 220ms; /* 모달 열림 — 올라오며 살짝 커진다 */
  --motion-modal-out: 140ms; /* 모달 닫힘 — 여는 것보다 짧게 */
  --motion-banner: 240ms; /* 전역 배너 등장 */
  --motion-scroll: 300ms; /* 스크롤 이동 */
  --motion-pane: 220ms; /* 왼쪽 목록 접힘·펴짐 — 모달 열림과 같은 결 */
  --motion-screen: 260ms; /* 화면이 갈릴 때. 구도가 통째로 바뀌므로 모달보다 조금 길게 */
  --motion-shimmer: 2.2s; /* 기다리는 글자 위를 빛이 한 번 지나가는 시간 */
  --motion-sparkle: 1.22s; /* 별 배지 한 바퀴 — 랜딩과 같은 값 */
  /*
   * 기다리는 표시가 한 번 숨쉬는 시간. **도는 것보다 느리다** —
   * 도는 것은 「지금 일하는 중」이고 이것은 「줄을 서 있다」다
   */
  --motion-wait: 2.4s;
  --motion-spin: 900ms; /* 버튼 로딩 표시 한 바퀴 */

  /* 시동(화면 00) — 연결을 확인하는 동안 */
  --motion-boot-min: 400ms; /* 보이면 이만큼은 남긴다 — 번쩍 스치지 않게 */
  --motion-boot-timeout: 10s; /* 넘으면 화면 01 로 보낸다. 무한 스피너를 만들지 않는다 */

  /* 스위치 손잡이가 트랙을 가로지르는 시간. `transition-transform` 을 쓰면
   * Tailwind 자체 기본값(150ms)이 컴포넌트 안에 숨어버려 여기서 손댈 수 없다 */
  --motion-switch: 150ms;
  --motion-progress: 400ms; /* 진행 막대가 값만큼 채워지는 시간 */

  /* 툴팁 — 마우스를 올리고 뜨기까지의 지연과, 뜰 때의 등장 시간은 다르다 */
  --motion-tooltip-delay: 300ms;
  --motion-tooltip: 150ms;

  /* 팝업이 열릴 때 트리거의 화살표가 도는 시간 */
  --motion-chevron: 180ms;

  /* 토스트 — 등장·머무는 시간·닫힘을 각각 따로 둔다. 닫힘은 등장보다 짧게 (모달과 같은 이유) */
  --motion-toast-in: 200ms;
  --motion-toast-out: 180ms;
  --motion-toast-duration: 5000ms;

  --ease-out: cubic-bezier(0, 0, 0.2, 1);
}

/*
 * 모달이 열릴 때 아래에서 올라오며 살짝 커진다.
 *
 * **`transform` 에 가운데 맞춤을 쓰지 않는다.** Tailwind v4 의 `translate-x-[-50%]` 는
 * `transform` 이 아니라 **`translate` 속성**으로 만들어진다.
 *
 * ```
 * translate-x-[-50%]  →  translate: -50% -50%
 * ```
 *
 * 두 속성은 따로 적용되어 **더해진다.** 그래서 keyframes 에서 `transform:
 * translate(-50%,-50%)` 를 쓰면 −100% 로 밀려 여는 순간 왼쪽 위에서 시작하고,
 * 애니메이션이 끝나면 `translate` 만 남아 가운데로 튄다. 실제로 그렇게 만들었다가 고쳤다.
 *
 * `transform` 에는 **더할 값만** 담는다. 가운데 맞춤은 `translate` 가 알아서 한다.
 *
 * shadcn 이 데려온 `animate-in`·`zoom-in-95` 는 그 클래스를 만들어주는 플러그인이
 * 없어서 죽어 있었다. 플러그인을 더하지 않고 여기에 직접 쓴다 — 타이밍이 변수로
 * 나와 있어야 기획·디자인 담당이 손댈 수 있다.
 */
@keyframes modal-in {
  from {
    opacity: 0;
    transform: translateY(12px) scale(0.98);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* 닫을 때는 짧게. 미련 없이 사라지는 편이 낫다 */
@keyframes modal-out {
  from {
    opacity: 1;
    transform: none;
  }
  to {
    opacity: 0;
    transform: translateY(6px) scale(0.99);
  }
}

.modal-in[data-state='open'] {
  animation: modal-in var(--motion-modal) var(--ease-out);
}

.modal-in[data-state='closed'] {
  animation: modal-out var(--motion-modal-out) var(--ease-out);
}

/* 뒤 배경은 흐려지기만 한다. 같이 움직이면 볼 곳이 둘이 된다 */
@keyframes scrim-in {
  from {
    opacity: 0;
  }
}

.scrim-in[data-state='open'] {
  animation: scrim-in var(--motion-modal) var(--ease-out);
}

/*
 * 버튼을 누른 직후의 표시. **이것은 대기 화면이 아니다.**
 *
 * **모든 대기에는 끝이 보여야 한다** — 숫자가 하나는 있어야 한다.
 * 그래서 이 표시는 누름과 응답 사이의 짧은 순간에만 쓴다. 몇 초를 넘길 일이면
 * 화면이 대기 카드로 넘어가야 한다 — 거기에는 누가·얼마나·멈출 수 있는지가 있다.
 *
 * Tailwind 의 `animate-spin` 을 쓰지 않는다. 그쪽은 시간이 Tailwind 안에 박혀 있어
 * 기획·디자인 담당이 손댈 수 없다.
 */
@keyframes app-spin {
  to {
    transform: rotate(360deg);
  }
}

.app-spin {
  animation: app-spin var(--motion-spin) linear infinite;
}

/*
 * 스위치. `ui/switch.tsx` 가 붙인다.
 *
 * **`transform` 이 아니라 `translate` 를 지켜본다.** Tailwind v4 의
 * `translate-x-[22px]` 는 `transform` 이 아니라 `translate` 속성으로 만들어진다 —
 * 처음에 `transition: transform` 으로 써서 애니메이션이 한 번도 안 돌았다.
 * 모달에서 겪은 것과 같은 함정이다.
 */
.switch-thumb-transition {
  transition: translate var(--motion-switch) var(--ease-out);
}

/* 트랙 색도 같은 시간으로 움직인다. Tailwind `transition-colors` 는 시간이
 * 유틸리티 안에 고정돼 있어 여기서 손댈 수 없다 */
.switch-track-transition {
  transition: background-color var(--motion-switch) var(--ease-out);
}

/* 진행 막대가 값만큼 채워지는 움직임. `Progress.tsx` 가 붙인다 */
/*
 * 팝업 트리거의 화살표. 열리면 반 바퀴 돌아 위를 가리킨다 —
 * 팝업이 트리거를 가려도 지금 열려 있다는 것이 보인다.
 *
 * 상태는 Radix 가 트리거에 붙이는 `data-state` 를 타고 내려온다. 트리거를 부르는
 * 쪽이 만들므로(`asChild`) 화살표만 표시해 두고 여기서 잡는다.
 *
 * **`transform` 이 아니라 `rotate` 를 지켜본다.** Tailwind v4 의 `rotate-180` 은
 * `transform` 이 아닌 **별개의 `rotate` 속성**을 쓴다 — 모달과 스위치에서 이미
 * 두 번 겪은 함정이라 여기서도 속성을 맞춘다.
 */
.dropdown-chevron {
  transition: rotate var(--motion-chevron) var(--ease-out);
}

/*
 * 바로 밑 자식으로 좁히지 않는다. 지금은 트리거의 직계지만, 누가 감싸는 요소를
 * 하나 두면 **아무 소리 없이 안 돌게 된다** — 눈으로만 잡히는 고장이다.
 */
[data-state='open'] .dropdown-chevron {
  rotate: 180deg;
}

.progress-bar-fill {
  transition: width var(--motion-progress) var(--ease-out);
}

/* 툴팁 등장. `Tooltip.tsx` 가 붙인다. 지연(delayDuration)은 자바스크립트 쪽이라
 * `--motion-tooltip-delay` 를 `motionMs()` 로 읽어서 쓴다 */
@keyframes tooltip-in {
  from {
    opacity: 0;
    transform: translateY(4px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

.tooltip-in[data-state='delayed-open'],
.tooltip-in[data-state='instant-open'] {
  animation: tooltip-in var(--motion-tooltip) var(--ease-out);
}

/*
 * 토스트 등장·닫힘. `Toast.tsx` 가 붙인다. 머무는 시간(duration)은 자바스크립트
 * 쪽이라 `--motion-toast-duration` 을 `motionMs()` 로 읽어서 쓴다.
 *
 * 화면 위에 뜨므로 위에서 내려온다. 아래에서 올라오면 어디서 왔는지가 어긋난다.
 */
@keyframes toast-in {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* 사라질 때는 온 길로 되돌아간다 */
@keyframes toast-out {
  from {
    opacity: 1;
    transform: none;
  }
  to {
    opacity: 0;
    transform: translateY(-8px);
  }
}

.toast-in[data-state='open'] {
  animation: toast-in var(--motion-toast-in) var(--ease-out);
}

.toast-in[data-state='closed'] {
  animation: toast-out var(--motion-toast-out) var(--ease-out);
}

/*
 * 좌우 패널이 접히고 펴지는 것. **칸 폭 자체를 흘린다** —
 * 안의 것을 밀어내거나 겹치지 않고 칸이 줄어들며 함께 잘린다.
 *
 * 접힌 칸을 DOM 에서 빼면 애니메이션이 걸릴 대상이 없어져 뚝 끊긴다. 그래서
 * 남겨 두고 폭만 0 으로 보내며, 그동안 초점이 들어가지 않게 하는 것은
 * `inert` 가 맡는다 (`WorkspaceShell`).
 *
 * 폭을 끌어 조절하는 동안에는 이 전환을 끈다 — 손을 따라오지 않고 뒤늦게
 * 따라와 끈적해진다.
 */
.pane-shift {
  transition: grid-template-columns var(--motion-pane) var(--ease-out);
}

.pane-shift[data-dragging='true'] {
  transition: none;
}

/*
 * 화면이 갈릴 때. **떠오르며 나타난다** — 나가는 화면은 붙잡지 않는다.
 *
 * 나가는 것과 들어오는 것을 겹치려면 둘을 같은 자리에 함께 두어야 하는데,
 * 화면은 `h-full` 로 창 높이를 다 쓰므로 겹쳐 놓으면 스크롤과 초점이 엉킨다.
 * **들어오는 쪽만 흐르게 해도 「톡」이 사라진다** — 갈아치우는 순간이 눈에
 * 걸리는 것이지 나가는 그림이 아쉬운 것이 아니다.
 *
 * 올라오는 거리를 4px 로 둔다. 시동 화면에서 다음 화면으로 갈 때 구도가 통째로
 * 바뀌는데, 크게 움직이면 그 변화까지 함께 커 보인다.
 */
.screen-in {
  animation: screen-in var(--motion-screen) var(--ease-out);
}

@keyframes screen-in {
  from {
    opacity: 0;
    transform: translateY(4px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/*
 * 기다리는 글자. **빛이 글자 위를 지나간다.**
 *
 * 무한 스피너만 도는 화면을 만들지 않는다는 규칙(원칙 5)은 지키고 있지만,
 * 정지한 글자는 「멈춘 것」과 구별되지 않는다. 글자 자체가 흐르면 **답을 기다리는
 * 중임을 글자가 말한다** — 경과 시간과 함께 두 가지로 답한다.
 *
 * **포인트색 계열로 흐른다.** 회색으로 흐르면 그냥 흐린 글자가 밝아졌다 어두워지는
 * 것처럼 보인다 — 색이 있어야 「무언가 돌아가는 중」으로 읽힌다.
 *
 * 바탕은 `pine-ink`(그리는 자리용, 흰 카드에서 5.4)이고 지나가는 띠가 `pine` 이다.
 * **밝은 화면에서 띠가 지나가는 순간은 대비가 낮다** — 그 자리는 곁딸린 상태 줄이고
 * 띠는 한 글자 위에 잠깐만 머문다. 읽어서 판단하는 글이 아니다.
 *
 * 색은 `theme.css` 의 토큰을 그대로 읽는다. 여기서 값을 정하지 않는다.
 * `background-clip: text` 로 글자 모양만 남기므로 `color` 는 비운다.
 */
.text-shimmer {
  background: linear-gradient(
    100deg,
    var(--color-pine-ink) 30%,
    var(--color-pine) 50%,
    var(--color-pine-ink) 70%
  );
  background-size: 250% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  animation: text-shimmer var(--motion-shimmer) linear infinite;
}

@keyframes text-shimmer {
  from {
    background-position: 150% 0;
  }
  to {
    background-position: -50% 0;
  }
}

/*
 * 별 배지. **랜딩의 `spin-twice` 를 그대로 옮겼다** — 90도씩 두 번 샥샥 돌고
 * 0.5초 멈춘다. 네 방향 대칭이라 180도에서 0도로 돌아가도 튀지 않는다.
 *
 * 원은 회전 대칭이라 배지를 통째로 돌려도 별만 도는 것처럼 보인다.
 */
.sparkle-spin {
  animation: sparkle-spin var(--motion-sparkle) infinite;
  /*
   * **돌 것이라고 미리 알린다.** 없으면 20px 짜리 그림을 프레임마다 다시 그리고,
   * 그 사이 반올림이 조금씩 달라 동그라미 테두리가 떤다. 멈추는 대목에서
   * 그것이 「덜컹」으로 보였다
   */
  will-change: transform;
  transform-origin: 50% 50%;
}

/*
 * **시작과 끝을 모두 눅인다.** 앞서는 `ease-out` 뿐이라 멈춰 있다가 최고 속도로
 * 튀어나갔다 — 그 첫 프레임이 「튄다」로 읽힌다. `ease-in-out` 은 붙었다 떨어지듯
 * 시작해서 같은 두 번 회전을 유지하면서 그 턱만 없앤다.
 */
@keyframes sparkle-spin {
  0% {
    transform: rotate(0deg);
    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  }
  25% {
    transform: rotate(90deg);
  }
  34% {
    transform: rotate(90deg);
    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  }
  59% {
    transform: rotate(180deg);
  }
  100% {
    transform: rotate(180deg);
  }
}

/*
 * prefers-reduced-motion 을 존중한다.
 * 대상 연령을 고려하면 움직임에 민감한 사용자가 있을 수 있다.
 */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/*
 * 기다리는 표시. **돌지 않고 숨쉰다.**
 *
 * 도는 것은 이 앱에서 「지금 일하는 중」이라는 뜻이라(시동 화면 · 답 기다리는 줄),
 * 줄을 서 있는 자리에 도는 표시를 두면 거짓이 된다. 대신 천천히 옅어졌다
 * 돌아온다 — 멈춘 것과는 구별되고, 일하는 것으로는 안 읽힌다.
 */
.wait-pulse {
  animation: wait-pulse var(--motion-wait) var(--ease-out) infinite;
}

@keyframes wait-pulse {
  50% {
    opacity: 0.35;
  }
}


  .with-scroll-bars-hidden {
   overflow: hidden !important;
   padding-right: 0px !important;
  }
  body[data-scroll-locked] {
    overflow: hidden !important;
    overscroll-behavior: contain;
    position: relative !important;
    padding-left: 0px;
    padding-top: 0px;
    padding-right: 0px;
    margin-left:0;
    margin-top:0;
    margin-right: 0px !important;
    
  }
  
  .right-scroll-bar-position {
    right: 0px !important;
  }
  
  .width-before-scroll-bar {
    margin-right: 0px !important;
  }
  
  .right-scroll-bar-position .right-scroll-bar-position {
    right: 0 !important;
  }
  
  .width-before-scroll-bar .width-before-scroll-bar {
    margin-right: 0 !important;
  }
  
  body[data-scroll-locked] {
    --removed-body-scroll-bar-size: 0px;
  }


      /*
        **창에 직접 붙인다.** 앞에서는 뜨는 순간 이런 화면이 보였다 —

        ```text
        로고가 맨 위에 띠처럼 붙는다   `.splash` 의 100% 가 기댈 높이가 없다
        그 아래가 흰 판이다            웹뷰 기본색. 어두운 쪽에서 번쩍한다
        ```

        `theme.css` 가 `html·body·#root` 에 높이를 주지만 **그것은 자바스크립트가
        부르는 파일**이라(dev 서버) 창보다 늦게 온다.

        **그렇다고 그 규칙을 여기 옮겨 적지 않는다.** 이 `<style>` 은 `<body>` 안이라
        head 의 스타일시트보다 뒤에 와서 굵기가 같으면 이긴다 — `theme.css` 만
        고치면 조용히 안 먹는 사본이 된다 (review b).

        `position: fixed; inset: 0` 은 부모의 높이를 안 본다. 기댈 것이 없으니
        베낄 것도 없다. React 가 이 자리를 대체하면 함께 사라진다.
      */
      .splash {
        position: fixed;
        inset: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        background: #f2f5f6;
      }
      :root[data-theme='dark'] .splash {
        background: #1a1e20;
      }
      .splash svg {
        height: 26px;
      }
      /* color-pine 의 밝은 쪽 · 어두운 쪽 */
      .splash .brand {
        fill: #17bed9;
      }
      :root[data-theme='dark'] .splash .brand {
        fill: #60c5d8;
      }
    