designpaca/apps/site/public/work/hannam-jari/styles/landing.css
Yun Chan 8e3cdb0d3b
Some checks are pending
ci / build (push) Waiting to run
feat(site): rework 19 marketing showcases for composition diversity
Measured convergence before: split hero 13/19, top-bar nav 19/19,
one-line notice footer 14/19, body Pretendard 17/21, 10 similarity
pairs above 0.78. Each showcase got a pre-assigned hero family, nav
form, footer form, type pair, background, accent hue, radius, motion
grammar and material from outputs/rework-2026-10-06/plan.md; direction
cards and the chosen reason are recorded in every design.md.

After: 0 similarity warnings, 19 distinct display faces, 7 hero
families, 5 nav forms, 5 footer forms, no scroll reveals, 5 showcases
with SVG filter materials. Example contact values replace bracket
placeholders under the existing fictional-brand notices. Thumbnails,
OG images, card copy and three e2e assertions updated; dead CSS in
dure-enrollment and hannam-jari removed; similarity.mjs learns the new
font families.
2026-10-06 16:55:50 +09:00

1570 lines
29 KiB
CSS

/* 한남자리 공개 화면 — 토큰은 tokens.css 한 곳에서만 온다. 이 파일에 색·radius 리터럴을 두지 않는다. */
html {
scroll-padding-top: calc(var(--header-height) + 1rem);
}
/* ── 상단 바(브랜드 + 항목 4 + 좁은 화면 메뉴 버튼). 긴 페이지라 고정하되 바탕이 단색이므로 흐림 없이 불투명 ── */
.site-header {
position: sticky;
z-index: 80;
top: 0;
display: flex;
min-height: var(--header-height);
align-items: center;
justify-content: space-between;
gap: 2rem;
padding: 0 max(1rem, calc((100% - 88rem) / 2));
background: var(--surface);
border-bottom: 1px solid var(--line);
}
.brand-link {
display: flex;
align-items: center;
gap: 0.7rem;
text-decoration: none;
}
.brand-mark {
display: grid;
width: 2.25rem;
height: 2.25rem;
place-items: center;
color: var(--white);
background: var(--accent);
border-radius: var(--radius);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
letter-spacing: 0.04em;
}
.brand-lockup strong,
.brand-lockup small {
display: block;
}
.brand {
font-size: 0.9375rem;
line-height: 1.2;
}
.brand-lockup small {
margin-top: 0.1rem;
color: var(--ink-3);
font-size: 0.8125rem;
line-height: 1.2;
}
.site-nav {
display: flex;
align-items: center;
gap: 1.5rem;
}
.site-nav a {
display: inline-flex;
min-height: 2.75rem;
align-items: center;
font-size: 0.875rem;
font-weight: var(--weight-strong);
text-decoration: none;
white-space: nowrap;
border-bottom: 2px solid transparent;
transition: border-color var(--transition);
}
.site-nav a:hover,
.site-nav a:focus-visible {
border-bottom-color: var(--accent);
}
.menu-button {
display: none;
width: 2.75rem;
height: 2.75rem;
padding: 0.85rem 0.7rem;
background: transparent;
border: 1px solid var(--line);
border-radius: var(--radius);
}
.menu-button i {
display: block;
height: 2px;
margin: 0.3rem 0;
background: var(--ink);
}
.eyebrow {
margin: 0 0 0.75rem;
color: var(--accent-deep);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
}
/* ── 히어로: 격자·목록. 표제는 작게, 조건 띠가 격자 위 ── */
.listing-hero {
width: var(--content);
margin: 0 auto;
padding: 1.5rem 0 0;
}
.hero-head {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 2rem;
padding-bottom: 1rem;
}
.hero-head h1 {
max-width: var(--measure);
margin: 0;
font-family: var(--font-display);
font-size: 1.25rem;
font-weight: var(--weight-strong);
line-height: 1.3;
letter-spacing: -0.01em;
}
.masthead-note {
display: flex;
flex: 0 0 auto;
gap: 1.5rem;
margin: 0;
}
.masthead-note div {
display: flex;
gap: 0.5rem;
font-size: 0.8125rem;
line-height: 1.5;
}
.masthead-note dt {
color: var(--ink-3);
}
.masthead-note dd {
margin: 0;
font-weight: var(--weight-strong);
}
.brief-dock {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr)) minmax(12rem, auto);
gap: 0 1.25rem;
align-items: end;
padding: 1rem 1.25rem 0.9rem;
background: var(--surface-raised);
border: 1px solid var(--line);
border-top: 2px solid var(--ink);
border-radius: var(--radius) var(--radius) 0 0;
}
.dock-field > span:first-child {
display: block;
margin-bottom: 0.2rem;
color: var(--ink-3);
font-size: var(--brief-label-size);
font-weight: var(--weight-strong);
line-height: 1.4;
}
.dock-field input,
.dock-field select {
width: 100%;
min-height: 2.75rem;
padding: 0.45rem 0;
color: var(--ink);
background: transparent;
border: 0;
border-bottom: 1px solid var(--ink-3);
border-radius: 0;
font-size: var(--brief-input-size);
font-variant-numeric: tabular-nums;
font-weight: var(--weight-strong);
transition: border-color var(--transition);
}
.dock-field input:hover,
.dock-field select:hover,
.dock-field input:focus-visible,
.dock-field select:focus-visible {
border-bottom-color: var(--accent);
}
.input-suffix {
position: relative;
display: block;
}
.input-suffix input {
padding-right: 2.75rem;
}
.input-suffix i {
position: absolute;
right: 0;
bottom: 0.8rem;
color: var(--ink-3);
font-size: 0.8125rem;
font-style: normal;
}
.dock-actions {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 1rem;
padding-bottom: 0.1rem;
}
.save-button {
min-height: 2.75rem;
padding: 0.5rem 0.25rem;
color: var(--ink-2);
background: transparent;
border: 0;
font-size: 0.8125rem;
font-weight: var(--weight-strong);
text-decoration: underline;
text-underline-offset: 0.25rem;
}
.save-button:hover {
color: var(--accent-deep);
}
.condition-note {
grid-column: 1 / -1;
margin: 0.6rem 0 0;
color: var(--ink-3);
font-size: 0.8125rem;
line-height: 1.5;
}
/* 격자: 간격 대신 1px 선으로 칸을 나눈다(R2). 칸마다 캡션이 위, 1:1 사진이 아래 */
.listing-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 1px;
background: var(--line);
border: 1px solid var(--line);
border-top: 0;
border-radius: 0 0 var(--radius) var(--radius);
overflow: hidden;
}
.candidate-option {
position: relative;
display: grid;
min-width: 0;
padding: 1rem 1.25rem 1.25rem;
color: var(--ink);
background: var(--surface-raised);
transition: background-color var(--transition), box-shadow var(--transition);
}
.candidate-option:hover {
background: var(--white);
box-shadow: inset 0 0 0 1px var(--ink-3);
}
.candidate-option.is-selected {
background: var(--white);
box-shadow: inset 0 0 0 2px var(--accent);
}
.candidate-button {
position: absolute;
z-index: 1;
inset: 0;
width: 100%;
height: 100%;
padding: 0;
background: transparent;
border: 0;
border-radius: 0;
}
.candidate-button:focus-visible {
outline-offset: -3px;
}
.candidate-content {
pointer-events: none;
}
.candidate-caption {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
gap: 0.15rem 0.6rem;
align-items: baseline;
align-content: start;
min-height: 3.75rem;
margin-bottom: 0.75rem;
}
.candidate-index {
color: var(--ink-3);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
font-variant-numeric: tabular-nums;
}
.candidate-caption strong {
font-size: 1.0625rem;
line-height: 1.3;
}
.candidate-option.is-selected .candidate-caption strong {
color: var(--accent-deep);
}
.candidate-verdict {
grid-column: 2;
color: var(--ink-3);
font-size: 0.8125rem;
line-height: 1.4;
}
.candidate-verdict.is-lead {
color: var(--accent-deep);
font-weight: var(--weight-strong);
}
.candidate-facts {
grid-column: 2;
display: flex;
flex-wrap: wrap;
gap: 0.2rem 0.6rem;
font-size: 0.875rem;
line-height: 1.4;
}
.candidate-facts small {
font-size: inherit;
font-variant-numeric: tabular-nums;
}
.candidate-facts b {
font-weight: var(--weight-strong);
font-variant-numeric: tabular-nums;
}
.candidate-option figure {
position: relative;
display: grid;
margin: 0;
}
.candidate-option figcaption,
.candidate-scene > figcaption,
.image-filmstrip figcaption {
margin-bottom: 0.35rem;
color: var(--ink-3);
font-size: 0.8125rem;
line-height: 1.4;
}
.candidate-media,
.candidate-media picture {
display: block;
height: 100%;
}
.candidate-media {
aspect-ratio: 1;
overflow: hidden;
background: var(--surface-sunken);
}
.candidate-media img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: 55% center;
}
/* 세 번째 칸은 같은 거실 사진을 창가 쪽으로 다르게 잘라 두 번째 사진처럼 쓴다(새 이미지를 만들지 않는다) */
.candidate-media.is-crop-window img {
object-position: 100% 35%;
transform: scale(1.4);
transform-origin: 100% 35%;
}
/* View Transitions: 칸마다 고유 이름을 줘야 재정렬이 따로 움직인다 */
[data-listing="home-1"] {
view-transition-name: listing-1;
}
[data-listing="home-2"] {
view-transition-name: listing-2;
}
[data-listing="home-3"] {
view-transition-name: listing-3;
}
::view-transition {
pointer-events: none;
}
/* 전환 중에는 문서 전체가 히트테스트에서 빠진다(실측: 전환 중 클릭이 html 에 떨어짐). 짧게 끝낸다 */
::view-transition-group(*),
::view-transition-old(*),
::view-transition-new(*) {
animation-duration: 120ms;
animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
}
/* ── 공통 섹션 머리 ── */
.section-heading h2 {
max-width: 24em;
margin: 0;
font-family: var(--font-display);
font-size: clamp(1.5rem, 2.4vw, 2.125rem);
font-weight: var(--weight-strong);
line-height: 1.3;
letter-spacing: -0.02em;
}
.section-heading > p {
max-width: var(--measure);
margin: 1rem 0 0;
color: var(--ink-2);
}
/* ── 브리핑 ── */
.briefing-section {
width: var(--content);
margin: 0 auto;
padding: clamp(4rem, 7vw, 6rem) 0 clamp(3rem, 5vw, 4rem);
}
.briefing-sheet {
margin-top: 2rem;
background: var(--surface-raised);
border: 1px solid var(--line);
border-top: 2px solid var(--ink);
border-radius: var(--radius);
}
.briefing-sheet > header {
display: flex;
min-height: 3.5rem;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 0.5rem 1.5rem;
padding: 0.75rem 1.25rem;
border-bottom: 1px solid var(--line);
}
.briefing-sheet > header span {
color: var(--ink-3);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
}
.briefing-sheet > header strong {
font-size: 0.9375rem;
}
.briefing-empty {
display: grid;
grid-template-columns: 3rem minmax(0, 1fr) auto;
gap: 1.5rem;
align-items: center;
padding: 2rem 1.25rem;
}
.briefing-empty > span,
.group-number {
color: var(--ink-3);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
font-variant-numeric: tabular-nums;
}
.briefing-empty h3 {
margin: 0;
font-size: 1.125rem;
}
.briefing-empty p {
max-width: var(--measure);
margin: 0.35rem 0 0;
color: var(--ink-2);
font-size: 0.9375rem;
}
.briefing-groups {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 1px;
background: var(--line);
}
.briefing-groups section {
min-width: 0;
padding: 1.25rem;
background: var(--surface-raised);
}
.briefing-groups h3 {
margin: 0.4rem 0 0.75rem;
font-size: 1rem;
}
.briefing-groups ul {
margin: 0;
padding: 0;
list-style: none;
}
.briefing-groups li {
padding: 0.75rem 0;
border-top: 1px solid var(--line);
}
.briefing-groups li strong,
.briefing-groups li span,
.briefing-groups li small {
display: block;
}
.briefing-groups li strong {
font-size: 0.9375rem;
}
.briefing-groups li span {
margin-top: 0.15rem;
color: var(--ink-2);
font-size: 0.9375rem;
line-height: 1.6;
}
.briefing-groups li small {
margin-top: 0.3rem;
color: var(--ink-3);
font-size: 0.8125rem;
}
/* ── 비교: 선택한 집 사진(1:1, 캡션 위) + 다섯 조건 ── */
.compare-section {
width: var(--content);
margin: 0 auto;
padding: clamp(3rem, 5vw, 4rem) 0;
}
.compare-heading {
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: space-between;
gap: 1.5rem 3rem;
margin-bottom: 2rem;
}
.unit-switches {
display: flex;
flex-wrap: wrap;
gap: 0.6rem;
}
.unit-switches > div {
display: flex;
border: 1px solid var(--line);
border-radius: var(--radius);
overflow: hidden;
}
.unit-switches button {
min-width: 2.75rem;
min-height: 2.75rem;
padding: 0 0.75rem;
color: var(--ink-2);
background: var(--surface-raised);
border: 0;
border-right: 1px solid var(--line);
font-size: 0.875rem;
font-weight: var(--weight-strong);
transition: background-color var(--transition), color var(--transition);
}
.unit-switches button:last-child {
border-right: 0;
}
.unit-switches button:hover {
color: var(--ink);
background: var(--white);
}
.unit-switches button[aria-pressed="true"] {
color: var(--white);
background: var(--accent);
}
.compare-desk {
display: grid;
grid-template-columns: minmax(0, 26rem) minmax(0, 1fr);
gap: 1px;
background: var(--line);
border: 1px solid var(--line);
border-radius: var(--radius);
overflow: hidden;
}
.candidate-scene {
position: relative;
display: grid;
grid-template-rows: auto auto minmax(0, 1fr);
min-width: 0;
margin: 0;
padding: 1.25rem;
background: var(--surface-raised);
}
.scene-caption {
display: flex;
align-items: baseline;
gap: 0.75rem;
margin-bottom: 0.75rem;
}
.scene-caption > span {
color: var(--ink-3);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
font-variant-numeric: tabular-nums;
}
.scene-caption strong,
.scene-caption small {
display: block;
}
.scene-caption strong {
font-size: 1.0625rem;
}
.scene-caption small {
margin-top: 0.1rem;
color: var(--ink-2);
font-size: 0.875rem;
}
.candidate-scene > img {
width: 100%;
aspect-ratio: 1;
object-fit: cover;
object-position: 53% center;
background: var(--surface-sunken);
transition: opacity var(--transition);
}
.condition-matrix {
display: grid;
grid-template-rows: repeat(5, minmax(0, 1fr));
margin: 0;
background: var(--surface-raised);
}
.condition-matrix > div {
display: grid;
grid-template-columns: 6rem minmax(0, 1fr);
gap: 0.2rem 1rem;
align-content: center;
padding: 0.9rem 1.25rem;
border-bottom: 1px solid var(--line);
}
.condition-matrix > div > dt {
grid-row: 1 / 3;
align-self: center;
}
.condition-matrix > div:last-child {
border-bottom: 0;
}
.condition-matrix dt {
color: var(--ink-3);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
}
.condition-matrix dd {
margin: 0;
font-size: 1.0625rem;
font-weight: var(--weight-strong);
font-variant-numeric: tabular-nums;
}
.condition-matrix .matrix-note {
grid-column: 2;
color: var(--ink-3);
font-size: 0.875rem;
font-weight: var(--weight-body);
}
.condition-matrix .matrix-note.is-adjust {
color: var(--amber);
font-weight: var(--weight-strong);
}
.condition-matrix .matrix-note.is-check {
color: var(--blue);
}
/* ── 서류철: 탭 한 줄 + 패널 ── */
.dossier-section {
width: var(--content);
margin: 0 auto;
padding: clamp(3rem, 5vw, 4rem) 0 clamp(4rem, 7vw, 6rem);
}
.dossier-heading {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 0.5rem 3rem;
align-items: end;
margin-bottom: 1.5rem;
}
.dossier-heading .eyebrow {
grid-column: 1 / -1;
}
.dossier-heading > p:last-child {
margin: 0;
text-align: right;
}
.dossier-heading > p:last-child strong,
.dossier-heading > p:last-child span {
display: block;
}
.dossier-heading > p:last-child strong {
font-size: 0.9375rem;
}
.dossier-heading > p:last-child span {
color: var(--ink-3);
font-size: 0.8125rem;
}
.dossier-shell {
background: var(--surface-raised);
border: 1px solid var(--line);
border-radius: var(--radius);
}
.dossier-tabs {
display: flex;
overflow-x: auto;
border-bottom: 1px solid var(--line);
}
.dossier-tabs button {
min-width: max-content;
min-height: 3.25rem;
padding: 0 1.25rem;
color: var(--ink-2);
background: transparent;
border: 0;
border-bottom: 2px solid transparent;
border-right: 1px solid var(--line);
font-size: 0.9375rem;
font-weight: var(--weight-strong);
transition: color var(--transition), border-color var(--transition);
}
.dossier-tabs button:hover {
color: var(--ink);
}
.dossier-tabs button[aria-selected="true"] {
color: var(--accent-deep);
border-bottom-color: var(--accent);
}
.dossier-pages {
min-width: 0;
}
.dossier-panel {
padding: clamp(1.25rem, 2.5vw, 2rem);
}
.image-filmstrip {
display: grid;
grid-template-columns: repeat(2, minmax(0, 20rem));
gap: 1.5rem;
}
.image-filmstrip figure {
position: relative;
display: grid;
min-width: 0;
margin: 0;
}
.image-filmstrip img {
width: 100%;
aspect-ratio: 1;
object-fit: cover;
background: var(--surface-sunken);
}
.image-filmstrip figure:first-child img {
object-position: 58% center;
}
.image-filmstrip figure:last-child img {
object-position: 56% center;
}
.spec-strip {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 1px;
margin: 1.5rem 0 0;
background: var(--line);
border: 1px solid var(--line);
border-radius: var(--radius);
overflow: hidden;
}
.spec-strip div {
min-width: 0;
padding: 0.75rem 1rem;
background: var(--surface-raised);
}
.spec-strip dt {
color: var(--ink-3);
font-size: 0.8125rem;
}
.spec-strip dd {
margin: 0.15rem 0 0;
font-size: 0.9375rem;
font-weight: var(--weight-strong);
font-variant-numeric: tabular-nums;
}
.decision-columns {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 2rem;
margin-top: 2rem;
}
.decision-columns section {
border-top: 2px solid var(--ink);
}
.decision-columns h3 {
margin: 0.75rem 0;
font-size: 1rem;
}
.decision-columns ul {
margin: 0;
padding: 0;
list-style: none;
}
.decision-columns li {
padding: 0.55rem 0 0.55rem 1.15rem;
border-bottom: 1px solid var(--line);
font-size: 0.9375rem;
}
.decision-columns li::before {
float: left;
margin-left: -1.15rem;
color: var(--accent);
content: "—";
}
.page-heading {
display: grid;
grid-template-columns: 8rem minmax(0, 1fr);
gap: 1rem 2rem;
align-items: start;
padding-bottom: 1.25rem;
border-bottom: 2px solid var(--ink);
}
.page-heading span {
color: var(--ink-3);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
}
.page-heading h3 {
max-width: 24em;
margin: 0;
font-size: clamp(1.25rem, 2vw, 1.5rem);
font-weight: var(--weight-strong);
line-height: 1.3;
}
.page-ledger {
margin: 1.5rem 0 0;
}
.page-ledger div {
display: grid;
grid-template-columns: 11rem minmax(0, 1fr);
gap: 0.25rem 2rem;
padding: 0.9rem 0;
border-bottom: 1px solid var(--line);
}
.page-ledger dt {
color: var(--ink-3);
font-size: 0.875rem;
}
.page-ledger dd {
margin: 0;
font-size: 0.9375rem;
font-weight: var(--weight-strong);
font-variant-numeric: tabular-nums;
}
.review-list {
margin: 1.5rem 0 0;
padding: 0;
list-style: none;
}
.review-list li {
display: grid;
grid-template-columns: 2.5rem minmax(0, 1fr);
gap: 1rem;
padding: 1rem 0;
border-bottom: 1px solid var(--line);
}
.review-list li > span {
color: var(--ink-3);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
}
.review-list strong {
font-size: 0.9375rem;
}
.review-list p,
.location-memo p {
margin: 0.2rem 0 0;
color: var(--ink-2);
font-size: 0.9375rem;
}
.location-memo {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 1px;
margin-top: 1.5rem;
background: var(--line);
border: 1px solid var(--line);
border-radius: var(--radius);
overflow: hidden;
}
.location-memo p {
margin: 0;
padding: 1.25rem;
background: var(--surface-raised);
}
/* ── 푸터: 다음 행동 하나 크게(상담 준비 폼). 절차 셋은 왼쪽, 폼은 오른쪽 밝은 판 ── */
.site-footer {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
grid-template-areas:
"intro form"
"legal legal";
gap: 3rem clamp(3rem, 6vw, 6rem);
padding: clamp(4rem, 7vw, 6rem) max(1rem, calc((100% - 88rem) / 2)) 2rem;
color: var(--ink-inverse);
background: var(--ink);
}
.footer-intro {
grid-area: intro;
min-width: 0;
}
.footer-intro h2 {
max-width: 20em;
margin: 0;
font-family: var(--font-display);
font-size: clamp(1.5rem, 2.4vw, 2.125rem);
font-weight: var(--weight-strong);
line-height: 1.3;
letter-spacing: -0.02em;
}
.handoff-steps {
margin: 2rem 0 0;
padding: 0;
border-top: 1px solid var(--line-dark);
list-style: none;
}
.handoff-steps li {
display: grid;
grid-template-columns: 2.5rem minmax(0, 1fr);
gap: 1rem;
padding: 1rem 0;
border-bottom: 1px solid var(--line-dark);
}
.handoff-steps li > span {
color: var(--accent-soft);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
font-variant-numeric: tabular-nums;
}
.handoff-steps strong {
display: block;
font-size: 1rem;
}
.step-copy {
display: block;
margin-top: 0.2rem;
color: var(--accent-soft);
font-size: 0.9375rem;
line-height: 1.6;
}
.consult-prep {
grid-area: form;
display: grid;
gap: 1rem;
align-content: start;
padding: 1.5rem;
color: var(--ink);
background: var(--surface-raised);
border-radius: var(--radius);
}
.consult-prep h3 {
margin: 0;
font-size: 1.25rem;
line-height: 1.3;
}
.prep-home {
color: var(--ink-2);
font-size: 0.9375rem;
}
.prep-home strong {
color: var(--ink);
}
.prep-options {
display: grid;
gap: 0.5rem;
}
.prep-options label,
.dialog-content label {
display: flex;
min-height: 3rem;
align-items: center;
gap: 0.7rem;
padding: 0.6rem 0.75rem;
background: var(--white);
border: 1px solid var(--line);
border-radius: var(--radius);
font-size: 0.9375rem;
transition: border-color var(--transition);
}
.prep-options label:hover,
.dialog-content label:hover {
border-color: var(--accent);
}
.prep-options input,
.dialog-content input {
width: 1.1rem;
height: 1.1rem;
margin: 0;
accent-color: var(--accent);
}
.handoff-cta {
min-height: 3.25rem;
font-size: 1rem;
}
.prep-note {
color: var(--ink-3);
font-size: 0.8125rem;
}
.footer-legal {
grid-area: legal;
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
gap: 1rem 2.5rem;
align-items: start;
padding-top: 1.5rem;
border-top: 1px solid var(--line-dark);
font-size: 0.8125rem;
}
.footer-brand strong,
.footer-brand span {
display: block;
}
.footer-brand strong {
font-size: 0.9375rem;
}
.footer-brand span {
color: var(--accent-soft);
}
.footer-legal p {
max-width: var(--measure);
margin: 0;
color: var(--accent-soft);
}
.footer-legal nav {
display: flex;
gap: 1.25rem;
}
.footer-legal a {
display: inline-flex;
min-height: 2.75rem;
align-items: flex-start;
text-underline-offset: 0.2rem;
}
/* ── 상담 대화상자 ── */
.consult-dialog {
position: fixed;
inset: 0;
box-sizing: border-box;
width: min(34rem, calc(100% - 2rem));
max-height: calc(100svh - 2rem);
margin: auto;
padding: 0;
overflow: auto;
overscroll-behavior: contain;
color: var(--ink);
background: var(--surface-raised);
border: 1px solid var(--line);
border-radius: var(--radius);
box-shadow: var(--shadow-dialog);
}
html:has(.consult-dialog[open]) {
overflow: hidden;
}
.consult-dialog::backdrop {
background: rgb(var(--accent-rgb) / 0.12);
}
.dialog-shell {
margin: 0;
}
.dialog-shell > header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 1.5rem;
padding: 1.5rem;
border-bottom: 1px solid var(--line);
}
.dialog-shell > header span {
color: var(--ink-3);
font-size: 0.8125rem;
font-weight: var(--weight-strong);
}
.dialog-shell h2 {
margin: 0.25rem 0 0;
font-size: 1.25rem;
line-height: 1.3;
}
.dialog-close {
width: 2.75rem;
height: 2.75rem;
flex: 0 0 auto;
color: var(--ink);
background: transparent;
border: 1px solid var(--line);
border-radius: var(--radius);
font-size: 1.35rem;
}
.dialog-privacy {
margin: 0;
padding: 0.75rem 1.5rem;
color: var(--ink-2);
background: var(--surface);
border-bottom: 1px solid var(--line);
font-size: 0.8125rem;
}
.dialog-content {
display: grid;
gap: 0.6rem;
padding: 1.5rem;
}
.dialog-content > p {
margin: 0 0 0.5rem;
}
.dialog-content ol {
margin: 0;
padding-left: 1.25rem;
}
.dialog-shell > footer {
display: flex;
justify-content: flex-end;
padding: 1rem 1.5rem;
border-top: 1px solid var(--line);
}
.image-fallback {
position: absolute;
inset: 0;
display: grid;
place-items: center;
padding: 1rem;
color: var(--ink-2);
background: var(--surface-sunken);
font-size: 0.875rem;
text-align: center;
}
.no-script {
position: fixed;
z-index: 200;
right: 1rem;
bottom: 1rem;
max-width: 24rem;
padding: 1rem;
color: var(--ink-inverse);
background: var(--ink);
border-left: 3px solid var(--accent);
border-radius: var(--radius);
}
.no-script p {
margin: 0.25rem 0 0;
font-size: 0.875rem;
}
/* ── 반응형 ── */
@media (max-width: 78rem) {
.brief-dock {
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 0.75rem 1.25rem;
}
.dock-actions {
grid-column: 1 / -1;
justify-content: flex-start;
padding-top: 0.5rem;
}
.compare-desk {
grid-template-columns: minmax(0, 24rem) minmax(0, 1fr);
}
}
@media (max-width: 60rem) {
.site-header {
padding: 0 1rem;
}
.menu-button {
display: block;
}
.site-nav {
position: fixed;
z-index: 90;
top: 6.5rem;
right: 0;
bottom: 0;
left: 0;
display: none;
align-items: stretch;
flex-direction: column;
gap: 0;
max-height: calc(100dvh - 6.5rem);
padding: 0.5rem 1rem 1rem;
overflow-y: auto;
overscroll-behavior: contain;
background: var(--surface-raised);
border-bottom: 1px solid var(--line);
}
.site-nav.is-open {
display: flex;
}
.site-nav a {
min-height: 3rem;
padding: 0 0.25rem;
border-bottom: 1px solid var(--line);
}
.hero-head {
flex-direction: column;
align-items: flex-start;
gap: 0.75rem;
}
.masthead-note {
flex-wrap: wrap;
gap: 0.25rem 1.25rem;
}
.listing-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
/* 두 열에서는 점수 순 재정렬(인라인 order)을 끄고 등록 순서를 지킨다 — 홀로 남는 세 번째
칸을 가로 한 줄로 펴야 빈 칸이 생기지 않는데, 그 칸이 중간에 끼면 자동 배치가 구멍을 남긴다 */
.candidate-option {
order: initial !important;
}
.candidate-option:last-child {
grid-column: 1 / -1;
}
.candidate-option:last-child .candidate-content {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
gap: 1rem;
}
.candidate-option:last-child .candidate-caption {
align-content: start;
min-height: 0;
margin-bottom: 0;
}
.briefing-empty {
grid-template-columns: 2.5rem minmax(0, 1fr);
}
.briefing-empty .button {
grid-column: 2;
justify-self: start;
}
.briefing-groups {
grid-template-columns: minmax(0, 1fr);
}
.compare-desk {
grid-template-columns: minmax(0, 1fr);
}
.candidate-scene > img {
max-width: 28rem;
}
.condition-matrix {
grid-template-rows: none;
}
.dossier-heading {
grid-template-columns: minmax(0, 1fr);
}
.dossier-heading > p:last-child {
text-align: left;
}
.site-footer {
grid-template-columns: minmax(0, 1fr);
grid-template-areas:
"intro"
"form"
"legal";
}
.footer-legal {
grid-template-columns: minmax(0, 1fr);
}
}
@media (max-width: 40rem) {
.brand-lockup small {
display: none;
}
.listing-hero {
padding-top: 1rem;
}
.hero-head h1 {
font-size: 1.125rem;
}
.brief-dock {
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.5rem 1rem;
padding: 0.75rem 1rem;
}
.dock-actions {
flex-wrap: wrap;
gap: 0.5rem 1rem;
padding-top: 0.25rem;
}
.dock-actions .button {
flex: 1 1 12rem;
}
.candidate-option {
padding: 0.75rem 0.75rem 1rem;
}
.candidate-caption {
grid-template-columns: minmax(0, 1fr);
min-height: 0;
margin-bottom: 0.5rem;
}
.candidate-caption strong {
font-size: 0.9375rem;
}
.candidate-verdict,
.candidate-facts {
grid-column: 1;
}
.candidate-facts {
font-size: 0.8125rem;
}
.candidate-option figcaption,
.candidate-scene > figcaption,
.image-filmstrip figcaption {
font-size: 0.8125rem;
}
.briefing-empty {
grid-template-columns: minmax(0, 1fr);
padding: 1.5rem 1rem;
}
.briefing-empty > span {
display: none;
}
.briefing-empty .button {
grid-column: 1;
}
.briefing-sheet > header,
.briefing-groups section,
.candidate-scene,
.condition-matrix > div,
.dossier-panel,
.location-memo p,
.consult-prep {
padding-right: 1rem;
padding-left: 1rem;
}
.condition-matrix > div {
grid-template-columns: 5rem minmax(0, 1fr);
}
.image-filmstrip {
grid-template-columns: minmax(0, 1fr);
gap: 1rem;
}
.spec-strip {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.spec-strip div:last-child {
grid-column: 1 / -1;
}
.decision-columns,
.location-memo {
grid-template-columns: minmax(0, 1fr);
}
.page-heading {
grid-template-columns: minmax(0, 1fr);
gap: 0.5rem;
}
.page-ledger div {
grid-template-columns: minmax(0, 1fr);
gap: 0.2rem;
}
.site-footer {
padding-right: 1rem;
padding-left: 1rem;
}
.handoff-cta {
width: 100%;
}
.consult-dialog {
width: calc(100% - 1rem);
max-height: calc(100svh - 1rem);
}
.dialog-shell > header,
.dialog-content,
.dialog-shell > footer {
padding: 1rem;
}
}
@media (prefers-reduced-motion: reduce) {
.candidate-option,
.candidate-scene > img,
.site-nav a,
.dossier-tabs button,
.unit-switches button {
transition-duration: 0.01ms;
}
}