/* ========================================================================== 새벽청과 — 메인 스타일시트 판(board)이 이 페이지의 주인공이다. 사진은 색을 담당하고, UI 는 색을 쓰지 않는다. .band-dark 는 '새벽'(경매장·제철 띠·납품), .band-light 는 '낮'(설명·상품)이다. 반전은 아래 두 클래스가 토큰을 재정의하는 규칙이다. ========================================================================== */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; scroll-behavior: smooth; overflow-x: hidden; background: var(--dark-surface); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body { min-height: 100dvh; font-family: var(--font-body); font-size: var(--step-0); line-height: var(--leading-normal); background: var(--surface); color: var(--ink); word-break: keep-all; overflow-wrap: break-word; overflow-x: hidden; } img { display: block; max-width: 100%; } button, input, select, textarea { font: inherit; color: inherit; } a { color: inherit; } h1, h2, h3 { font-weight: 600; line-height: var(--leading-tight); letter-spacing: -0.015em; text-wrap: balance; } .mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; } .wrap { width: min(100% - 2 * var(--pad-inline), var(--container)); margin-inline: auto; } /* ── 두 체제 ────────────────────────────────────────────────────── */ .band-light { --band-surface: var(--surface); --band-surface-2: var(--surface-2); --band-surface-3: var(--surface-3); --band-line: var(--line); --band-line-strong: var(--line-strong); --band-ink: var(--ink); --band-ink-muted: var(--ink-muted); --band-ink-faint: var(--ink-faint); --band-accent: var(--accent); --band-accent-hover: var(--accent-hover); --band-accent-ink: var(--accent-ink); --band-accent-wash: var(--accent-wash); } .band-dark { --band-surface: var(--dark-surface); --band-surface-2: var(--dark-surface-2); --band-surface-3: var(--dark-surface-3); --band-line: var(--dark-line); --band-line-strong: var(--dark-line-strong); --band-ink: var(--dark-ink); --band-ink-muted: var(--dark-ink-muted); --band-ink-faint: var(--dark-ink-faint); --band-accent: var(--dark-accent); --band-accent-hover: var(--dark-accent-hover); --band-accent-ink: var(--dark-accent-ink); --band-accent-wash: var(--dark-accent-wash); } .band { position: relative; background: var(--band-surface); color: var(--band-ink); } .band > .wrap { padding-block: var(--space-8); } /* ── 접근성 ─────────────────────────────────────────────────────── */ .skip-link { position: fixed; top: var(--space-3); left: var(--space-3); z-index: 200; padding: var(--space-2) var(--space-3); background: var(--ink); color: var(--surface); text-decoration: none; transform: translateY(-250%); transition: transform var(--dur-quick) var(--ease); } .skip-link:focus-visible { transform: translateY(0); } :where(a, button, [tabindex]):focus-visible { outline: 2px solid var(--band-accent, var(--accent)); outline-offset: 3px; } /* ── 헤더 ───────────────────────────────────────────────────────── */ .site-head { position: sticky; top: 0; z-index: 100; background: var(--dark-surface); border-bottom: 1px solid var(--dark-line); color: var(--dark-ink); } .head-inner { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); min-height: 56px; min-width: 0; } .wordmark { font-weight: 600; text-decoration: none; white-space: nowrap; flex-shrink: 0; } .wordmark-han { color: var(--dark-ink-faint); font-size: var(--step--1); margin-left: 2px; } .nav { display: flex; gap: clamp(var(--space-3), 2.4vw, var(--space-5)); min-width: 0; } .nav a { color: var(--dark-ink-muted); font-size: var(--step--1); text-decoration: none; white-space: nowrap; padding-block: var(--space-2); transition: color var(--dur-quick) var(--ease); } .nav a:hover { color: var(--dark-accent); } .head-meta { font-size: var(--step--1); color: var(--dark-ink-faint); white-space: nowrap; flex-shrink: 0; } /* ── 히어로 ─────────────────────────────────────────────────────── */ .hero { overflow: clip; } /* 사진은 판 뒤로 물러난다. 판이 읽히지 않으면 이 페이지는 실패다 */ .hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 42%; opacity: 0.64; } .hero::after { content: ""; position: absolute; inset: 0; background: linear-gradient( to bottom, color-mix(in srgb, var(--dark-surface) 40%, transparent) 0%, color-mix(in srgb, var(--dark-surface) 82%, transparent) 40%, var(--dark-surface) 86% ); pointer-events: none; } .hero-inner { position: relative; z-index: 1; } .hero-meta { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-2) var(--space-3); font-size: var(--step--1); color: var(--band-ink-muted); padding-bottom: var(--space-3); border-bottom: 1px solid var(--band-line-strong); } .hero-meta time { color: var(--band-accent); } .meta-sep { color: var(--band-ink-faint); } .hero h1 { margin-top: var(--space-5); font-size: var(--display); max-width: 12ch; } .hero-lead { margin-top: var(--space-4); max-width: var(--measure); font-size: var(--step-1); color: var(--band-ink-muted); line-height: var(--leading-loose); } /* ── 시세판 ─────────────────────────────────────────────────────── */ .board { margin-top: var(--space-6); width: 100%; border-collapse: collapse; text-align: left; font-size: var(--step--1); } .board th, .board td { padding: var(--space-3) var(--space-2); border-bottom: 1px solid var(--band-line); vertical-align: baseline; } .board th:first-child, .board td:first-child { padding-left: 0; } .board th:last-child, .board td:last-child { padding-right: 0; } .board thead th { border-bottom: 1px solid var(--band-line-strong); color: var(--band-ink-faint); font-weight: 400; white-space: nowrap; } .board tbody th { font-size: var(--step-0); font-weight: 600; white-space: nowrap; } .board-select { min-height: 40px; border: 0; background: transparent; color: inherit; font-weight: 600; cursor: pointer; text-align: left; } .board tbody tr:has(.board-select[aria-pressed="true"]) { background: color-mix(in srgb, var(--band-accent-wash) 72%, transparent); box-shadow: inset 2px 0 var(--band-accent); } .board-select[aria-pressed="true"] { color: var(--band-accent); } .board td { color: var(--band-ink-muted); } .c-num { text-align: right; white-space: nowrap; } .unit { margin-left: 2px; color: var(--band-ink-faint); font-size: 0.85em; } .price { color: var(--band-ink); font-size: var(--step-0); } /* 등락은 색으로만 말하지 않는다 — 기호가 먼저다. 색맹 사용자에게 빨강/파랑만 남는 판은 판이 아니다 */ .delta { color: var(--band-ink-faint); } .delta.up, .delta.down { color: var(--band-ink-muted); } .blank { color: var(--band-ink-faint); } .lot-inspector { margin-top: var(--space-4); border-block: 1px solid var(--band-line-strong); } .lot-inspector-head { display: flex; justify-content: space-between; gap: var(--space-3); padding-block: var(--space-2); border-bottom: 1px solid var(--band-line); color: var(--band-ink-faint); font-size: var(--step--1); } .lot-inspector-head p:last-child { color: var(--band-accent); } .lot-inspector-body { display: grid; grid-template-columns: minmax(13rem, 1.4fr) minmax(0, 3fr); gap: var(--space-5); padding-block: var(--space-4); } .lot-title p:first-child { font-size: var(--step-2); font-weight: 600; } .lot-title p:last-child { margin-top: var(--space-1); color: var(--band-ink-muted); font-size: var(--step--1); } .lot-spec { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); } .lot-spec > div { min-width: 0; padding-left: var(--space-3); border-left: 1px solid var(--band-line); } .lot-spec dt { color: var(--band-ink-faint); font-size: var(--step--1); } .lot-spec dd { margin-top: var(--space-2); color: var(--band-ink); font-family: var(--font-mono); font-size: var(--step--1); font-variant-numeric: tabular-nums; } .board-notes { margin-top: var(--space-5); list-style: none; display: grid; gap: var(--space-3); max-width: 62ch; } .board-notes li { padding-left: var(--space-4); position: relative; font-size: var(--step--1); color: var(--band-ink-muted); line-height: var(--leading-loose); } .board-notes li::before { content: "—"; position: absolute; left: 0; color: var(--band-ink-faint); } .board-notes strong { color: var(--band-ink); font-weight: 600; } .note-demo { margin-top: var(--space-2); padding-top: var(--space-3); border-top: 1px solid var(--band-line); color: var(--band-ink-faint); } /* ── 섹션 공통 ──────────────────────────────────────────────────── */ .eyebrow { font-family: var(--font-mono); font-size: var(--step--1); color: var(--band-accent); margin-bottom: var(--space-3); } .band h2 { font-size: var(--step-3); max-width: 20ch; } .section-lead, .lead { margin-top: var(--space-4); max-width: var(--measure); color: var(--band-ink-muted); font-size: var(--step-1); line-height: var(--leading-loose); } .split { display: grid; gap: var(--space-5); } @media (min-width: 900px) { .split { grid-template-columns: 4fr 8fr; gap: var(--space-7); align-items: start; } } /* ── 경로 ───────────────────────────────────────────────────────── */ .route { margin-top: var(--space-6); list-style: none; border-top: 1px solid var(--band-line-strong); } .route li { display: grid; gap: var(--space-1) var(--space-4); padding-block: var(--space-4); border-bottom: 1px solid var(--band-line); } @media (min-width: 760px) { .route li { grid-template-columns: 3rem 14rem 1fr; align-items: baseline; } } .route-num { font-size: var(--step--1); color: var(--band-ink-faint); } .route h3 { font-size: var(--step-1); } .route li > p:last-child { color: var(--band-ink-muted); font-size: var(--step--1); line-height: var(--leading-loose); } /* 우리가 서는 자리만 표시한다 — 다섯 중 하나만 강조해야 강조가 된다 */ .route-here { background: var(--band-accent-wash); box-shadow: inset 3px 0 0 0 var(--band-accent); padding-left: var(--space-4); } .route-here .route-num, .route-here h3 { color: var(--band-accent); } /* ── 용어 ───────────────────────────────────────────────────────── */ .terms { border-top: 1px solid var(--band-line-strong); } .terms > div { padding-block: var(--space-4); border-bottom: 1px solid var(--band-line); } .terms dt { font-size: var(--step-1); font-weight: 600; display: flex; align-items: baseline; gap: var(--space-3); flex-wrap: wrap; } .term-en { font-size: var(--step--1); font-weight: 400; color: var(--band-ink-faint); } .terms dd { margin-top: var(--space-2); color: var(--band-ink-muted); max-width: 48ch; line-height: var(--leading-loose); } .terms strong { color: var(--band-ink); font-weight: 600; } /* ── 제철 띠 ────────────────────────────────────────────────────── */ .season-scroll { margin-top: var(--space-3); overflow-x: auto; } .season-control { margin-top: var(--space-5); display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); padding-bottom: var(--space-2); border-bottom: 1px solid var(--band-line-strong); } .season-buttons { display: flex; } .season-buttons button { min-height: 40px; padding-inline: var(--space-3); border: 1px solid var(--band-line-strong); background: transparent; color: var(--band-ink-muted); cursor: pointer; font-size: var(--step--1); } .season-buttons button + button { border-left: 0; } .season-buttons button:hover { color: var(--band-ink); border-color: var(--band-accent); } .season-status { color: var(--band-ink-muted); font-size: var(--step--1); text-align: right; } .season-status output { color: var(--band-accent); } .season { width: 100%; min-width: 34rem; border-collapse: collapse; font-size: var(--step--1); text-align: center; } .season th, .season td { border: 1px solid var(--band-line); padding: var(--space-2) 0; } .season thead th { color: var(--band-ink-faint); font-weight: 400; font-family: var(--font-mono); border-bottom: 1px solid var(--band-line-strong); } .season tbody th { text-align: left; padding-inline: 0 var(--space-3); border-left: 0; white-space: nowrap; font-weight: 500; } .season-item { text-align: left; width: 6rem; } .season td.on { background: var(--band-ink-muted); } /* 이번 달 — 배경 대신 테두리로 표시한다. 칸이 찬 것과 이번 달이 겹쳐도 둘 다 읽혀야 하기 때문이다 */ .season .is-focus { border-inline: 2px solid var(--band-accent); } .season thead .is-focus { color: var(--band-accent); border-top: 2px solid var(--band-accent); } .season-note { margin-top: var(--space-4); font-size: var(--step--1); color: var(--band-ink-faint); line-height: var(--leading-loose); max-width: var(--measure); } /* ── 오늘 들어온 것 ─────────────────────────────────────────────── */ .today-grid { margin-top: var(--space-6); display: grid; gap: var(--space-5); } @media (min-width: 820px) { .today-grid { grid-template-columns: repeat(2, 1fr); gap: var(--space-6); /* 상자 사진과 접사는 비율이 다르다. 늘려서 높이를 맞추면 짧은 쪽 아래에 300px 짜리 빈 칸이 생긴다(실측). 각자 제 높이로 두고 캡션을 사진에 붙인다 */ align-items: start; } .today-card-wide { grid-column: 1 / -1; display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-5); align-items: center; } } .today-card img { width: 100%; height: auto; border: 1px solid var(--band-line); } .today-card figcaption { padding-top: var(--space-3); } .card-name { font-size: var(--step-1); font-weight: 600; display: flex; align-items: baseline; gap: var(--space-3); flex-wrap: wrap; } .card-origin { font-size: var(--step--1); font-weight: 400; color: var(--band-ink-faint); } .card-spec { margin-top: var(--space-3); display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); font-size: var(--step--1); padding-block: var(--space-2); border-block: 1px solid var(--band-line); } .card-spec > div { display: flex; gap: var(--space-2); } .card-spec dt { color: var(--band-ink-faint); } .card-note { margin-top: var(--space-3); color: var(--band-ink-muted); font-size: var(--step--1); line-height: var(--leading-loose); max-width: 42ch; } /* ── 납품 · 문의 ───────────────────────────────────────────────── */ .ws-rows, .contact-rows { margin-top: var(--space-5); border-top: 1px solid var(--band-line-strong); } .ws-rows > div, .contact-rows > div { display: grid; gap: var(--space-1) var(--space-4); padding-block: var(--space-3); border-bottom: 1px solid var(--band-line); } @media (min-width: 640px) { .ws-rows > div, .contact-rows > div { grid-template-columns: 7rem 1fr; } } .ws-rows dt, .contact-rows dt { font-size: var(--step--1); color: var(--band-ink-faint); } .ws-rows dd, .contact-rows dd { color: var(--band-ink-muted); line-height: var(--leading-loose); } .contact-rows a { color: var(--band-accent); } .lead strong { color: var(--band-ink); font-weight: 600; } .order-draft { margin-top: var(--space-6); padding-block: var(--space-4); border-block: 1px solid var(--band-line-strong); } .order-draft-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-3); } .order-draft-head h3 { font-size: var(--step-2); } .order-draft-head p { color: var(--band-ink-faint); font-size: var(--step--1); } .order-controls { margin-top: var(--space-4); display: grid; grid-template-columns: minmax(0, 3fr) minmax(8rem, 1fr); gap: var(--space-3); } .order-controls label { display: grid; gap: var(--space-2); color: var(--band-ink-faint); font-size: var(--step--1); } .order-controls select, .order-controls input { min-width: 0; min-height: 44px; padding-inline: var(--space-3); border: 1px solid var(--band-line-strong); background: var(--band-surface-2); color: var(--band-ink); } .order-summary { margin-top: var(--space-4); display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border-top: 1px solid var(--band-line); } .order-summary > div { padding-block: var(--space-3); border-bottom: 1px solid var(--band-line); } .order-summary > div + div { padding-left: var(--space-3); border-left: 1px solid var(--band-line); } .order-summary dt, .order-fine, .order-status { color: var(--band-ink-faint); font-size: var(--step--1); } .order-summary dd { margin-top: var(--space-1); color: var(--band-ink); } .order-fine { margin-top: var(--space-3); line-height: var(--leading-loose); } .order-actions { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-4); } .order-status { min-height: 1.7em; margin-top: var(--space-3); color: var(--band-ink-muted); } .contact-fine { margin-top: var(--space-4); font-size: var(--step--1); color: var(--band-ink-faint); line-height: var(--leading-loose); max-width: var(--measure); } .btn { display: inline-block; min-height: 44px; margin-top: var(--space-5); padding: var(--space-3) var(--space-5); border: 0; background: var(--band-accent); color: var(--band-accent-ink); font-weight: 600; text-decoration: none; white-space: nowrap; cursor: pointer; } .btn:hover { background: var(--band-accent-hover); } /* ── 푸터 ───────────────────────────────────────────────────────── */ .foot-inner { display: grid; gap: var(--space-2); } .foot-name { font-weight: 600; } .foot-line { color: var(--band-ink-muted); font-size: var(--step--1); } .foot-fine { margin-top: var(--space-4); padding-top: var(--space-3); border-top: 1px solid var(--band-line); font-size: var(--step--1); color: var(--band-ink-faint); line-height: var(--leading-loose); max-width: 62ch; } /* ── 좁은 화면 ──────────────────────────────────────────────────── */ @media (max-width: 720px) { .head-inner { flex-wrap: wrap; padding-block: var(--space-2); row-gap: var(--space-2); } .nav { order: 3; width: 100%; justify-content: space-between; gap: var(--space-2); border-top: 1px solid var(--dark-line); padding-top: var(--space-2); } .head-meta { display: none; } /* 판은 일곱 칸이라 좁은 화면에서 표로 두면 못 읽는다. 행마다 라벨을 붙인 카드로 접는다 — 가로 스크롤로 미루지 않는다 */ .board thead { display: none; } .board, .board tbody, .board tr, .board th, .board td { display: block; } .board tr { padding-block: var(--space-4); border-bottom: 1px solid var(--band-line); } .board tbody th { font-size: var(--step-1); padding: 0; border: 0; } .board-select { min-height: 44px; } .board td { padding: var(--space-1) 0; border: 0; text-align: left; display: flex; justify-content: space-between; gap: var(--space-3); } .board td::before { content: attr(data-label); color: var(--band-ink-faint); font-family: var(--font-body); } .lot-inspector-body, .lot-spec, .order-controls, .order-summary { grid-template-columns: 1fr; } .lot-spec > div { padding: var(--space-2) 0; border-left: 0; border-top: 1px solid var(--band-line); } .season-control { align-items: flex-start; flex-direction: column; } .season-buttons button { min-height: 44px; } .season-status { text-align: left; } .order-summary > div + div { padding-left: 0; border-left: 0; } .today-card-wide { display: block; } } /* ── 모션을 줄이는 설정 ─────────────────────────────────────────── */ @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } /* ── 인쇄 — 판은 종이에서도 판이어야 한다 ─────────────────────── */ @media print { .site-head, .skip-link, .btn, .season-control, .order-controls, .order-actions, .order-status, .hero-bg { display: none; } .hero::after { display: none; } .band { background: #fff; color: #000; } .board { break-inside: avoid; } }