From 54b96288794ad5985da099ce977af889e3fd30bf Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Thu, 20 Aug 2026 14:41:36 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=B0=EA=B2=BD=20=EC=82=AC=EC=A7=84?= =?UTF-8?q?=EC=9D=84=20gpt-image-2=20=EB=A1=9C=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EC=96=B4=20=EA=B8=B0=EC=A4=80=EB=A9=B4=EC=9D=84=20=EA=B0=95?= =?UTF-8?q?=ED=99=94=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CSS 그라디언트 광원만으로는 패럴랙스의 기준면이 약했다. 굴절과 그레인이 실제로 들어 있는 이미지를 Codex CLI 내장 image_gen(gpt-image-2)으로 생성했다. 스톡이 아니라 이 페이지의 토큰 값을 프롬프트에 그대로 넣어 만든 것이다. 바탕 #0B0E12, 광원은 좌상단 딥 틸 #4FD6C4 와 우하단 파랑 #3D7BD6 둘뿐 보라·마젠타·무지개 금지 — 슬롭 지문이다 "흰 본문 뒤에 깔리니 활자와 경쟁할 만큼 밝은 곳이 있으면 안 된다. 중앙은 조용하게, 밝기는 모서리 쪽에" 사물·글자·사람·플레어·보케·비네트 전부 금지 components/BgPhoto.astro CSS background-image 가 아니라 를 절대배치한다. background-image 로 깔면 항상 받고 최적화도 안 된다 설치 섹션은 flip 으로 좌우 반전 — 같은 그림으로 읽히지 않게 섹션 경계에서 끊기지 않게 위아래를 마스크로 지운다 패럴랙스는 -46/+46px 로 가장 느리다 빌드 결과 WebP 26KB / 14KB / 7KB. 소스도 PNG 2MB 대신 WebP 37KB. 재료·설치 섹션 대비 실패 0건. --- apps/site/design.md | 28 ++++++++ apps/site/src/assets/bg/bg-refraction.webp | Bin 0 -> 38366 bytes apps/site/src/components/BgPhoto.astro | 74 +++++++++++++++++++++ apps/site/src/components/Install.astro | 4 +- apps/site/src/components/Materials.astro | 4 +- apps/site/src/styles/base.css | 3 +- 6 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 apps/site/src/assets/bg/bg-refraction.webp create mode 100644 apps/site/src/components/BgPhoto.astro diff --git a/apps/site/design.md b/apps/site/design.md index fe35366..7ed32df 100644 --- a/apps/site/design.md +++ b/apps/site/design.md @@ -222,6 +222,34 @@ WebGL 게이트: `prefers-reduced-motion` 이면 **아예 시작하지 않는다 **실측 3층** (스크롤 1000 → 1600): 격자 **+14.9px** · 산출물 **-14px** · 단계명 **0**. 한 층은 반드시 고정이다. 전부 움직이면 기준이 없어 그냥 흔들리는 페이지가 된다. +### 배경 사진 (gpt-image-2 로 생성) + +CSS 그라디언트 광원만으로는 기준면이 약해서, 굴절과 그레인이 실제로 들어 있는 이미지를 넣었다. +Codex CLI 의 내장 `image_gen`(gpt-image-2)을 ChatGPT 구독 인증으로 호출해 만들었다 — 스톡 이미지가 아니다. + +프롬프트는 **이 페이지의 토큰 값을 그대로** 넣었다: + +- 바탕 `#0B0E12` — 순흑도 네이비도 아니게 +- 광원 **둘만**: 좌상단 딥 틸 `#4FD6C4`, 우하단 채도 낮은 파랑 `#3D7BD6`. + 보라·마젠타·바이올렛·무지개·따뜻한 색 **금지** (슬롭 지문) +- 프로스티드 글래스 판이 거의 옆에서 보이게 겹쳐, 가장자리만 얇게 빛나고 가운데는 거의 안 보이게 +- **대비를 아주 낮고 고르게** — "이 이미지는 흰 본문 텍스트 뒤에 깔린다. 활자와 경쟁할 만큼 + 밝은 곳이 있으면 안 된다. 중앙 띠는 조용하고 어둡게, 밝기는 모서리 쪽에" +- 미세 필름 그레인, 밴딩 없이 +- 금지: 사물·로고·글자·숫자·사람·렌즈 플레어·보케·딱딱한 도형·비네트 + +`components/BgPhoto.astro` 로 감쌌다. CSS `background-image` 가 아니라 `` 를 +절대배치한다 — background-image 로 깔면 **항상 받고 최적화도 안 된다.** +같은 이미지를 설치 섹션에서는 `flip` 으로 좌우 반전해 같은 그림으로 읽히지 않게 했다. + +| 크기 | 빌드 결과 (WebP) | +|---|---| +| 1920px | **26KB** | +| 1400px | 14KB | +| 860px | 7KB | + +추상 그라디언트라 압축이 잘 붙는다. 소스도 PNG 2MB 대신 **WebP 37KB** 로 두었다. + ## 그리드의 `wide` 트랙을 좁은 화면에서 닫는다 `--wide-pad: clamp(0rem, -3.7rem + 15.2vw, 10rem)` diff --git a/apps/site/src/assets/bg/bg-refraction.webp b/apps/site/src/assets/bg/bg-refraction.webp new file mode 100644 index 0000000000000000000000000000000000000000..b48ccaa426b918d16d4444a172818400345beff9 GIT binary patch literal 38366 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 KM*bcy^Z)=YdnYac literal 0 HcmV?d00001 diff --git a/apps/site/src/components/BgPhoto.astro b/apps/site/src/components/BgPhoto.astro new file mode 100644 index 0000000..dfbad4a --- /dev/null +++ b/apps/site/src/components/BgPhoto.astro @@ -0,0 +1,74 @@ +--- +import { Image } from "astro:assets"; +import bgRefraction from "../assets/bg/bg-refraction.webp"; + +interface Props { + /** 0~1. 이 레이어는 본문 뒤에 깔리므로 기본값을 낮게 둔다 */ + opacity?: number; + /** 좌우 반전. 같은 이미지를 두 섹션에 쓸 때 같은 그림으로 안 읽히게 한다 */ + flip?: boolean; +} +const { opacity = 0.45, flip = false } = Astro.props; +--- + +{/* + 배경 사진 레이어. + + CSS 그라디언트로 만든 광원과 달리 굴절·그레인·빛의 감쇠가 실제로 들어 있어 + 패럴랙스의 기준면으로 훨씬 잘 읽힌다. 대신 무게가 있으므로 규칙이 붙는다. + + - `loading="lazy"` — 초기 번들에 들어가지 않는다. CSS background-image 로 깔면 + 이 통제권을 잃는다(항상 받고, 최적화도 안 된다). 그래서 를 절대배치한다 + - `aria-hidden` + 빈 alt — 장식이다. 보조기술이 읽을 것이 없다 + - opacity 기본 0.45 — 본문 대비를 지키는 선. 올리려면 그 위 글자를 다시 재라 +*/} + + + diff --git a/apps/site/src/components/Install.astro b/apps/site/src/components/Install.astro index 5568e42..49f943d 100644 --- a/apps/site/src/components/Install.astro +++ b/apps/site/src/components/Install.astro @@ -1,5 +1,6 @@ --- import CopyCommand from "./CopyCommand.astro"; +import BgPhoto from "./BgPhoto.astro"; import type { Content } from "../i18n/content"; interface Props { c: Content["install"]; ui: Content["ui"]; } @@ -7,7 +8,8 @@ const { c, ui } = Astro.props; --- -
    +
    +

    {c.h2}

    diff --git a/apps/site/src/components/Materials.astro b/apps/site/src/components/Materials.astro index e4d902d..9294d40 100644 --- a/apps/site/src/components/Materials.astro +++ b/apps/site/src/components/Materials.astro @@ -1,4 +1,5 @@ --- +import BgPhoto from "./BgPhoto.astro"; import type { Content } from "../i18n/content"; interface Props { c: Content["materials"]; } @@ -10,7 +11,8 @@ const { c } = Astro.props; 배경은 three.js 셰이더 플레인, 전경은 SVG 필터를 실제로 먹인 타일 3장. 둘 다 설명이 아니라 지금 이 화면에서 돌고 있는 것이다. */} -
    +
    +

    {c.h2}

    {c.lead}

    diff --git a/apps/site/src/styles/base.css b/apps/site/src/styles/base.css index af00702..87b8326 100644 --- a/apps/site/src/styles/base.css +++ b/apps/site/src/styles/base.css @@ -422,7 +422,8 @@ a:hover { color: var(--accent); } 그래서 배경을 깐다. 다만 사 온 이미지가 아니라 이 페이지가 주장하는 것, 곧 간격 눈금 자체를 격자로 그린다. --grid-cell 은 --space-5 다. */ .bg-grid, -.bg-glow { +.bg-glow, +.has-bg { position: relative; isolation: isolate; }