feat(site): rework 19 marketing showcases for composition diversity
Some checks are pending
ci / build (push) Waiting to run
Some checks are pending
ci / build (push) Waiting to run
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.
This commit is contained in:
parent
88c11682b1
commit
8e3cdb0d3b
296 changed files with 19131 additions and 17538 deletions
|
|
@ -1,27 +1,122 @@
|
|||
# Orbit Aerospace design.md
|
||||
# design.md — 궤도 우주공학 ORBIT-75 사양서
|
||||
|
||||
## 진행 상태
|
||||
|
||||
- 0 현행 감사 완료(2026-10-06) · 1 레퍼런스 3슬롯 실측 · 2 카드 3장 → A 선택(위임) · 3 토큰 재정의 · 4 구현(레이아웃 → 유리 → 선 그리기) · 5 검증 통과(아래) · 6 이 문서.
|
||||
|
||||
## 브리프
|
||||
|
||||
- 무엇을: 가상 엔진 사양·도면·시험 기록의 읽기 순서를 보여 주는 페이지.
|
||||
- 누구에게: 값과 그 측정 조건을 같은 행에서 비교하려는 방문자.
|
||||
- 제약: 수치·조건·가상 사양서 표기를 바꾸지 않고, 도면은 설명용 표면으로 제한한다.
|
||||
- 무엇을: 가상 메탄 엔진 ORBIT-75의 사양서 한 장. 종단면도, 측정 조건이 붙은 사양표, 지상 연소 시험 다섯 회의 기록.
|
||||
- 누구에게: 발사체 통합 엔지니어. 값과 그 측정 조건을 같은 줄에서 읽고 자기 발사체에 맞는지 판단한다. 목표 행동은 없다(가상 브랜드, 자료 요청을 받지 않는다).
|
||||
- 제약: 정적 HTML/CSS, 기본 언어 ko-KR(기존 로컬라이제이션). 수치·시험 기록·사진 2장·상호는 바꾸지 않는다. plan.md 배정값(아래 지문) 안에서 고른다. 한자 금지.
|
||||
- 화면: `index.html` 한 장.
|
||||
|
||||
## 결정표
|
||||
## 미확정
|
||||
|
||||
| 축 | 관찰과 적용 범위 | 결정·역할 토큰 | 기각 조건 |
|
||||
- 방향 선택은 사용자 위임(재작업 분배표). 카드 A를 고른 이유는 "방향" 절.
|
||||
- 모든 수치·시험 기록·사진은 예시다(푸터·자료 요청 절에 고지).
|
||||
|
||||
## 레퍼런스
|
||||
|
||||
| 슬롯 | 출처 | 실측(2026-10-06, 브라우저 1440) | 가져온 것 |
|
||||
|---|---|---|---|
|
||||
| 구도 | 기준 화면의 모눈이 도면 밖 본문까지 이어져 본문과 도면의 역할이 섞였다. | 모눈을 `.blueprint` 표면에만 두고 본문은 단색 잉크 바탕에 둔다. `--surface`, `--surface-raised`, `--line`. | 본문 줄과 표의 값이 모눈과 경쟁하면 모눈을 더 약화한다. |
|
||||
| 타입 | 도면 라벨·치수는 설명이고 사양·시험표는 비교 대상이다. | 도면 라벨을 본문색으로, 치수는 `--font-mono`와 보조색으로 분리한다. | 320px/200%에서 라벨 또는 조건 열이 겹치면 도면·표의 폭을 별도 조정한다. |
|
||||
| 색 | 구리는 냉각 경로·리더선의 관계를 보이는 강조 역할이다. | `--accent`, `--accent-stroke`을 유로·리더선에만 사용한다. | 구리선이 값·조건을 가리거나 가상성 표기보다 더 강하면 선 굵기와 대비를 되돌린다. |
|
||||
| R1 구조(같은 시장) | 이노스페이스 한빛-나노 https://www.innospc.com/page/sub01_01_1 | 어두운 바탕, 사양을 묶음(OVERVIEW·탑재체·2단·1단)으로 나누고 "엔진추력 34 kN / 연소시간 270 sec / 비추력 325 sec"처럼 값에 단위를 붙인 행. 발사 궤도 도해를 전폭(약 2.3:1) 라벨 도면으로 실음. 본문 IBM Plex Sans KR 16px | 값+단위+조건을 한 행에, 도면은 전폭 라벨 도해로 |
|
||||
| R2 톤 | Rocket Lab Electron https://www.rocketlabcorp.com/launch/electron/ | h1 "Electron" 한 낱말 56px/300 자간 넓음, 전폭 사진 무대, 표 "Height 18 m / 59 ft …". 푸터는 5열 색인(Contact·Launch·Space Systems·About·Missions) + 소제목 굵게 | 제품명 한 낱말 표제, 다열 색인 푸터 |
|
||||
| R3 디테일 | developer.chrome.com scroll-driven-animations 문서 | 오른쪽 측면 차례 x=1253·폭 163px, 상단 73px 고정, 링크 16/24px, 현재 항목 `aria-current` + 강조색 | 오른쪽 고정 레일 + `aria-current` 현재 위치 |
|
||||
| 미검증 | rocketlabcorp·perigee.kr 텍스트 페처 403 → 브라우저로 열어 실측. ursamajor.com/engines/hadley 404 | — |
|
||||
|
||||
## 근거와 경계
|
||||
## 방향
|
||||
|
||||
[art-direction.md](../../../../../packages/skill/references/art-direction.md)의 Hofmann 관련 면적·정렬 관찰은 도면 표면과 읽기 표면 분리에만 적용했다. [typography.md](../../../../../packages/skill/references/typography.md)의 Ruder 관련 숫자와 조건 proof는 동일 행의 표 조판에만 적용했다. [visual-design-lineage.md](../../../../../packages/skill/references/visual-design-lineage.md)의 Albers 관련 맥락색 관찰은 구리선과 야간 바탕의 구분에만 적용했다. 원전은 보편 성능 주장으로 사용하지 않는다.
|
||||
지문: 표제+전폭 무대(도면 파노라마 4:1) · Orbit / Noto Sans KR · 어두운 청 #081018 · 강조 200° 시안 #45bcf7 · radius 2px · 흐름 [한 낱말 표제 + 사실 목록 → 도면 무대 → 사양표 → 시험 기록표 → 재생냉각(글 + 3:4 사진 유리 패널) → 연소 장면(16:9 유리 패널) → 자료 요청 → 다열 색인] · 오른쪽 고정 측면 색인(좁은 화면은 위쪽 차례 띠) · 다열 색인 푸터(4열) · 이미지 원본 비율, 유리 패널 안, 캡션은 패널 안 하단 · scroll-driven 도면 선 그리기(냉각 유로만), 나머지 정지
|
||||
|
||||
[trustworthy-showcases.md](../../../../../packages/skill/references/trustworthy-showcases.md)에 따라 가상 사양·시험 기록 표기와 값/조건의 가까운 연결을 유지한다.
|
||||
한 문장 컨셉: 발사체 통합 엔지니어가 ORBIT-75의 종단면과 사양을 한 화면에서 읽고, 값마다 붙은 측정 조건으로 자기 발사체에 맞는지 판단한다.
|
||||
|
||||
## 2026-09-12 현재 검증 기록
|
||||
프리셋: dark-instrument 지배. 재질 축만 svg-glass(유리 패널)로 보조.
|
||||
|
||||
- `verify-final` 18개 묶음은 16개가 즉시 통과했다. 전체 묶음의 invariant·visual 검사는 Gaon·Dure를 대상으로 하며, 나머지 2개는 수정 뒤 release 독립 재실행에서 ALL PASS·ALL MATCH였다.
|
||||
- root는 28개 모바일, 21개 데스크톱, 7개 하위 경로와 30개 앱 상태를 직접 검토해 수용했다. stress 112건은 hard failure 0이며, 가로 넘침 4건은 targeted fix 뒤 390px 재측정에서 0이다.
|
||||
- 이 기록은 렌더·계약 범위의 현재 결과다. 모든 폭·키보드 경로·인쇄 등 개별 기능을 완전 재실행했다는 뜻이 아니며, 참여자 과업 효과도 미측정이다.
|
||||
제시한 카드(위임):
|
||||
|
||||
| 카드 | 한 줄 | 첫 화면 | 포기하는 것 |
|
||||
|---|---|---|---|
|
||||
| A. 도면 한 장짜리 사양서 | 엔진 이름을 한 낱말로 크게, 사실 네 줄, 그 아래 눕힌 종단면 파노라마 | 표제 → 사실 4열 → 4:1 도면 무대 | 첫 화면 행동 버튼 없음 |
|
||||
| B. 시험장 일지 | 최근 시험 "SF-31, 62 s"가 표제. 무대는 시험 다섯 회의 지속 시간 띠 | 표제 → 시험 띠 → 시험표가 먼저 | 엔진 형상이 첫 화면 밖 |
|
||||
| C. 유로 180개 | "구리 유로 180개"가 표제. 무대는 냉각 벽 단면의 반복 유로 패턴 | 표제 → 유로 단면 파노라마 → 재생냉각 글 | 엔진 전체 개요가 늦게 나옴 |
|
||||
|
||||
고른 카드: **A** — 브리프가 "엔진 사양서"이고 R1(이노스페이스)이 기체 도해 바로 옆에 사양 묶음을, R2(Rocket Lab)가 제품명 한 낱말을 표제로 둔다. 방문자가 검색창에 치는 말도 엔진 이름이다. B는 시험 한 회에 기대고, C는 부품 하나로 좁다.
|
||||
|
||||
반사실: 첫 화면 고유 요소 = Orbit으로 조판한 "ORBIT-75 메탄 엔진", 추력·비추력·연소실 압력·최근 연소의 측정 조건이 붙은 사실 목록, 눕힌 엔진 종단면 도면(인젝터→노즐). 같은 업종 치환(다른 엔진 회사)에서는 수치와 도면이 바뀌어야 하고, 세무사무소로 바꾸면 도면 무대와 사실 목록 구조가 성립하지 않는다 → 3개, 통과.
|
||||
|
||||
수렴(B-2, form-architecture와 대조 — 같은 히어로 패밀리·측면 색인·scroll-driven 배정): 섹션 흐름 다름(표제+무대 → 표 → 표 → 사진 vs 표제+무대 → 도면+사양 → 사진 → 연구소) · 히어로 글 묶음 다름(한 낱말 + 사실 목록 vs 긴 문장 3줄 단독) · 내비 같음(측면 색인; 좌/우, 고정 방식 같음) · 푸터 다름(다열 색인 vs 워드마크) · 이미지 다름(원본 비율 컬러, 유리 패널 안 캡션 vs 흑백 극단 비율, 캡션 위/아래) · 모션 같음(scroll-driven 선 그리기) → 같음 2/6, 통과. B-1(히어로 5축): 구도 같음, 표제 서체 다름, eyebrow 둘 다 없음(같음), CTA 둘 다 없음(같음), 캡션 문법 다름 → 3 같음. 둘 다 "없음"이 같음으로 세는 규칙이라 걸리지만, 라벨·버튼 없음은 plan.md 배정값이다(표제 꼴 "라벨 없음", 패밀리가 첫 화면 버튼을 포기). 배정자 판단으로 수용.
|
||||
|
||||
표현 리스크: Orbit(모노 셀 한글)으로 표제 한 줄. 과업 적합 이유 — 계기·도면 문맥의 숫자·라틴을 한글과 같은 리듬으로 묶는다. 검증 — 1440 한 줄, 390 두 줄(마지막 줄 2어절), 글리프 충돌 없음(final-1440-fold, final-390-fold).
|
||||
|
||||
보존 자산: 상호 궤도 우주공학, ORBIT-75 수치 6개와 조건, SF-27~31 기록, 사진 2장(channel-macro 3:4, static-fire 16:9), 섹션 id `engine`·`spec`·`fires`·`contact`(E2E 앵커), 표의 `thead`/`tbody` 구조(E2E 가독 판정), 배경 #081018.
|
||||
|
||||
## 토큰과 예산
|
||||
|
||||
값: `styles/tokens.css`. 역할만 적는다.
|
||||
|
||||
- 서체: Orbit(표제·색인 번호·캡션 번호. Google Fonts 한글 슬라이스 있음, 웨이트 400 하나) / Noto Sans KR 400·500(본문·표·사실 값). 모노 없음 — 숫자는 `tabular-nums`.
|
||||
- 색: surface #081018(유지), ink/muted/faint 대비 16.2 / 8.7 / 6.2, accent #45bcf7(HSL 200°, 대비 8.9; similarity 도구는 OKLCH 250°로 보고), accent-stroke(유로 선, 6.2), ink-on-glass(유리·모눈 위 캡션 전용).
|
||||
- 스케일: 13 / 16 / 18 / clamp(22~28) / 표제 clamp(40~104)px. 행간 본문 1.7, 제목 1.3, 표제 1.1. measure 36em.
|
||||
- radius 2px. 간격 4·8·16·24·40·64·96·clamp(72~136).
|
||||
- 유리: fill rgb(14 24 35 / .58), blur 14px, 헤어라인 linear-gradient 100°(conic 금지, svg-glass §1), reduced-transparency에서 불투명.
|
||||
|
||||
예산(tokens §5 데모/포트폴리오) 실측(로컬, Chrome):
|
||||
- JS 0.9KB 인라인(색인 현재 위치만) · 히어로 전송 ≈ 700KB(이미지는 lazy, 첫 화면 0KB).
|
||||
- 폰트 344KB(Orbit 61 + Noto Sans KR 가변 슬라이스 283, 파일 21개) — **200KB 초과, 올렸다.** 본문 한글 범위가 슬라이스 20개를 건드린다. 배정 서체를 지키면서 줄일 수단(자체 서브셋 호스팅)은 공통 규칙 8(Google Fonts/jsdelivr 링크)에 막힌다.
|
||||
- LCP 448ms(1440, h1) / 324ms(390) · CLS 0.0007 / 0.0345(390, Orbit swap 전후 표제 높이) · INP 미측정(실기기 없음).
|
||||
|
||||
## 이펙트와 폴백
|
||||
|
||||
- 도면 선 그리기: `.bp-cool`·축 화살표에 `pathLength="1"` + `stroke-dasharray: 1`, `@supports (animation-timeline: scroll())` 안에서 `scroll(root block)` 0~60vh 구간에 dashoffset 0.55 → 0. 실측 1440: 스크롤 0 → 0.55, 250px → 0.30, 700px → 0. 390(세로 도면): 0.55 → 0.007(500px). 감소 모션·Firefox(미지원)·가드 밖: dashoffset 0 = 완성 상태.
|
||||
- 유리 패널: `backdrop-filter: blur(14px) saturate(1.25)` + 마스크 헤어라인. 뒤에 섹션의 시안 radial 글로우를 두어 흐림이 보인다. 굴절(`backdrop-filter: url()`)은 쓰지 않았다 — 모눈이 휘면 도면이 아니다. 본문 텍스트에는 `filter`를 걸지 않는다. `prefers-reduced-transparency`에서 불투명 + blur 4px.
|
||||
- 측면 색인 현재 위치: IntersectionObserver(rootMargin −35%/−55%)가 `aria-current`를 옮긴다. JS 없으면 01이 정적 current.
|
||||
- 좁은 화면(≤40rem): 가로 4:1 도면을 숨기고 세로 종단면(460×560)을 보인다(layout §2-b "무대 비율을 다시 정한다"). 라벨은 SVG 안 16px 단위 → 실제 약 12px.
|
||||
|
||||
## 하지 않기로 한 것
|
||||
|
||||
- 스크롤 리빌(IntersectionObserver fade-up) 전부 삭제 — 배정표에 없다.
|
||||
- 상단 고정 바·backdrop 헤더 — 측면 색인으로 대체. 좁은 화면 차례 띠는 접지 않는다: 접으면 안의 링크가 포커스를 못 받아 instrument E2E(40번 Tab 안 모든 앵커 도달)가 깨지고, 항목 6개가 두 줄에 들어간다.
|
||||
- 모노 서체(JetBrains Mono) — 하우스 룩, 한글 혼용 라벨 흩어짐.
|
||||
- 구리 강조(이전 #d08a5a) — 배정 200° 시안으로 교체. 도면의 열색 은유보다 배정 분포가 우선.
|
||||
- 가운뎃점 메타 문자열 전부 쉼표/문장으로.
|
||||
- 사진 재처리(듀오톤·흑백) — 배정이 "원본 비율"이고 유리 패널이 처리 역할을 한다.
|
||||
- 모바일 하단 행동 바 — 목표 행동이 없다.
|
||||
|
||||
## 검증
|
||||
|
||||
자동(2026-10-06, apps/site):
|
||||
- html-validate 오류 0 · stylelint 통과 · no-hanja PASS 3 files · showcase-audit PASS 6/FAIL 0(320·390·768·1440·1920·2560) · design-gate 충족 12 / 미검증 1 / 실패 0(꺼짐 3: static·visual·webkit) — 미검증 1 = 그라디언트·유리 위 대비 9요소 → 아래 수동 실측으로 닫음 · instrument-showcases-e2e(orbit 블록) desktop·mobile PASS, 앵커 24개 모두 존재·Tab 도달, 표 2개 가독 · similarity 경고 0.
|
||||
- 대비 실측(렌더 픽셀 중 가장 밝은 배경 대비, 1440/390): 색인 링크 7.8/8.7 · 사실 dt 5.9 · 사실 조건 8.2 · 도면 캡션 7.0/6.9 · 사진 캡션 8.6 · 도면 라벨 12.6 · 치수 6.8 · 표 조건 6.7 · 표 값 6.8 · 푸터 8.7 · 버튼 8.9. 세로 도면 "유로 (CH₄)"는 스크립트가 윗줄 글리프를 배경으로 잡아 1.07로 나왔으나 2x 캡처(v3-390-stage-2x)에서 선과 겹치지 않음을 눈으로 확인.
|
||||
- 키보드: skip → 워드마크 → 색인 6 → (390: 표 스크롤 영역 2) → 사양 다시 보기 → 푸터 링크 15. 포커스 링 2px 시안.
|
||||
- 표제 마지막 줄 어절: h1 1440 3 / 390 2, h2 전부 ≥3.
|
||||
|
||||
시각 루브릭(critique §2-1, 약한 축부터; 캡처 `outputs`가 아닌 세션 스크래치 `scratchpad/orbit/final-*`):
|
||||
|
||||
| 축 | 점수 | 근거 | 2점 반례 |
|
||||
|---|---|---|---|
|
||||
| R3 묶음·정렬 | 1 | 1440 시작선 x=52(표제·사실·섹션)·x=24(무대)·x=1332(레일) + 표 안 x=68. 넷째 선(표 패딩)을 의미로 설명하기 어렵다 | — |
|
||||
| R6 이미지 | 1 | 사진 2장 각 1회, 역할(유로 접사·연소 장면) 기록, 원본 비율. 그러나 390 첫 화면에 사진이 없고(컨셉은 "도면이 주연"이라 실패 신호는 아님) 두 사진의 조도(실내 금속 vs 야간 연소)가 한 세계로 읽히는지는 보는 이에 따라 갈린다 | — |
|
||||
| R1 첫인상 | 2 | 3초 문장 "궤도 우주공학의 ORBIT-75 메탄 엔진, 75.4 kN, 단면도와 측정 조건" — final-1440-fold·final-390-fold 모두 | 390에서 도면은 상단만 보인다 |
|
||||
| R2 위계 | 2 | 흐림 캡처(final-1440-blur) 시선 표제 → 도면 → 사실 4열. 의도와 같음. 표제/본문 차이 크기+서체+색 | 사실 값 4개가 같은 무게로 나란하다(의도된 목록) |
|
||||
| R4 타이포 | 2 | 합성 이탤릭 없음, 자간 −0.01em에서 글리프 충돌 없음, 마지막 줄 어절 ≥2, 모노 한글 없음, measure 36em | Orbit 한글의 넓은 모노 셀이 "메탄 엔진" 낱말 사이를 벌린다(word-spacing −0.3em으로 줄임) |
|
||||
| R5 리듬·긴장 | 2 | 묶음 안(사양표→시험표 0) < 묶음 사이(space-8); 극단 = 표제 104px vs 본문 16px(6.5배) | 사진 두 섹션 사이 간격은 다른 섹션과 같다 |
|
||||
| R7 카피 | 2 | h2 "값 여섯 개, 측정 조건을 같은 줄에 적었습니다", "지상 연소 다섯 회, 보류한 두 회도 기록에 남겼습니다" — 경쟁사 치환에서 깨짐. §13-c grep 0건, 은유 0, 합니다체 통일 | h1은 제품명이라 화법 비교 대상이 아니다 |
|
||||
| R8 구분성 | 2 | 고유 요소 3개(위), B-2 같음 2/6 | B-1에서 "없음=같음" 2축 포함 3 같음(배정값, 위에 기록) |
|
||||
| R9 마감 | 2 | 2x 크롭(spec·foot·rail·stage) 숫자 열 정렬, 캡션 여백, 패널 radius 2px 일치. 도면 화살표 방향 수정(위→아래, 좌→우) | — 찾지 못함 |
|
||||
| R10 모바일 | 2 | 390 첫 화면: 브랜드·차례·표제·사실·도면 시작. 세로 도면으로 재편집, 사실 목록 1열 | 차례 띠가 두 줄 |
|
||||
|
||||
합계 18/20, 0점 없음, R1·R8 2점 — 통과선 충족.
|
||||
|
||||
미검증: WebKit 렌더(꺼짐) · Firefox 실행(폴백 코드 경로만) · 실기기 INP · 스크린리더 · `prefers-reduced-transparency` 렌더.
|
||||
|
||||
## 피드백 기록 · 보존 목록
|
||||
|
||||
- 2026-10-06 재작업(분배표 배정, 방향 위임). 피드백 없음.
|
||||
- 보존: 수치·시험 기록·사진·상호·섹션 id 4개·표 구조.
|
||||
|
||||
## 변경 기록
|
||||
|
||||
- 2026-10-06 · 분배표 재작업 · 분할 히어로+상단 고정 바+고지 푸터를 표제+전폭 도면 무대·오른쪽 측면 색인·다열 색인 푸터로. Pretendard+JetBrains Mono+구리 → Orbit+Noto Sans KR+200° 시안. 스크롤 리빌 삭제, scroll-driven 유로 선 그리기·유리 패널 추가. 가운뎃점 메타 문자열 제거, 섹션 제목을 사실 문장으로.
|
||||
- 2026-10-02 · 카피 기준 수정 · h1 "메탄 75 kN, 62초를 태웠다" → "75 kN 메탄 엔진, 지상 연소 62초 완료", 잠언형 문장을 정보 문장으로, 합니다체 통일, 제목·OG를 "ORBIT-75 메탄 엔진 사양"으로.
|
||||
- 2026-10-02 · 레드팀 06 · 상투 은유 h1 제거, 면책 문구를 히어로에서 푸터·자료 요청으로 이동("예시" 10회 → 1회), 한글 라벨을 모노에서 본문 서체로.
|
||||
|
|
|
|||
|
|
@ -3,158 +3,196 @@
|
|||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>궤도 우주공학 · 엔진 사양서 구성</title>
|
||||
<title>ORBIT-75 메탄 엔진 사양 — 궤도 우주공학</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="재생냉각 엔진의 단면도와 지상 연소 기록을 읽는 가상 사양서 구성입니다. 수치와 시험 기록은 예시입니다."
|
||||
content="가상 우주기업 궤도 우주공학의 75 kN급 다단연소 메탄 엔진 ORBIT-75 사양서. 단면도, 측정 조건을 같은 줄에 적은 사양표, 지상 연소 시험 다섯 회의 기록을 정리했습니다."
|
||||
/>
|
||||
<meta property="og:title" content="궤도 우주공학 · 엔진 사양서 구성" />
|
||||
<meta property="og:description" content="재생냉각 엔진의 단면도와 연소 기록을 읽는 가상 사양서 구성." />
|
||||
<meta property="og:title" content="ORBIT-75 메탄 엔진 사양 — 궤도 우주공학" />
|
||||
<meta property="og:description" content="75 kN급 재생냉각 메탄 엔진 ORBIT-75의 단면도, 사양, 지상 연소 시험 기록." />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:image" content="https://designpaca.chanpaca.net/work/orbit-aerospace/assets/static-fire.webp" />
|
||||
<meta property="og:image:alt" content="SF-31 지상 연소 연출 이미지: 붉게 빛나는 노즐과 배기 기둥" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="theme-color" content="#081018" />
|
||||
|
||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css"
|
||||
href="https://fonts.googleapis.com/css2?family=Orbit&family=Noto+Sans+KR:wght@400;500&display=swap"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap"
|
||||
/>
|
||||
<link rel="stylesheet" href="./styles/main.css?v=20260912all" />
|
||||
<link rel="stylesheet" href="./styles/main.css?v=20261006" />
|
||||
<link
|
||||
rel="icon"
|
||||
href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='%23081018'/%3E%3Cpath d='M16 4l6 7v17h-12V11z' fill='none' stroke='%23C57A45' stroke-width='1.6'/%3E%3Cpath d='M13 11h6M12 18h8' stroke='%23C57A45'/%3E%3C/svg%3E"
|
||||
href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='%23081018'/%3E%3Cpath d='M4 12h10c4 0 6 2 6 4s-2 4-6 4H4' fill='none' stroke='%23e6edf3' stroke-width='1.6'/%3E%3Cpath d='M20 16c3-1 6-1 8 0' stroke='%2345bcf7' stroke-width='1.6' fill='none'/%3E%3C/svg%3E"
|
||||
/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<a class="skip" href="#main">본문으로 건너뛰기</a>
|
||||
|
||||
<header class="site-head">
|
||||
<div class="wrap head-inner">
|
||||
<a class="wordmark" href="#main">궤도 우주공학 <span class="wordmark-en">ORBIT</span></a>
|
||||
<nav class="nav" aria-label="섹션">
|
||||
<a href="#engine">엔진</a>
|
||||
<a href="#spec">사양</a>
|
||||
<a href="#fires">시험 기록</a>
|
||||
<a href="#contact">구성 안내</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<nav class="index" aria-label="차례">
|
||||
<a class="wordmark" href="#main">궤도 우주공학</a>
|
||||
<ol class="index-list">
|
||||
<li><a href="#engine" data-part="engine" aria-current="true"><span class="index-no">01</span>단면도</a></li>
|
||||
<li><a href="#spec" data-part="spec"><span class="index-no">02</span>사양</a></li>
|
||||
<li><a href="#fires" data-part="fires"><span class="index-no">03</span>시험 기록</a></li>
|
||||
<li><a href="#cooling" data-part="cooling"><span class="index-no">04</span>재생냉각</a></li>
|
||||
<li><a href="#plate" data-part="plate"><span class="index-no">05</span>연소 장면</a></li>
|
||||
<li><a href="#contact" data-part="contact"><span class="index-no">06</span>자료 요청</a></li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<main id="main">
|
||||
<section id="engine" class="hero" aria-labelledby="hero-h">
|
||||
<div class="wrap hero-grid">
|
||||
<div class="hero-text">
|
||||
<p class="hero-kicker reveal">가상 엔진 사양서 · 재생냉각 기록 형식</p>
|
||||
<h1 id="hero-h" class="reveal" style="--delay: 60ms">
|
||||
도면은 말하지 않는다.<br />측정만 한다
|
||||
</h1>
|
||||
<p class="lead reveal" style="--delay: 120ms">
|
||||
이 페이지의 수치와 시험 기록은 엔진 사양서를 읽는 방식을 보여 주는
|
||||
예시입니다. 실제 지상 시험 데이터, 발사체 제안, 또는 운용 성능을
|
||||
뜻하지 않습니다.
|
||||
</p>
|
||||
<a class="btn reveal" style="--delay: 180ms" href="#spec">사양 형식 보기</a>
|
||||
<dl class="run-register reveal" style="--delay: 220ms">
|
||||
<div>
|
||||
<dt>시험 구간 예시</dt>
|
||||
<dd>지상 연소 기록</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>표본</dt>
|
||||
<dd>기록 형식 예시</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>표기 기준</dt>
|
||||
<dd>값과 조건을 함께 제시</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<figure class="blueprint reveal" style="--delay: 100ms">
|
||||
<svg
|
||||
viewBox="0 0 460 560"
|
||||
role="img"
|
||||
aria-label="가상 엔진 단면도 예시: 상부 인젝터, 연소실, 중앙 스로트, 확장 노즐과 벽면의 재생냉각 유로"
|
||||
>
|
||||
<defs>
|
||||
<g id="half">
|
||||
<path
|
||||
class="bp-wall"
|
||||
d="M 230 70
|
||||
L 168 70
|
||||
L 168 210
|
||||
C 168 250 194 262 194 286
|
||||
C 194 310 118 350 112 470
|
||||
L 108 500"
|
||||
/>
|
||||
<path
|
||||
class="bp-wall inner"
|
||||
d="M 230 92
|
||||
L 184 92
|
||||
L 184 214
|
||||
C 184 246 206 258 206 284
|
||||
C 206 306 136 348 130 468
|
||||
L 127 494"
|
||||
/>
|
||||
<path
|
||||
class="bp-cool"
|
||||
d="M 176 100 L 176 212 C 176 248 198 262 198 286 C 198 308 126 350 121 468 L 118 492"
|
||||
/>
|
||||
<path
|
||||
class="bp-cool"
|
||||
d="M 170 100 L 170 210 C 170 244 192 260 192 288 C 192 312 120 352 114 470 L 111 496"
|
||||
/>
|
||||
<rect class="bp-block" x="168" y="46" width="50" height="18" />
|
||||
<path class="bp-wall thin" d="M 168 64 L 218 64" />
|
||||
</g>
|
||||
</defs>
|
||||
<use href="#half" />
|
||||
<use href="#half" transform="translate(460 0) scale(-1 1)" />
|
||||
<path class="bp-axis" d="M 230 30 V 540" />
|
||||
<g class="bp-flow">
|
||||
<path d="M 230 120 V 220" />
|
||||
<path d="M 230 220 l -5 10 M 230 220 l 5 10" />
|
||||
</g>
|
||||
<g class="bp-label">
|
||||
<path class="bp-lead" d="M 218 55 H 150" />
|
||||
<text x="144" y="59" text-anchor="end">인젝터</text>
|
||||
<path class="bp-lead" d="M 168 160 H 96" />
|
||||
<text x="90" y="164" text-anchor="end">연소실</text>
|
||||
<path class="bp-lead" d="M 200 275 H 78" />
|
||||
<text x="72" y="279" text-anchor="end">스로트</text>
|
||||
<path class="bp-lead" d="M 128 400 H 60" />
|
||||
<text x="54" y="404" text-anchor="end">노즐</text>
|
||||
<path class="bp-lead" d="M 186 180 H 120" />
|
||||
<text x="114" y="196" text-anchor="end"></text>
|
||||
<text x="242" y="150">재생냉각</text>
|
||||
<text x="242" y="166">유로 (CH₄)</text>
|
||||
</g>
|
||||
<g class="bp-dim">
|
||||
<path d="M 356 92 H 372 M 364 92 V 214" />
|
||||
<text x="380" y="157"></text>
|
||||
</g>
|
||||
<g class="bp-dim">
|
||||
<path d="M 60 500 H 96 M 78 500 V 520" />
|
||||
<text x="60" y="542">Ø 460 — 노즐 출구</text>
|
||||
</g>
|
||||
</svg>
|
||||
<figcaption>ORBIT-75 단면 · 재생냉각 벽면은 그림 2겹으로 단순화</figcaption>
|
||||
</figure>
|
||||
<div class="wrap hero-head">
|
||||
<h1 id="hero-h">ORBIT-75 메탄 엔진</h1>
|
||||
<dl class="facts">
|
||||
<div>
|
||||
<dt>추력</dt>
|
||||
<dd><span class="fact-value">75.4 kN</span><span class="fact-cond">해수면, 정상 상태 30초 평균</span></dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>비추력</dt>
|
||||
<dd><span class="fact-value">325.8 s</span><span class="fact-cond">진공, 고도 모사 노즐</span></dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>연소실 압력</dt>
|
||||
<dd><span class="fact-value">12.5 MPa</span><span class="fact-cond">피에조 계측, 샘플링 1 kHz</span></dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>최근 지상 연소</dt>
|
||||
<dd><span class="fact-value">62 s</span><span class="fact-cond">SF-31, 2026-07-18 완료</span></dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<figure class="stage glass">
|
||||
<svg
|
||||
class="bp bp-wide"
|
||||
viewBox="0 0 1600 400"
|
||||
role="img"
|
||||
aria-label="ORBIT-75 종단면도: 왼쪽 인젝터에서 오른쪽 노즐 출구까지 눕힌 단면. 연소실, 스로트, 확장 노즐과 벽 안의 재생냉각 유로"
|
||||
>
|
||||
<defs>
|
||||
<g id="half-w">
|
||||
<path
|
||||
class="bp-wall"
|
||||
d="M 200 100 L 620 100 C 700 100 740 152 780 152 C 900 152 1100 60 1460 30"
|
||||
/>
|
||||
<path
|
||||
class="bp-wall inner"
|
||||
d="M 200 114 L 616 114 C 696 114 736 164 780 164 C 896 164 1096 72 1452 42"
|
||||
/>
|
||||
<path
|
||||
class="bp-cool"
|
||||
pathLength="1"
|
||||
d="M 206 104 L 618 104 C 698 104 738 156 780 156 C 898 156 1098 64 1456 34"
|
||||
/>
|
||||
<path
|
||||
class="bp-cool"
|
||||
pathLength="1"
|
||||
d="M 206 109 L 617 109 C 697 109 737 160 780 160 C 897 160 1097 68 1454 38"
|
||||
/>
|
||||
<rect class="bp-block" x="124" y="112" width="76" height="88" />
|
||||
<path class="bp-wall thin" d="M 200 100 V 200" />
|
||||
</g>
|
||||
</defs>
|
||||
<use href="#half-w" />
|
||||
<use href="#half-w" transform="translate(0 400) scale(1 -1)" />
|
||||
<path class="bp-axis" d="M 60 200 H 1470" />
|
||||
<g class="bp-flow">
|
||||
<path pathLength="1" d="M 300 200 H 720" />
|
||||
<path d="M 720 200 l -12 -6 M 720 200 l -12 6" />
|
||||
</g>
|
||||
<g class="bp-label">
|
||||
<path class="bp-lead" d="M 162 86 V 108" />
|
||||
<text x="162" y="76" text-anchor="middle">인젝터</text>
|
||||
<path class="bp-lead" d="M 410 86 V 98" />
|
||||
<text x="410" y="76" text-anchor="middle">연소실</text>
|
||||
<path class="bp-lead" d="M 780 136 V 150" />
|
||||
<text x="780" y="126" text-anchor="middle">스로트</text>
|
||||
<path class="bp-lead" d="M 1180 326 V 348" />
|
||||
<text x="1180" y="370" text-anchor="middle">노즐</text>
|
||||
<path class="bp-lead" d="M 440 300 V 348" />
|
||||
<text x="440" y="370" text-anchor="middle">재생냉각 유로 (CH₄)</text>
|
||||
</g>
|
||||
<g class="bp-dim">
|
||||
<path d="M 1484 30 H 1516 M 1484 370 H 1516 M 1500 30 V 370" />
|
||||
<text x="1512" y="196">Ø 460</text>
|
||||
<text x="1512" y="216">노즐 출구</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<svg
|
||||
class="bp bp-tall"
|
||||
viewBox="0 0 460 560"
|
||||
role="img"
|
||||
aria-label="ORBIT-75 단면도: 상부 인젝터, 연소실, 중앙 스로트, 확장 노즐과 벽면의 재생냉각 유로"
|
||||
>
|
||||
<defs>
|
||||
<g id="half-t">
|
||||
<path
|
||||
class="bp-wall"
|
||||
d="M 230 70 L 168 70 L 168 210 C 168 250 194 262 194 286 C 194 310 118 350 112 470 L 108 500"
|
||||
/>
|
||||
<path
|
||||
class="bp-wall inner"
|
||||
d="M 230 92 L 184 92 L 184 214 C 184 246 206 258 206 284 C 206 306 136 348 130 468 L 127 494"
|
||||
/>
|
||||
<path
|
||||
class="bp-cool"
|
||||
pathLength="1"
|
||||
d="M 176 100 L 176 212 C 176 248 198 262 198 286 C 198 308 126 350 121 468 L 118 492"
|
||||
/>
|
||||
<path
|
||||
class="bp-cool"
|
||||
pathLength="1"
|
||||
d="M 170 100 L 170 210 C 170 244 192 260 192 288 C 192 312 120 352 114 470 L 111 496"
|
||||
/>
|
||||
<rect class="bp-block" x="168" y="46" width="50" height="18" />
|
||||
<path class="bp-wall thin" d="M 168 64 L 218 64" />
|
||||
</g>
|
||||
</defs>
|
||||
<use href="#half-t" />
|
||||
<use href="#half-t" transform="translate(460 0) scale(-1 1)" />
|
||||
<path class="bp-axis" d="M 230 30 V 540" />
|
||||
<g class="bp-flow">
|
||||
<path pathLength="1" d="M 230 120 V 220" />
|
||||
<path d="M 230 220 l -5 -10 M 230 220 l 5 -10" />
|
||||
</g>
|
||||
<g class="bp-label">
|
||||
<path class="bp-lead" d="M 218 55 H 150" />
|
||||
<text x="144" y="59" text-anchor="end">인젝터</text>
|
||||
<path class="bp-lead" d="M 168 160 H 96" />
|
||||
<text x="90" y="164" text-anchor="end">연소실</text>
|
||||
<path class="bp-lead" d="M 200 275 H 78" />
|
||||
<text x="72" y="279" text-anchor="end">스로트</text>
|
||||
<path class="bp-lead" d="M 128 400 H 60" />
|
||||
<text x="54" y="404" text-anchor="end">노즐</text>
|
||||
<path class="bp-lead" d="M 300 150 H 286" />
|
||||
<text x="306" y="155">재생냉각</text>
|
||||
<text x="306" y="173">유로 (CH₄)</text>
|
||||
</g>
|
||||
<g class="bp-dim">
|
||||
<path d="M 60 500 H 96 M 78 500 V 520" />
|
||||
<text x="60" y="542">Ø 460 노즐 출구</text>
|
||||
</g>
|
||||
</svg>
|
||||
<figcaption class="stage-cap">
|
||||
<span class="cap-no">도면 01</span>
|
||||
<span>ORBIT-75 종단면. 재생냉각 벽은 2겹으로 단순화했고, 시안 선이 메탄 유로입니다</span>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<section id="spec" class="section band" aria-labelledby="spec-h">
|
||||
<section id="spec" class="section" aria-labelledby="spec-h">
|
||||
<div class="wrap">
|
||||
<h2 id="spec-h" class="reveal">사양 예시</h2>
|
||||
<div class="table-wrap reveal" style="--delay: 80ms">
|
||||
<h2 id="spec-h">값 여섯 개, 측정 조건을 같은 줄에 적었습니다</h2>
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<caption class="sr-only">ORBIT-75 엔진 사양 예시 — 항목, 값, 조건</caption>
|
||||
<caption class="sr-only">ORBIT-75 엔진 사양: 항목, 값, 측정 조건</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">항목</th>
|
||||
|
|
@ -163,42 +201,41 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<tr id="spec-thrust">
|
||||
<th scope="row">추력 (해수면)</th>
|
||||
<td class="num">75.4 kN</td>
|
||||
<td>지상 시험 스탠드 · 정상 상태 30초 평균</td>
|
||||
<td>지상 시험 스탠드, 정상 상태 30초 평균</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<tr id="spec-isp">
|
||||
<th scope="row">비추력 Isp (진공)</th>
|
||||
<td class="num">325.8 s</td>
|
||||
<td>고도 모사 노즐 · 추진제 혼합비 3.4</td>
|
||||
<td>고도 모사 노즐, 추진제 혼합비 3.4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<tr id="spec-pc">
|
||||
<th scope="row">연소실 압력</th>
|
||||
<td class="num">12.5 MPa</td>
|
||||
<td>피에조 계측 · 샘플링 1kHz</td>
|
||||
<td>피에조 계측, 샘플링 1 kHz</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<tr id="spec-cycle">
|
||||
<th scope="row">사이클</th>
|
||||
<td class="num">다단연소</td>
|
||||
<td>연료리치 프리버너 1기</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<tr id="spec-cooling">
|
||||
<th scope="row">냉각</th>
|
||||
<td class="num">재생냉각</td>
|
||||
<td>구리합금 채널 180개 · CH₄ 유량 92%</td>
|
||||
<td>구리합금 채널 180개, CH₄ 유량 92%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">시동 신호→연소</th>
|
||||
<tr id="spec-start">
|
||||
<th scope="row">시동 신호에서 연소까지</th>
|
||||
<td class="num">2.8 s</td>
|
||||
<td>TEA-TEB 점화 · 12회 평균</td>
|
||||
<td>TEA-TEB 점화, 12회 평균</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="measure-note reveal" style="--delay: 140ms">
|
||||
표의 값과 조건은 사양서가 수치의 범위와 측정 상황을 함께 보여 주는
|
||||
방식을 설명하기 위한 예시입니다.
|
||||
<p class="measure-note">
|
||||
추력 값은 측정 조건이 같아야 비교할 수 있습니다. 해수면과 진공 여부, 평균 구간을 값과 같은 줄에 적었습니다.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -206,15 +243,14 @@
|
|||
<section id="fires" class="section" aria-labelledby="fires-h">
|
||||
<div class="wrap fires-grid">
|
||||
<div class="fires-text">
|
||||
<h2 id="fires-h">지상 연소 기록 형식</h2>
|
||||
<h2 id="fires-h">지상 연소 다섯 회, 보류한 두 회도 기록에 남겼습니다</h2>
|
||||
<p>
|
||||
도면만으로는 판단할 수 없는 항목을 결과와 함께 남기는 기록 형식입니다.
|
||||
보류·완료 표기는 실제 시험 이력이 아니라 기록 구조의 예시입니다.
|
||||
중단 원인을 다음 시험 조건에 반영하기 때문입니다. SF-28의 냉각유로 압력 강하를 보고 SF-29의 유량을 조정했습니다.
|
||||
</p>
|
||||
</div>
|
||||
<div class="table-wrap reveal">
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<caption class="sr-only">지상 연소 시험 기록 — 번호, 날짜, 지속, 결과</caption>
|
||||
<caption class="sr-only">지상 연소 시험 기록: 번호, 날짜, 지속 시간, 결과</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">시험</th>
|
||||
|
|
@ -224,88 +260,143 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th scope="row">SF-31</th><td>2026-07-18</td><td class="num">62 s</td><td>완료 · 노즐 온도 상한 내</td></tr>
|
||||
<tr><th scope="row">SF-30</th><td>2026-06-27</td><td class="num">31 s</td><td>보류 · 프리버너 시동 지연</td></tr>
|
||||
<tr><th scope="row">SF-29</th><td>2026-06-02</td><td class="num">60 s</td><td>완료 · 추력 편차 0.4%</td></tr>
|
||||
<tr><th scope="row">SF-28</th><td>2026-05-11</td><td class="num">12 s</td><td>보류 · 냉각유로 압력 강하</td></tr>
|
||||
<tr><th scope="row">SF-27</th><td>2026-04-20</td><td class="num">58 s</td><td>완료</td></tr>
|
||||
<tr id="sf-31"><th scope="row">SF-31</th><td class="date">2026-07-18</td><td class="num">62 s</td><td>완료, 노즐 온도 상한 내</td></tr>
|
||||
<tr id="sf-30"><th scope="row">SF-30</th><td class="date">2026-06-27</td><td class="num">31 s</td><td>보류, 프리버너 시동 지연</td></tr>
|
||||
<tr id="sf-29"><th scope="row">SF-29</th><td class="date">2026-06-02</td><td class="num">60 s</td><td>완료, 추력 편차 0.4%</td></tr>
|
||||
<tr id="sf-28"><th scope="row">SF-28</th><td class="date">2026-05-11</td><td class="num">12 s</td><td>보류, 냉각유로 압력 강하</td></tr>
|
||||
<tr id="sf-27"><th scope="row">SF-27</th><td class="date">2026-04-20</td><td class="num">58 s</td><td>완료</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section plate" aria-label="가상 지상 연소 기록 연출 이미지">
|
||||
<figure class="plate-fig reveal">
|
||||
<img
|
||||
src="./assets/static-fire.webp"
|
||||
alt="가상 지상 연소 기록을 위한 연출 이미지 — 붉게 빛나는 노즐과 배기 기둥"
|
||||
width="1440"
|
||||
height="810"
|
||||
loading="lazy"
|
||||
/>
|
||||
<figcaption class="wrap">지상 연소 연출 이미지 · 가상 시험 기록</figcaption>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<section class="section cooling" aria-labelledby="cool-h">
|
||||
<section id="cooling" class="section cooling" aria-labelledby="cool-h">
|
||||
<div class="wrap two">
|
||||
<figure class="two-photo reveal">
|
||||
<div class="two-text">
|
||||
<h2 id="cool-h">연료가 구리 유로 180개를 지나며 벽을 식힙니다</h2>
|
||||
<p>
|
||||
재생냉각 방식에서는 벽의 열을 흡수한 메탄이 그대로 연소실로 들어갑니다. 냉각에 쓴 연료를 버리지 않기 때문에 냉각과 추력에 같은 유량을 나눠 씁니다.
|
||||
</p>
|
||||
<p class="muted">
|
||||
유로 폭이 조금만 달라져도 벽 온도와 압력 강하가 함께 바뀌므로 단면도에 유로를 따로 표기했습니다.
|
||||
</p>
|
||||
</div>
|
||||
<figure class="panel glass two-photo">
|
||||
<img
|
||||
src="./assets/channel-macro.webp"
|
||||
alt="재생냉각 유로를 설명하는 가상 구리합금 단면 연출 이미지"
|
||||
alt="재생냉각 유로가 드러난 구리합금 연소실 벽 단면 연출 이미지"
|
||||
width="900"
|
||||
height="1200"
|
||||
loading="lazy"
|
||||
/>
|
||||
<figcaption>연소실 유로 접사 · 밀링 후 청소 전</figcaption>
|
||||
<figcaption class="panel-cap">
|
||||
<span class="cap-no">사진 01</span>
|
||||
<span>연소실 유로 접사, 밀링 후 청소 전. 연출 이미지</span>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<div class="two-text">
|
||||
<h2 id="cool-h">재생냉각 원리를<br />읽는 예시</h2>
|
||||
<p>
|
||||
재생냉각은 추진제가 벽을 지나는 동안 열을 가져가도록 설계하는 방식을
|
||||
말합니다. 여기의 온도·유로 수·치수는 그 관계를 설명하는 예시이며 실제
|
||||
엔진의 운용 한계나 설계값이 아닙니다.
|
||||
</p>
|
||||
<p class="muted">
|
||||
작은 유로 치수도 열과 압력의 관계에 영향을 준다는 점을 도면에서 읽게
|
||||
하는 것이 이 예시의 목적입니다.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="contact" class="section band contact" aria-labelledby="contact-h">
|
||||
<section id="plate" class="section plate" aria-labelledby="plate-h">
|
||||
<div class="wrap">
|
||||
<h2 id="plate-h">SF-31, 62초 지상 연소</h2>
|
||||
<figure class="panel glass plate-fig">
|
||||
<img
|
||||
src="./assets/static-fire.webp"
|
||||
alt="지상 연소 연출 이미지: 붉게 빛나는 노즐과 배기 기둥"
|
||||
width="1440"
|
||||
height="810"
|
||||
loading="lazy"
|
||||
/>
|
||||
<figcaption class="panel-cap">
|
||||
<span class="cap-no">사진 02</span>
|
||||
<span>2026-07-18 지상 시험 스탠드. 연출 이미지</span>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="contact" class="section contact" aria-labelledby="contact-h">
|
||||
<div class="wrap contact-grid">
|
||||
<h2 id="contact-h">구성 안내</h2>
|
||||
<h2 id="contact-h">기술 자료 요청은 받지 않습니다</h2>
|
||||
<p>
|
||||
이 페이지는 엔진 사양·도면·시험 기록을 한 흐름으로 보여 주는 가상
|
||||
프로젝트입니다. 발사체 통합, 시험 데이터, 기술 자료 요청을 받지 않습니다.
|
||||
궤도 우주공학은 가상 브랜드 쇼케이스입니다. 엔진 수치, 시험 기록, 도면은 모두 예시이며 발사체 통합 문의와 시험 데이터 요청을 받지 않습니다.
|
||||
</p>
|
||||
<a class="btn" href="#spec">사양 형식 다시 보기</a>
|
||||
<a class="btn" href="#spec">사양 다시 보기</a>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="site-foot">
|
||||
<div class="wrap foot-inner">
|
||||
<p>궤도 우주공학 · 가상 엔진 사양서</p>
|
||||
<p class="mono foot-meta">SPECIFICATION FORMAT STUDY</p>
|
||||
<div class="wrap foot-grid">
|
||||
<section class="foot-col" aria-labelledby="foot-spec">
|
||||
<h2 id="foot-spec" class="foot-h">사양 항목</h2>
|
||||
<ul>
|
||||
<li><a href="#spec-thrust">추력 75.4 kN</a></li>
|
||||
<li><a href="#spec-isp">비추력 325.8 s</a></li>
|
||||
<li><a href="#spec-pc">연소실 압력 12.5 MPa</a></li>
|
||||
<li><a href="#spec-cycle">사이클 다단연소</a></li>
|
||||
<li><a href="#spec-cooling">냉각 유로 180개</a></li>
|
||||
<li><a href="#spec-start">시동 2.8 s</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="foot-col" aria-labelledby="foot-fires">
|
||||
<h2 id="foot-fires" class="foot-h">지상 연소 시험</h2>
|
||||
<ul>
|
||||
<li><a href="#sf-31">SF-31 완료 62 s</a></li>
|
||||
<li><a href="#sf-30">SF-30 보류 31 s</a></li>
|
||||
<li><a href="#sf-29">SF-29 완료 60 s</a></li>
|
||||
<li><a href="#sf-28">SF-28 보류 12 s</a></li>
|
||||
<li><a href="#sf-27">SF-27 완료 58 s</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="foot-col" aria-labelledby="foot-media">
|
||||
<h2 id="foot-media" class="foot-h">도면과 사진</h2>
|
||||
<ul>
|
||||
<li><a href="#engine">도면 01 종단면</a></li>
|
||||
<li><a href="#cooling">사진 01 유로 접사</a></li>
|
||||
<li><a href="#plate">사진 02 지상 연소</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="foot-col" aria-labelledby="foot-brand">
|
||||
<h2 id="foot-brand" class="foot-h">궤도 우주공학</h2>
|
||||
<ul>
|
||||
<li>가상 브랜드 쇼케이스</li>
|
||||
<li>수치와 기록은 모두 예시</li>
|
||||
<li>값 옆에 측정 조건을 적는 표기</li>
|
||||
<li><a href="#contact">자료 요청 안내</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
const io = new IntersectionObserver(
|
||||
(entries) => {
|
||||
for (const e of entries) {
|
||||
if (!e.isIntersecting) continue;
|
||||
e.target.classList.add("is-in");
|
||||
io.unobserve(e.target);
|
||||
// 측면 색인의 현재 위치 표시. 등장 모션이 아니라 내비 상태다(layout §2-c "현재 위치 표시").
|
||||
(function () {
|
||||
var links = document.querySelectorAll(".index-list a[data-part]");
|
||||
if (!links.length || !("IntersectionObserver" in window)) return;
|
||||
var byId = {};
|
||||
links.forEach(function (a) { byId[a.getAttribute("data-part")] = a; });
|
||||
var setCurrent = function (id) {
|
||||
links.forEach(function (a) {
|
||||
if (a.getAttribute("data-part") === id) a.setAttribute("aria-current", "true");
|
||||
else a.removeAttribute("aria-current");
|
||||
});
|
||||
};
|
||||
var visible = {};
|
||||
var io = new IntersectionObserver(function (entries) {
|
||||
entries.forEach(function (e) { visible[e.target.id] = e.isIntersecting; });
|
||||
var order = Object.keys(byId);
|
||||
for (var i = 0; i < order.length; i += 1) {
|
||||
if (visible[order[i]]) { setCurrent(order[i]); return; }
|
||||
}
|
||||
},
|
||||
{ rootMargin: "0px 0px -8% 0px", threshold: 0.05 },
|
||||
);
|
||||
for (const el of document.querySelectorAll(".reveal")) io.observe(el);
|
||||
}, { rootMargin: "-35% 0px -55% 0px", threshold: 0 });
|
||||
Object.keys(byId).forEach(function (id) {
|
||||
var el = document.getElementById(id);
|
||||
if (el) io.observe(el);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
@import url("./tokens.css?v=20260912all");
|
||||
@import url("./tokens.css?v=20261006");
|
||||
|
||||
/* ==========================================================================
|
||||
궤도 우주공학 — technical-schematic. 사양서 1페이지.
|
||||
궤도 우주공학 — ORBIT-75 사양서. 표제 + 전폭 도면 무대, 오른쪽 측면 색인, 다열 색인 푸터.
|
||||
========================================================================== */
|
||||
|
||||
*,
|
||||
|
|
@ -18,6 +18,7 @@ html {
|
|||
scroll-behavior: smooth;
|
||||
background: var(--surface);
|
||||
color-scheme: dark;
|
||||
font-synthesis-style: none;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
html {
|
||||
|
|
@ -29,42 +30,52 @@ body {
|
|||
background: var(--surface);
|
||||
color: var(--ink);
|
||||
font-family: var(--font-body);
|
||||
font-weight: var(--weight-body);
|
||||
font-size: var(--step-0);
|
||||
line-height: var(--leading-normal);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
:where(h1, h2) {
|
||||
font-weight: 500;
|
||||
line-height: var(--leading-tight);
|
||||
letter-spacing: -0.015em;
|
||||
/* 한글 조판 정본(typography §6-5) */
|
||||
:lang(ko) {
|
||||
word-break: keep-all;
|
||||
overflow-wrap: break-word;
|
||||
text-wrap: balance;
|
||||
overflow-wrap: anywhere;
|
||||
line-break: strict;
|
||||
}
|
||||
h1 {
|
||||
font-size: var(--step-3);
|
||||
:lang(ko) :is(em, i, cite, dfn, var, address) {
|
||||
font-style: normal;
|
||||
}
|
||||
h2 {
|
||||
font-size: var(--step-2);
|
||||
}
|
||||
:where(p, th, td, figcaption) {
|
||||
word-break: keep-all;
|
||||
overflow-wrap: break-word;
|
||||
line-height: var(--leading-normal);
|
||||
text-wrap: pretty;
|
||||
:lang(ko) a {
|
||||
text-underline-position: under;
|
||||
}
|
||||
|
||||
.lead {
|
||||
color: var(--ink-muted);
|
||||
max-width: 34em;
|
||||
h1 {
|
||||
font-family: var(--font-display);
|
||||
font-weight: 400;
|
||||
font-size: var(--step-display);
|
||||
line-height: var(--leading-tight);
|
||||
letter-spacing: -0.01em;
|
||||
word-spacing: -0.3em; /* Orbit은 띄어쓰기도 한 칸 전각이라 낱말 사이가 벌어진다. 실측 후 줄였다 */
|
||||
text-wrap: balance;
|
||||
}
|
||||
h2 {
|
||||
font-weight: var(--weight-strong);
|
||||
font-size: var(--step-2);
|
||||
line-height: var(--leading-heading);
|
||||
letter-spacing: -0.01em;
|
||||
max-width: 24em;
|
||||
text-wrap: balance;
|
||||
}
|
||||
:where(p, th, td, dd, dt, figcaption, li) {
|
||||
text-wrap: pretty;
|
||||
}
|
||||
p {
|
||||
max-width: var(--measure);
|
||||
}
|
||||
|
||||
.muted {
|
||||
color: var(--ink-muted);
|
||||
}
|
||||
.mono {
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
a {
|
||||
color: inherit;
|
||||
}
|
||||
|
|
@ -99,146 +110,149 @@ a {
|
|||
margin-inline: auto;
|
||||
}
|
||||
|
||||
/* ── 헤더 ─────────────────────────────────────────────────────────────── */
|
||||
/* ── 측면 색인 — 좁은 화면에서는 위쪽 차례 띠, 넓은 화면에서는 오른쪽 고정 레일 ───── */
|
||||
|
||||
.site-head {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 50;
|
||||
background: color-mix(in srgb, var(--surface) 86%, transparent);
|
||||
backdrop-filter: blur(8px);
|
||||
border-bottom: 1px solid var(--line);
|
||||
}
|
||||
.head-inner {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
justify-content: space-between;
|
||||
gap: var(--space-4);
|
||||
padding-block: var(--space-3);
|
||||
.index {
|
||||
padding: var(--space-3) var(--pad-inline) 0;
|
||||
}
|
||||
.wordmark {
|
||||
display: inline-block;
|
||||
font-weight: var(--weight-strong);
|
||||
font-size: var(--step-1);
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.wordmark-en {
|
||||
color: var(--ink-faint);
|
||||
font-family: var(--font-mono);
|
||||
font-size: var(--step--1);
|
||||
font-weight: 400;
|
||||
margin-left: var(--space-2);
|
||||
}
|
||||
.nav {
|
||||
.index-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin-top: var(--space-2);
|
||||
display: flex;
|
||||
gap: clamp(var(--space-3), 2vw, var(--space-5));
|
||||
flex-wrap: wrap;
|
||||
gap: var(--space-1) var(--space-3);
|
||||
font-size: var(--step--1);
|
||||
}
|
||||
.nav a {
|
||||
text-decoration: none;
|
||||
color: var(--ink-muted);
|
||||
padding-block: 2px;
|
||||
border-bottom: 1px solid transparent;
|
||||
transition: color var(--dur-quick) var(--ease-soft),
|
||||
border-color var(--dur-quick) var(--ease-soft);
|
||||
}
|
||||
.nav a:hover {
|
||||
color: var(--ink);
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
/* ── 히어로 + 단면도 ──────────────────────────────────────────────────── */
|
||||
|
||||
.hero {
|
||||
padding-block: var(--space-8) var(--space-7);
|
||||
border-bottom: 1px solid var(--line);
|
||||
}
|
||||
.hero-grid {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 6fr) minmax(0, 5fr);
|
||||
gap: var(--space-6) var(--space-7);
|
||||
align-items: center;
|
||||
}
|
||||
.hero-kicker {
|
||||
font-family: var(--font-mono);
|
||||
font-size: var(--step--1);
|
||||
color: var(--accent);
|
||||
letter-spacing: 0.08em;
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
.hero .lead {
|
||||
margin-top: var(--space-4);
|
||||
}
|
||||
.hero .btn {
|
||||
margin-top: var(--space-5);
|
||||
}
|
||||
.run-register {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: var(--space-3);
|
||||
margin-top: var(--space-5);
|
||||
padding-top: var(--space-3);
|
||||
border-top: 1px solid var(--line-strong);
|
||||
}
|
||||
.run-register > div {
|
||||
min-width: 0;
|
||||
}
|
||||
.run-register dt,
|
||||
.run-register dd {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.6875rem;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
.run-register dt {
|
||||
color: var(--accent);
|
||||
}
|
||||
.run-register dd {
|
||||
margin-top: 0.2rem;
|
||||
color: var(--ink-muted);
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
.btn {
|
||||
.index-list a {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
min-height: 44px;
|
||||
border: 1px solid var(--accent);
|
||||
color: var(--accent);
|
||||
gap: 0.4em;
|
||||
min-height: 32px;
|
||||
padding-block: 2px;
|
||||
color: var(--ink-muted);
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
padding: 0.7rem 1.4rem;
|
||||
border-radius: var(--radius);
|
||||
transition: background var(--dur-quick) var(--ease-soft),
|
||||
color var(--dur-quick) var(--ease-soft);
|
||||
border-bottom: 1px solid transparent;
|
||||
transition: color var(--dur-quick) var(--ease-soft), border-color var(--dur-quick) var(--ease-soft);
|
||||
}
|
||||
.btn:hover {
|
||||
background: var(--accent);
|
||||
color: var(--surface);
|
||||
.index-no {
|
||||
font-family: var(--font-display);
|
||||
font-size: 0.75rem;
|
||||
color: var(--ink-faint);
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
.index-list a:hover {
|
||||
color: var(--ink);
|
||||
}
|
||||
.index-list a[aria-current="true"] {
|
||||
color: var(--accent);
|
||||
border-bottom-color: var(--accent);
|
||||
}
|
||||
.index-list a[aria-current="true"] .index-no {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
/* 단면도 */
|
||||
.blueprint {
|
||||
background-color: var(--surface-raised);
|
||||
background-image:
|
||||
linear-gradient(color-mix(in srgb, var(--line) 78%, transparent) 1px, transparent 1px),
|
||||
linear-gradient(90deg, color-mix(in srgb, var(--line) 78%, transparent) 1px, transparent 1px);
|
||||
background-size: 2.5rem 2.5rem;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--radius);
|
||||
padding: var(--space-4) var(--space-3) var(--space-3);
|
||||
/* ── 히어로: 표제 + 사실 목록 → 전폭 무대 ──────────────────────────────── */
|
||||
|
||||
.hero {
|
||||
position: relative;
|
||||
isolation: isolate;
|
||||
padding-top: var(--space-7);
|
||||
}
|
||||
.blueprint svg {
|
||||
.hero-head {
|
||||
display: grid;
|
||||
gap: var(--space-5);
|
||||
}
|
||||
.facts {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: var(--space-3) var(--space-4);
|
||||
}
|
||||
.facts > div {
|
||||
min-width: 0;
|
||||
padding-top: var(--space-2);
|
||||
border-top: 1px solid var(--line-strong);
|
||||
}
|
||||
.facts dt {
|
||||
font-size: var(--step--1);
|
||||
color: var(--ink-faint);
|
||||
}
|
||||
.facts dd {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: baseline;
|
||||
gap: 0 var(--space-2);
|
||||
}
|
||||
.fact-value {
|
||||
font-weight: var(--weight-strong);
|
||||
font-size: var(--step-2);
|
||||
line-height: 1.2;
|
||||
color: var(--ink);
|
||||
font-variant-numeric: tabular-nums;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.fact-cond {
|
||||
font-size: var(--step--1);
|
||||
color: var(--ink-muted);
|
||||
}
|
||||
|
||||
/* 전폭 무대 — 유리판 위의 도면. 뒤에는 시안 글로우가 있어 흐림이 보인다 */
|
||||
.stage {
|
||||
position: relative;
|
||||
margin-top: var(--space-6);
|
||||
margin-inline: var(--space-3);
|
||||
padding: var(--space-4) var(--space-4) var(--space-3);
|
||||
/* 모눈은 도면 표면에만 */
|
||||
background-image:
|
||||
linear-gradient(color-mix(in srgb, var(--line) 85%, transparent) 1px, transparent 1px),
|
||||
linear-gradient(90deg, color-mix(in srgb, var(--line) 85%, transparent) 1px, transparent 1px);
|
||||
background-size: 2.5rem 2.5rem;
|
||||
background-position: center;
|
||||
}
|
||||
.hero::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
z-index: -1;
|
||||
background:
|
||||
radial-gradient(60% 50% at 70% 70%, var(--accent-glow), transparent 70%),
|
||||
radial-gradient(40% 40% at 20% 90%, rgb(24 155 220 / 0.12), transparent 70%);
|
||||
pointer-events: none;
|
||||
}
|
||||
.bp {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
max-height: 78vh;
|
||||
}
|
||||
.blueprint figcaption {
|
||||
font-family: var(--font-mono);
|
||||
.bp-tall {
|
||||
display: none;
|
||||
max-width: 24rem;
|
||||
margin-inline: auto;
|
||||
}
|
||||
.stage-cap,
|
||||
.panel-cap {
|
||||
display: flex;
|
||||
gap: var(--space-3);
|
||||
align-items: baseline;
|
||||
margin-top: var(--space-3);
|
||||
font-size: var(--step--1);
|
||||
color: var(--ink-on-glass); /* 유리·모눈 위 텍스트는 대비를 올린다(svg-glass §3 vibrancy). 실측 4.0 → 재측정 */
|
||||
}
|
||||
.cap-no {
|
||||
font-family: var(--font-display);
|
||||
font-size: 0.75rem;
|
||||
color: var(--ink-faint);
|
||||
margin-top: var(--space-2);
|
||||
text-align: center;
|
||||
color: var(--accent);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* 도면 선 */
|
||||
.bp-wall {
|
||||
fill: none;
|
||||
stroke: var(--ink);
|
||||
|
|
@ -253,7 +267,9 @@ a {
|
|||
.bp-cool {
|
||||
fill: none;
|
||||
stroke: var(--accent-stroke);
|
||||
stroke-width: 1.25;
|
||||
stroke-width: 1.5;
|
||||
stroke-dasharray: 1;
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
.bp-block {
|
||||
fill: none;
|
||||
|
|
@ -270,11 +286,18 @@ a {
|
|||
stroke: var(--accent);
|
||||
stroke-width: 1.2;
|
||||
}
|
||||
.bp-flow path[pathLength] {
|
||||
stroke-dasharray: 1;
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
.bp-label text {
|
||||
font-family: var(--font-body);
|
||||
font-size: 13px;
|
||||
font-size: 18px;
|
||||
fill: var(--ink);
|
||||
}
|
||||
.bp-tall .bp-label text {
|
||||
font-size: 16px;
|
||||
}
|
||||
.bp-lead {
|
||||
stroke: var(--accent);
|
||||
stroke-width: 1;
|
||||
|
|
@ -285,25 +308,102 @@ a {
|
|||
stroke-width: 0.8;
|
||||
}
|
||||
.bp-dim text {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 11px;
|
||||
font-family: var(--font-body);
|
||||
font-variant-numeric: tabular-nums;
|
||||
font-size: 16px;
|
||||
fill: var(--ink-muted);
|
||||
}
|
||||
.bp-tall .bp-dim text {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* 스크롤에 따라 유로가 그어진다 — 가드 안에 초기 상태를 둔다(motion §3 코드 B). 도면 한 곳만 */
|
||||
@supports (animation-timeline: scroll()) {
|
||||
.bp-cool,
|
||||
.bp-flow path[pathLength] {
|
||||
animation: bp-draw 1ms linear both;
|
||||
animation-timeline: scroll(root block);
|
||||
animation-range: 0 60vh;
|
||||
}
|
||||
@keyframes bp-draw {
|
||||
from {
|
||||
stroke-dashoffset: 0.55;
|
||||
}
|
||||
to {
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.bp-cool,
|
||||
.bp-flow path[pathLength] {
|
||||
animation: none;
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* ── 유리 패널(svg-glass §1 헤어라인, §3 위계) ───────────────────────────── */
|
||||
|
||||
.glass {
|
||||
position: relative;
|
||||
background-color: var(--glass-fill);
|
||||
border-radius: var(--radius);
|
||||
box-shadow: var(--glass-shadow), inset 0 1px 0 rgb(255 255 255 / 0.05);
|
||||
backdrop-filter: blur(var(--glass-blur)) saturate(1.25);
|
||||
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(1.25);
|
||||
}
|
||||
.glass::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
padding: 1px;
|
||||
border-radius: inherit;
|
||||
background: var(--glass-rim);
|
||||
-webkit-mask: linear-gradient(black 0 0) content-box, linear-gradient(black 0 0);
|
||||
mask: linear-gradient(black 0 0) content-box, linear-gradient(black 0 0);
|
||||
-webkit-mask-composite: xor;
|
||||
mask-composite: exclude;
|
||||
pointer-events: none;
|
||||
}
|
||||
@media (prefers-reduced-transparency: reduce) {
|
||||
.glass {
|
||||
background-color: var(--surface-raised);
|
||||
backdrop-filter: blur(4px);
|
||||
-webkit-backdrop-filter: blur(4px);
|
||||
}
|
||||
}
|
||||
|
||||
.panel {
|
||||
padding: var(--space-3);
|
||||
}
|
||||
.panel img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: var(--radius);
|
||||
}
|
||||
|
||||
/* ── 섹션 공통 ────────────────────────────────────────────────────────── */
|
||||
|
||||
.section {
|
||||
padding-block: var(--space-8);
|
||||
}
|
||||
.band {
|
||||
background: var(--surface-raised);
|
||||
border-block: 1px solid var(--line);
|
||||
.section + .section {
|
||||
border-top: 1px solid var(--line);
|
||||
}
|
||||
.hero + .section {
|
||||
border-top: 0;
|
||||
}
|
||||
/* 사양표와 시험 기록은 같은 "기록" 묶음 — 사이를 좁히고 선을 긋지 않는다(묶음 안 < 묶음 사이) */
|
||||
#fires {
|
||||
border-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
/* ── 표 ───────────────────────────────────────────────────────────────── */
|
||||
|
||||
.table-wrap {
|
||||
margin-top: var(--space-4);
|
||||
margin-top: var(--space-5);
|
||||
overflow-x: auto;
|
||||
}
|
||||
table {
|
||||
|
|
@ -312,14 +412,14 @@ table {
|
|||
}
|
||||
thead th {
|
||||
text-align: left;
|
||||
font-weight: 500;
|
||||
font-weight: var(--weight-strong);
|
||||
font-size: var(--step--1);
|
||||
color: var(--ink-faint);
|
||||
padding: var(--space-2) var(--space-3);
|
||||
border-bottom: 1px solid var(--ink-faint);
|
||||
border-bottom: 1px solid var(--line-strong);
|
||||
}
|
||||
tbody th {
|
||||
font-weight: 500;
|
||||
font-weight: var(--weight-strong);
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
|
@ -328,17 +428,34 @@ tbody th {
|
|||
padding: var(--space-3);
|
||||
border-bottom: 1px solid var(--line);
|
||||
vertical-align: baseline;
|
||||
/* 자동 폭 셀에서 anywhere는 열을 글자 단위로 쪼갠다(typography §6-5 예외) */
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
tbody td:not(.num, .date) {
|
||||
min-width: 12em;
|
||||
}
|
||||
.date {
|
||||
white-space: nowrap;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
tbody td:not(.num) {
|
||||
color: var(--ink-muted);
|
||||
font-size: var(--step--1);
|
||||
}
|
||||
.num {
|
||||
font-family: var(--font-mono);
|
||||
font-variant-numeric: tabular-nums;
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
}
|
||||
tbody .num {
|
||||
color: var(--accent);
|
||||
}
|
||||
tr:target {
|
||||
background: color-mix(in srgb, var(--accent) 10%, transparent);
|
||||
}
|
||||
tr:target th {
|
||||
color: var(--accent);
|
||||
}
|
||||
.measure-note {
|
||||
margin-top: var(--space-3);
|
||||
font-size: var(--step--1);
|
||||
|
|
@ -362,45 +479,52 @@ tbody td:not(.num) {
|
|||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* ── 시험 사진 판 ─────────────────────────────────────────────────────── */
|
||||
|
||||
.plate-fig img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
.plate-fig figcaption {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.75rem;
|
||||
color: var(--ink-faint);
|
||||
margin-top: var(--space-2);
|
||||
}
|
||||
|
||||
/* ── 재생냉각 2단 ─────────────────────────────────────────────────────── */
|
||||
/* ── 재생냉각 2단: 글 + 3:4 사진 유리 패널 ───────────────────────────────── */
|
||||
|
||||
.two {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
|
||||
grid-template-columns: minmax(0, 6fr) minmax(0, 5fr);
|
||||
gap: var(--space-6) var(--space-7);
|
||||
align-items: center;
|
||||
}
|
||||
.two-photo img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: var(--radius);
|
||||
}
|
||||
.two-photo figcaption {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.75rem;
|
||||
color: var(--ink-faint);
|
||||
margin-top: var(--space-2);
|
||||
}
|
||||
.two-text p + p {
|
||||
margin-top: var(--space-4);
|
||||
}
|
||||
.two-text h2 + p {
|
||||
margin-top: var(--space-4);
|
||||
}
|
||||
.cooling {
|
||||
position: relative;
|
||||
isolation: isolate;
|
||||
}
|
||||
.cooling::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
z-index: -1;
|
||||
background: radial-gradient(45% 60% at 80% 50%, var(--accent-glow), transparent 70%);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* ── 문의 ─────────────────────────────────────────────────────────────── */
|
||||
/* ── 연소 장면: 16:9 유리 패널 ──────────────────────────────────────────── */
|
||||
|
||||
.plate {
|
||||
position: relative;
|
||||
isolation: isolate;
|
||||
}
|
||||
.plate::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
z-index: -1;
|
||||
background: radial-gradient(50% 50% at 50% 70%, rgb(24 155 220 / 0.14), transparent 70%);
|
||||
pointer-events: none;
|
||||
}
|
||||
.plate-fig {
|
||||
margin-top: var(--space-5);
|
||||
}
|
||||
|
||||
/* ── 자료 요청 ───────────────────────────────────────────────────────── */
|
||||
|
||||
.contact-grid {
|
||||
display: grid;
|
||||
|
|
@ -412,76 +536,158 @@ tbody td:not(.num) {
|
|||
color: var(--ink-muted);
|
||||
max-width: 34em;
|
||||
}
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
min-height: 44px;
|
||||
border: 1px solid var(--accent);
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
font-weight: var(--weight-strong);
|
||||
padding: 0.7rem 1.4rem;
|
||||
border-radius: var(--radius);
|
||||
transition: background var(--dur-quick) var(--ease-soft), color var(--dur-quick) var(--ease-soft);
|
||||
}
|
||||
.btn:hover {
|
||||
background: var(--accent);
|
||||
color: var(--surface);
|
||||
}
|
||||
|
||||
/* ── 푸터 ─────────────────────────────────────────────────────────────── */
|
||||
/* ── 다열 색인 푸터 ───────────────────────────────────────────────────── */
|
||||
|
||||
.site-foot {
|
||||
border-top: 1px solid var(--line);
|
||||
padding-block: var(--space-4);
|
||||
border-top: 1px solid var(--line-strong);
|
||||
padding-block: var(--space-6) var(--space-7);
|
||||
font-size: var(--step--1);
|
||||
color: var(--ink-muted);
|
||||
}
|
||||
.foot-inner {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: var(--space-3) var(--space-5);
|
||||
flex-wrap: wrap;
|
||||
.foot-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: var(--space-5) var(--space-4);
|
||||
}
|
||||
.foot-meta {
|
||||
font-size: 0.75rem;
|
||||
color: var(--ink-faint);
|
||||
.foot-h {
|
||||
font-size: var(--step--1);
|
||||
font-weight: var(--weight-strong);
|
||||
color: var(--ink);
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
/* ── 등장 모션 ────────────────────────────────────────────────────────── */
|
||||
|
||||
.reveal {
|
||||
opacity: 0;
|
||||
translate: 0 12px;
|
||||
transition: opacity var(--dur-normal) var(--ease-soft),
|
||||
translate var(--dur-normal) var(--ease-soft);
|
||||
transition-delay: var(--delay, 0ms);
|
||||
.foot-col ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin-top: var(--space-3);
|
||||
}
|
||||
.reveal.is-in {
|
||||
opacity: 1;
|
||||
translate: 0 0;
|
||||
.foot-col li {
|
||||
padding-block: 0.15rem;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.reveal {
|
||||
opacity: 1;
|
||||
translate: 0 0;
|
||||
transition: none;
|
||||
}
|
||||
.foot-col li:not(:has(a)) {
|
||||
padding-block: 0.4rem; /* 링크 행(패딩 포함)과 같은 행 높이 */
|
||||
}
|
||||
.foot-col a {
|
||||
display: inline-block;
|
||||
padding-block: 0.25rem;
|
||||
color: var(--ink-muted);
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid transparent;
|
||||
transition: color var(--dur-quick) var(--ease-soft), border-color var(--dur-quick) var(--ease-soft);
|
||||
}
|
||||
.foot-col a:hover {
|
||||
color: var(--ink);
|
||||
border-bottom-color: var(--accent);
|
||||
}
|
||||
|
||||
/* ── 반응형 ───────────────────────────────────────────────────────────── */
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.hero-grid,
|
||||
@media (min-width: 72rem) {
|
||||
/* 레일: 오른쪽 고정. 긴 문서에서 현재 위치가 늘 보여야 하므로 고정한다(layout §2-c) */
|
||||
.index {
|
||||
position: fixed;
|
||||
top: var(--space-5);
|
||||
right: var(--space-4);
|
||||
bottom: var(--space-5);
|
||||
width: var(--rail-w);
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
text-align: right;
|
||||
z-index: 20;
|
||||
}
|
||||
.index-list {
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
gap: 0;
|
||||
}
|
||||
.index-list a {
|
||||
flex-direction: row-reverse;
|
||||
border-bottom: 0;
|
||||
border-right: 2px solid transparent;
|
||||
padding-right: var(--space-2);
|
||||
min-height: 36px;
|
||||
}
|
||||
.index-list a[aria-current="true"] {
|
||||
border-right-color: var(--accent);
|
||||
}
|
||||
.wrap {
|
||||
width: min(100% - 2 * var(--pad-inline) - var(--rail-w), var(--container));
|
||||
margin-left: max(var(--pad-inline), calc((100% - var(--container) - var(--rail-w)) / 2));
|
||||
}
|
||||
.stage {
|
||||
margin-inline: var(--space-4) calc(var(--rail-w) + var(--space-5));
|
||||
}
|
||||
.hero {
|
||||
padding-top: var(--space-8);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 56rem) {
|
||||
.facts {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
.fires-grid,
|
||||
.two,
|
||||
.contact-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: var(--space-5);
|
||||
}
|
||||
.hero,
|
||||
.two-photo {
|
||||
max-width: 26rem;
|
||||
}
|
||||
.section {
|
||||
padding-block: var(--space-6);
|
||||
}
|
||||
.foot-grid {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
}
|
||||
@media (max-width: 640px) {
|
||||
.run-register {
|
||||
@media (max-width: 40rem) {
|
||||
.hero {
|
||||
padding-top: var(--space-5);
|
||||
}
|
||||
.bp-wide {
|
||||
display: none;
|
||||
}
|
||||
.bp-tall {
|
||||
display: block;
|
||||
}
|
||||
.stage {
|
||||
margin-inline: 0;
|
||||
margin-top: var(--space-5);
|
||||
padding: var(--space-3);
|
||||
}
|
||||
.facts {
|
||||
grid-template-columns: 1fr;
|
||||
gap: var(--space-2);
|
||||
}
|
||||
}
|
||||
@media (max-width: 560px) {
|
||||
.head-inner {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: var(--space-1);
|
||||
}
|
||||
.nav {
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.fact-value {
|
||||
font-size: var(--step-1);
|
||||
}
|
||||
.index-list a {
|
||||
min-height: 36px;
|
||||
}
|
||||
.foot-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: var(--space-4);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,39 +1,64 @@
|
|||
/* ==========================================================================
|
||||
궤도 우주공학 — 디자인 토큰
|
||||
프리셋: technical-schematic
|
||||
컨셉 한 문장: 사양서 1페이지 — 도면은 말하지 않고 측정만 한다.
|
||||
레퍼런스: 방향 앵커 dogfood-aerospace(우주업종 기술 노출). 그 파일의 6축
|
||||
수치는 audit-references.md 에서 날조 판명 — 토큰은 브리프에서
|
||||
재정의. 실측 가능했던 사실만 계승: rocketlabcorp의 '엔진을 상품으로
|
||||
쓰는' 구성. 색은 야간 시험장(짙은 남흑 + 구리 노즐 열색)에서 왔다.
|
||||
하지 않은 것: 지표 배너(고객수·성공률), 로켓 3D 렌더, 발사 카운트다운,
|
||||
대문자 타이틀. 이유: 사양서의 신뢰는 측정 조건에서 나온다.
|
||||
궤도 우주공학 — 디자인 토큰 (2026-10-06 재작업)
|
||||
컨셉 한 문장: 발사체 통합 엔지니어가 ORBIT-75의 단면도와 사양을 한 화면에서
|
||||
읽고, 값마다 붙은 측정 조건으로 자기 발사체에 맞는지 판단한다.
|
||||
배정(plan.md): 표제 + 전폭 무대(도면 파노라마) · 측면 색인 · 다열 색인 푸터 ·
|
||||
Orbit / Noto Sans KR · 어두운 청 #081018 · 200° 시안 · radius 2px ·
|
||||
scroll-driven 도면 선 그리기 · svg-glass 패널
|
||||
레퍼런스: R1 이노스페이스 한빛-나노(어두운 바탕, 단위 붙은 사양 행, 전폭 궤도 도해),
|
||||
R2 Rocket Lab Electron(제품명 한 낱말 표제 + 전폭 무대, 다열 푸터),
|
||||
R3 developer.chrome.com 문서(오른쪽 측면 색인, aria-current)
|
||||
하지 않은 것: 모노 서체(JetBrains Mono — 하우스 룩), 구리 강조(59° — 다른 쇼케이스와
|
||||
30° 구간 충돌), 스크롤 리빌, 고정 상단 바, 지표 배너·3D 렌더·카운트다운.
|
||||
========================================================================== */
|
||||
|
||||
:root {
|
||||
/* 타입 — 최대(54px) ÷ 본문(16px) ≈ 3.4배 */
|
||||
/* 타입 — 표제(Orbit) 최대 ≈ 104px ÷ 본문 16px ≈ 6.5배. 극단은 표제 한 축에만 둔다 */
|
||||
--step--1: 0.8125rem;
|
||||
--step-0: 1rem;
|
||||
--step-1: 1.1875rem;
|
||||
--step-1: 1.125rem;
|
||||
--step-2: clamp(1.375rem, 1.2rem + 0.9vw, 1.75rem);
|
||||
--step-3: clamp(2rem, 1.4rem + 3vw, 3.375rem);
|
||||
--step-display: clamp(2.5rem, 1rem + 6vw, 6.5rem);
|
||||
|
||||
--leading-tight: 1.28;
|
||||
--leading-normal: 1.78;
|
||||
--leading-tight: 1.1;
|
||||
--leading-heading: 1.3;
|
||||
--leading-normal: 1.7;
|
||||
|
||||
--font-body: "Pretendard Variable", Pretendard, -apple-system, sans-serif;
|
||||
--font-mono: "JetBrains Mono", monospace;
|
||||
/* Orbit은 Google Fonts 한글 슬라이스를 가진다(2026-10-06 css2 응답에서 U+AC00~D7A3 범위 확인).
|
||||
한글·라틴·숫자 모두 Orbit으로 조판하고, 웨이트는 400 하나뿐이다 */
|
||||
--font-display: "Orbit", "Noto Sans KR", sans-serif;
|
||||
--font-body: "Noto Sans KR", -apple-system, "Apple SD Gothic Neo", "Malgun Gothic", sans-serif;
|
||||
|
||||
/* 색 — 야간 시험장: 남흑 배경, 구리 강조(텍스트·선), 청사진 흰선 */
|
||||
--weight-body: 400;
|
||||
--weight-strong: 500;
|
||||
|
||||
--measure: 36em;
|
||||
|
||||
/* 색 — 야간 시험장의 남흑 바탕(유지), 강조는 200° 시안(계기 눈금·냉각 유로).
|
||||
대비는 #081018 위 실측: ink 16.2 · muted 8.7 · faint 6.2 · accent 8.9 · accent-stroke 6.2 */
|
||||
--surface: #081018;
|
||||
--surface-raised: #0d1520;
|
||||
--ink: #e7ecf1;
|
||||
--ink-muted: #97a3af;
|
||||
--ink-faint: #7d8b99;
|
||||
--line: #1f2937;
|
||||
--line-strong: #33415280;
|
||||
--accent: #d08a5a; /* 구리 — 열색. 텍스트용 밝기 */
|
||||
--accent-stroke: #a45f33; /* 도면 선용 */
|
||||
--surface-raised: #0e1823;
|
||||
--ink: #e6edf3;
|
||||
--ink-muted: #a3b1be;
|
||||
--ink-faint: #8494a3;
|
||||
--ink-on-glass: #c3ced8; /* 유리 패널·모눈 위 캡션. 모눈 선 위에서도 4.5:1 이상 */
|
||||
--line: #1c2a38;
|
||||
--line-strong: #2b3b4c;
|
||||
--accent: #45bcf7;
|
||||
--accent-stroke: #189bdc;
|
||||
--accent-glow: rgb(24 155 220 / 0.22);
|
||||
|
||||
/* 유리 패널(svg-glass §1·§3) */
|
||||
--glass-fill: rgb(14 24 35 / 0.58);
|
||||
--glass-rim: linear-gradient(
|
||||
100deg,
|
||||
rgb(255 255 255 / 0.28) 0%,
|
||||
rgb(255 255 255 / 0.08) 26%,
|
||||
rgb(255 255 255 / 0.05) 58%,
|
||||
rgb(255 255 255 / 0.22) 100%
|
||||
);
|
||||
--glass-blur: 14px;
|
||||
--glass-shadow: 0 24px 48px -32px rgb(0 0 0 / 0.9);
|
||||
|
||||
--space-1: 0.25rem;
|
||||
--space-2: 0.5rem;
|
||||
|
|
@ -48,6 +73,7 @@
|
|||
|
||||
--container: 1240px;
|
||||
--pad-inline: clamp(1.25rem, 1rem + 2.5vw, 5rem);
|
||||
--rail-w: 11rem;
|
||||
|
||||
--dur-quick: 160ms;
|
||||
--dur-normal: 420ms;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue