@import "./tokens.css"; /* ========================================================================== 마테리아 스튜디오 (MATERIA Spatial Design) — 메인 스타일시트 SSOT 프리셋: editorial + high-end-visual-design ========================================================================== */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; scroll-behavior: smooth; background-color: var(--surface); color: var(--ink); font-family: var(--font-body); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transition: background-color var(--dur-normal), color var(--dur-normal); overflow-x: hidden; } body { min-height: 100dvh; line-height: var(--leading-normal); overflow-x: hidden; background: var(--surface); transition: background-color var(--dur-normal); } img { display: block; max-width: 100%; height: auto; } a { color: inherit; text-decoration: none; transition: color var(--dur-quick); } a:hover { color: var(--accent); } button, input, select, textarea { font: inherit; color: inherit; } button { cursor: pointer; border: none; background: none; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } .mono { font-family: var(--font-mono); } .serif { font-family: var(--font-serif); } .italic { font-family: var(--font-serif); font-style: italic; } .wrap { width: min(100% - 2 * var(--pad-inline), var(--container)); margin-inline: auto; } /* ── 접근성 스킵 링크 ── */ .skip-link { position: fixed; top: 1rem; left: 1rem; z-index: 1000; padding: 0.5rem 1.25rem; background: var(--surface-inverse); color: var(--ink-inverse); border-radius: var(--radius); transform: translateY(-200%); transition: transform var(--dur-quick); text-decoration: none; font-weight: 500; } .skip-link:focus { transform: translateY(0); } /* ── 상단 헤더 & 조도 스위처 (GNB SSOT) ── */ .site-header { position: sticky; top: 0; z-index: 100; background: rgba(245, 243, 239, 0.94); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-bottom: 1px solid var(--line); min-height: 64px; display: flex; align-items: center; transition: background-color var(--dur-normal), border-color var(--dur-normal); } body[data-ambiance="night"] .site-header { background: rgba(20, 19, 18, 0.94); } .header-inner { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); width: 100%; } .brand { display: inline-flex; align-items: center; gap: var(--space-2); text-decoration: none; color: var(--ink); font-family: var(--font-serif); font-weight: 700; font-size: var(--step-1); letter-spacing: 0.08em; white-space: nowrap; flex-shrink: 0; } .brand-badge { display: inline-flex; align-items: center; justify-content: center; padding: 2px 6px; border-radius: var(--radius); background: var(--surface-card); border: 1px solid var(--line); color: var(--accent); font-family: var(--font-serif); font-size: 11px; font-weight: 600; } .brand-han { font-size: var(--step--1); color: var(--accent); margin-left: 4px; font-weight: 500; } .nav-links { display: flex; align-items: center; gap: var(--space-4); list-style: none; } .nav-links a { text-decoration: none; color: var(--ink-muted); font-size: var(--step--1); font-weight: 600; letter-spacing: -0.01em; transition: color var(--dur-quick); white-space: nowrap; } .nav-links a:hover, .nav-links a.active { color: var(--accent); } .header-actions { display: flex; align-items: center; gap: var(--space-2); flex-shrink: 0; } /* 조도 앰비언스 모드 스위처 (Day vs Night) */ .ambiance-switcher, .ambiance-toggle { display: inline-flex; align-items: center; background: var(--surface-card); border: 1px solid var(--line); border-radius: var(--radius); padding: 2px; gap: 2px; flex-shrink: 0; } .ambiance-btn { padding: 4px 10px; border-radius: 2px; font-size: 12px; font-weight: 600; color: var(--ink-muted); transition: all var(--dur-quick); white-space: nowrap; } .ambiance-btn.is-active, .ambiance-btn.active { background: var(--surface-raised); color: var(--ink); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } /* ── 버튼 시스템 & 더블 베젤 ── */ .btn-materia { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2); background: var(--surface-inverse); color: var(--ink-inverse); padding: 8px 16px; border-radius: var(--radius); font-weight: 600; font-size: var(--step--1); text-decoration: none; white-space: nowrap; flex-shrink: 0; transition: transform var(--dur-quick), background var(--dur-quick), color var(--dur-quick); } .btn-materia:hover { background: var(--accent); color: var(--accent-ink); transform: translateY(-1px); } .btn-materia:active { transform: scale(0.98); } /* 더블 베젤 프레임 (Double-Bezel) */ .bezel-outer, .frame.double-bezel { background: rgba(158, 128, 98, 0.06); border: 1px solid var(--line); padding: 6px; border-radius: var(--radius-md); } .bezel-inner { background: var(--surface-raised); border: 1px solid var(--line-subtle); border-radius: calc(var(--radius-md) - 4px); padding: var(--space-6); } /* ── 히어로 섹션 ── */ .hero-section { padding-block: var(--space-6) var(--space-7); position: relative; } .hero-grid { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr); gap: var(--space-6); align-items: center; } .eyebrow { display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border-radius: var(--radius); background: var(--accent-light); color: var(--accent); font-size: var(--step--1); font-family: var(--font-body); font-weight: 600; margin-bottom: var(--space-3); border: 1px solid var(--accent-surface); } .hero-title { font-family: var(--font-serif); font-size: var(--step-3); font-weight: 700; line-height: var(--leading-tight); letter-spacing: -0.01em; color: var(--ink); margin-bottom: var(--space-3); text-wrap: balance; word-break: keep-all; } .hero-desc { font-size: var(--step-0); color: var(--ink-muted); max-width: var(--measure); line-height: var(--leading-normal); margin-bottom: var(--space-5); text-wrap: pretty; word-break: keep-all; } .hero-ctas { display: flex; align-items: center; gap: var(--space-3); flex-wrap: wrap; } .hero-visual { position: relative; } .hero-frame { border-radius: var(--radius-md); overflow: hidden; border: 1px solid var(--line); box-shadow: 0 12px 32px -10px rgba(0, 0, 0, 0.06); } .hero-frame img { width: 100%; aspect-ratio: 4/3; object-fit: cover; transition: transform var(--dur-normal); } .hero-spec-tag { position: absolute; bottom: -14px; left: 16px; background: var(--surface-raised); border: 1px solid var(--line); border-radius: var(--radius); padding: 8px 14px; box-shadow: 0 8px 20px -4px rgba(0, 0, 0, 0.06); display: flex; align-items: baseline; gap: var(--space-2); } .spec-title { font-family: var(--font-serif); font-size: var(--step-0); font-weight: 700; color: var(--ink); } .spec-sub { font-family: var(--font-mono); font-size: var(--step--1); color: var(--accent); } /* ── 엄선 프로젝트 섹션 ── */ .works-section { padding-block: var(--space-7); border-top: 1px solid var(--line); } .section-head { text-align: center; max-width: 640px; margin-inline: auto; margin-bottom: var(--space-6); } .section-title { font-family: var(--font-serif); font-size: var(--step-2); font-weight: 700; color: var(--ink); margin-bottom: var(--space-2); text-wrap: balance; word-break: keep-all; } .section-sub { font-size: var(--step-0); color: var(--ink-muted); text-wrap: pretty; word-break: keep-all; } .works-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-5); } .work-card { background: var(--surface-raised); border: 1px solid var(--line); border-radius: var(--radius-md); overflow: hidden; display: flex; flex-direction: column; transition: transform var(--dur-normal), box-shadow var(--dur-normal), border-color var(--dur-normal); } .work-card:hover { transform: translateY(-4px); border-color: var(--accent); box-shadow: 0 16px 36px -10px rgba(0, 0, 0, 0.08); } .work-card-media { width: 100%; aspect-ratio: 16 / 11; overflow: hidden; background: var(--surface-sunken); position: relative; } .work-card-media img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1); } .work-card:hover .work-card-media img { transform: scale(1.04); } /* 🚀 텍스트 영역 내부 패딩을 24px로 넉넉하게 부여하여 0px 패딩 버그 완전 해결 */ .work-card-body { padding: var(--space-5); display: flex; flex-direction: column; flex-grow: 1; gap: var(--space-2); } .work-card-title { font-family: var(--font-serif); font-size: var(--step-1); font-weight: 700; color: var(--ink); letter-spacing: -0.02em; } .work-card-type { font-family: var(--font-mono); font-size: 12px; color: var(--accent); font-weight: 600; } .work-card-desc { font-size: var(--step--1); color: var(--ink-muted); line-height: 1.65; margin-block: var(--space-1) var(--space-4); flex-grow: 1; text-wrap: pretty; word-break: keep-all; } .work-card-actions { margin-top: auto; } .work-card-actions .btn-materia { width: 100%; text-align: center; justify-content: center; padding: 10px 16px; font-size: var(--step--1); } /* ── 물성 아카이브 섹션 ── */ .material-section { padding-block: var(--space-7); background: var(--surface-card); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); } .material-grid { display: grid; grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr); gap: var(--space-6); align-items: center; } .mat-list { display: grid; gap: var(--space-3); } .mat-item { background: var(--surface-raised); border: 1px solid var(--line); border-radius: var(--radius); padding: var(--space-4); display: flex; flex-direction: column; gap: var(--space-1); } .mat-item-name { font-family: var(--font-serif); font-size: var(--step-0); font-weight: 700; color: var(--ink); } .mat-item-desc { font-size: var(--step--1); color: var(--ink-muted); line-height: var(--leading-normal); text-wrap: pretty; word-break: keep-all; } /* ── 설계 프로세스 섹션 ── */ .process-section { padding-block: var(--space-7); } .process-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-3); } .process-card { background: var(--surface-raised); border: 1px solid var(--line); border-radius: var(--radius); padding: var(--space-4); } .process-num { font-family: var(--font-mono); font-size: var(--step--1); color: var(--accent); font-weight: 700; margin-bottom: var(--space-2); } .process-title { font-family: var(--font-serif); font-size: var(--step-0); font-weight: 700; color: var(--ink); margin-bottom: var(--space-1); } .process-desc { font-size: var(--step--1); color: var(--ink-muted); line-height: var(--leading-normal); text-wrap: pretty; word-break: keep-all; } /* ── 프라이빗 상담 섹션 ── */ .contact-section { padding-block: var(--space-7); background: var(--surface-card); border-top: 1px solid var(--line); } .contact-card { background: var(--surface-raised); border: 1px solid var(--line); border-radius: var(--radius-sm); padding: var(--space-5); max-width: 680px; margin-inline: auto; } .form-group { margin-bottom: var(--space-4); } .form-label { display: block; font-size: var(--step--1); font-weight: 600; color: var(--ink); margin-bottom: var(--space-2); letter-spacing: 0.04em; } .form-select, .form-input, .form-textarea { width: 100%; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 10px 14px; color: var(--ink); font-size: var(--step-0); transition: border-color var(--dur-quick); } .form-select:focus, .form-input:focus, .form-textarea:focus { outline: none; border-color: var(--accent); } /* ── 푸터 ── */ .site-footer { border-top: 1px solid var(--line); padding-block: var(--space-5); background: var(--surface); font-size: var(--step--1); color: var(--ink-muted); } .footer-inner { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: var(--space-3); } /* ── 반응형 미디어 쿼리 ── */ @media (max-width: 860px) { .nav-links { display: none; } .hero-grid, .works-grid, .material-grid { grid-template-columns: 1fr; gap: var(--space-5); } .process-grid { grid-template-columns: 1fr 1fr; } .brand-han { display: none; } .header-actions .btn-materia { display: none; } .site-header { min-height: 56px; } } @media (max-width: 600px) { .process-grid { grid-template-columns: 1fr; } } /* SSOT Aliases */ .site-head { position: sticky; top: 0; z-index: 50; background: rgba(245, 243, 239, 0.94); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border-bottom: 1px solid var(--line); padding-block: var(--space-3); } body[data-ambiance="night"] .site-head { background: rgba(20, 19, 18, 0.94); } .head-inner { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); } .wordmark { display: inline-flex; align-items: baseline; gap: var(--space-2); font-family: var(--font-serif); font-size: var(--step-1); font-weight: 700; color: var(--ink); text-decoration: none; } .wordmark-han { font-size: var(--step--1); color: var(--accent); font-weight: 500; } .nav { display: flex; align-items: center; gap: var(--space-5); } .nav a { font-size: var(--step--1); font-weight: 500; color: var(--ink-muted); text-decoration: none; } .nav a:hover, .nav a.active { color: var(--ink); } .head-actions { display: flex; align-items: center; gap: var(--space-3); flex-shrink: 0; } .site-foot { border-top: 1px solid var(--line); padding-block: var(--space-6); background: var(--surface); font-size: var(--step--1); color: var(--ink-muted); } .foot-inner { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--space-4); }