Interface Craft Decisions
Repository-bounded method for purpose, implementation, review, and evidence decisions at the product layer.
이 자료로 구현하기
원문 주소와 버전이 포함된 요청문입니다. 복사한 뒤 만들 화면과 요구사항을 채워 에이전트에게 전달하세요.
FROM PRINCIPLE TO PRACTICE
이 원리로 만든 예제 78
예제를 열어 직접 조작하고, 관찰한 동작을 이 문서의 원리와 비교해 보세요.
liquid metal
- 윤곽 굴절과 금속 줄무늬의 밀도
repetition은 줄무늬 밀도, distortion은 줄무늬에 주는 잡음 변형, shiftRed·shiftBlue는 채널 분리입니다. contour는 0~0.4에서 경계 경도를, 0.5~1에서 경계에 따른 줄무늬 방향 왜곡을 조절합니다. 이미지가 있으면 해당 마스크가 shape보다 우선합니다. 물리적 금속 물성의 측정 모델은 아닙니다.
- 윤곽 굴절과 금속 줄무늬의 밀도
god rays
- 중앙 광원과 광선의 밝기를 별도로 읽기
density·spotty는 광선 수와 끊어진 길이를, intensity는 광선의 보이는 세기를 바꿉니다. midSize·midIntensity는 중앙 빛의 크기와 밝기입니다. bloom은 색 합성 방식에 관여하므로 모든 변화를 하나의 밝기 조절로 묶으면 어떤 영역이 달라졌는지 판단하기 어렵습니다.
- 중앙 광원과 광선의 밝기를 별도로 읽기
grain gradient
- 색 경계·왜곡·입자를 같은 효과로 묶지 않기
softness는 색 경계의 부드러움, intensity는 색 띠의 왜곡, noise는 입자 덧입히기입니다. shape에 따라 반복 무늬 좌표와 독립 도형 좌표를 선택하며, 입자 좌표에는 역변환을 적용합니다. 같은 scale에서도 형상과 입자가 반드시 함께 확대되는 것은 아닙니다.
- 색 경계·왜곡·입자를 같은 효과로 묶지 않기
연결된 예제 75개 더 보기
pulsing border
- 테두리의 기하와 빛의 분포
roundness·thickness·네 margin은 테두리의 기본 기하이고 aspectRatio는 auto 또는 square입니다. spots·spotSize·intensity는 색 덩어리의 수와 퍼짐, smoke·smokeSize는 바깥 잡음 모양을 바꿉니다. 화면 여백과 빛의 번짐을 같은 두께 설정으로 설명하지 않습니다.
- 테두리의 기하와 빛의 분포
Comic Text
- 만화 글자는 문자열 위의 표현
ComicText는 문자열만 받아 대문자·외곽선·도트 배경·그림자를 적용하고 한 번 확대 등장합니다. 데모는 BOOM! 한 단어입니다. div를 제목으로 해석하거나 지정 글꼴이 실제 설치되었다고 가정할 수 없습니다.
- 만화 글자는 문자열 위의 표현
Hexagon Pattern
- 육각형 반복 경계의 연속성
HexagonPattern은 방향별 간격과 이웃 타일 복제로 경계를 잇고 점선일 때 공유 변을 고유화합니다. 강조 육각형도 같은 간격 계산을 사용합니다. 대표 데모는 기울어진 정적 배경으로 실제 콘텐츠 배치 기능은 없습니다.
- 육각형 반복 경계의 연속성
Orbiting Circles
- 궤도에 부여하는 의미의 범위
OrbitingCircles는 children 수에 따라 각도를 균등 분배하고 duration/speed를 CSS 주기로 전달합니다. 데모는 다섯 아이콘의 바깥 궤도와 네 아이콘의 반대 방향 안쪽 궤도입니다. 반지름·속도는 데이터 측정값이 아닙니다.
- 궤도에 부여하는 의미의 범위
Safari
- 브라우저 그림과 실제 탐색의 구분
Safari는 1203/753 비율의 SVG 브라우저 프레임이며 url은 text 노드에 표시하는 문자열입니다. mode는 아이콘 표시만 바꿉니다. 대표 데모는 미디어 없이 magicui.design을 적고 1203px 고정 부모를 사용합니다.
- 브라우저 그림과 실제 탐색의 구분
color panels
- 판의 각도·밀도와 색 혼합을 따로 비교하기
angle1·angle2는 판의 양쪽 기울기, density는 겹치는 배치, length는 길이를 바꿉니다. gradient는 판 안에서 이웃 색을 섞으며 두 색 이상이 필요합니다. blur·fadeIn·fadeOut은 가장자리와 투명도를 바꾸는 별도 입력입니다. 먼저 시간을 고정해야 배치 변화와 회전 변화가 섞이지 않습니다.
- 판의 각도·밀도와 색 혼합을 따로 비교하기
dithering
- 픽셀 격자 크기와 바탕 무늬 확대의 구분
shape는 구·물결·잡음 같은 바탕 무늬이고 type은 random 또는 Bayer 디더링 방식입니다. size는 픽셀 격자, scale·rotation은 바탕 무늬에 적용됩니다. 픽셀 격자를 화면 좌표에서 먼저 계산하므로 확대와 픽셀 크기를 같은 조절로 설명하면 잘못된 기대가 생깁니다.
- 픽셀 격자 크기와 바탕 무늬 확대의 구분
dot grid
- 점의 크기·간격·윤곽이 맡는 역할
size는 도형의 기본 크기이고 gapX·gapY는 각 방향의 반복 간격입니다. strokeWidth와 colorStroke의 알파가 함께 있어야 윤곽이 드러납니다. sizeRange·opacityRange는 셀마다 다른 크기와 투명도를 만드는 입력이며 시간 애니메이션이 아닙니다.
- 점의 크기·간격·윤곽이 맡는 역할
dot orbit
- 움직임의 범위와 점의 반지름은 다른 입력
spreading은 셀 중심 주위를 움직이는 범위이고 size는 점의 반지름, sizeRange는 점마다 다른 크기입니다. spreading=0이면 궤도 이동이 사라져도 점의 스타일은 유지됩니다. stepsPerColor는 두 색 이상 사이의 추가 색 단계를 정합니다.
- 움직임의 범위와 점의 반지름은 다른 입력
fluted glass
- 유리 줄무늬와 줄 안의 굴절을 분리하기
shape는 lines·wave·zigzag 같은 격자 모양이고 distortionShape는 prism·lens 같은 줄 내부의 굴절 방식입니다. size·angle은 격자의 크기와 방향, distortion·stretch·blur는 이미지 변형의 정도를 바꿉니다. 네 margin 값은 이미지 전체를 이동하는 대신 효과가 적용될 화면 영역을 제한합니다.
- 유리 줄무늬와 줄 안의 굴절을 분리하기
gem smoke
- 도형 안팎의 연기와 이미지 마스크
innerGlow·outerGlow는 도형 안과 밖에 보이는 연기를 나누며 각 distortion은 대응하는 glow가 있어야 의미가 생깁니다. 이미지가 있으면 전처리한 윤곽을 사용하고 shape 선택은 무시합니다. 이미지가 없을 때는 기본 diamond 같은 내장 도형을 비교할 수 있습니다.
- 도형 안팎의 연기와 이미지 마스크
halftone cmyk
- 채널의 기본 잉크량과 비례 증폭의 차이
colorC·M·Y·K는 네 채널의 잉크색이고 flood는 해당 채널의 점 크기에 고르게 더해지는 조절, gain은 기존 채널 크기에 비례하는 조절입니다. 두 조절은 채널 알파가 있어야 보입니다. size·type·gridNoise는 점 격자와 모양의 별도 입력이며 이 필터에는 시간 uniform이 없습니다.
- 채널의 기본 잉크량과 비례 증폭의 차이
halftone dots
- 이미지 밝기가 점의 크기로 바뀌는 조건
size는 격자 크기, radius는 셀에 대한 최대 점 크기입니다. originalColors가 꺼져 있으면 colorFront를 쓰고 contrast=0에서는 밝기에 따른 점 크기 차이가 사라집니다. inverted는 밝기를 반전하며 색 구성 자체를 반전하는 입력은 아닙니다. grid는 square·hex, type은 classic·gooey·holes·soft로 분리됩니다.
- 이미지 밝기가 점의 크기로 바뀌는 조건
heatmap
- 열처럼 보이는 색과 측정한 열의 구분
Heatmap은 업로드한 모양의 윤곽·안쪽 흐림·바깥 흐림을 전처리하고 그 위로 색의 강도 파동을 흘립니다. contour·innerGlow·outerGlow·angle은 그 표현을 조절합니다. 온도나 이용량 데이터를 받는 API가 아니므로 이 이름만으로 실제 열 지도라고 해석하면 안 됩니다.
- 열처럼 보이는 색과 측정한 열의 구분
image dithering
- 원본 색과 지정 팔레트의 서로 다른 경로
originalColors는 원본에서 색을 가져올지 colorBack·colorFront·colorHighlight를 사용할지 정합니다. colorSteps는 양쪽 모드의 색 단계 수이고 inverted는 밝기 기준을 뒤집습니다. type은 디더링 방식이며 움직이는 Dithering과 달리 이 이미지 필터에는 시간 uniform이 없습니다.
- 원본 색과 지정 팔레트의 서로 다른 경로
lens distortion
- 색 분산과 렌즈 모양의 왜곡을 분리하기
spread는 색 레이어가 벌어지는 정도, dispersion은 각 레이어에 스펙트럼 색을 입히는 정도입니다. lensBulge는 이미지 기하를 볼록하거나 오목하게 변형합니다. focusCenter·focusEdges는 색 분산을 줄일 영역이며 imageX·imageY는 효과 뒤의 원본 이미지를 이동합니다.
- 색 분산과 렌즈 모양의 왜곡을 분리하기
mesh gradient
- 색 덩어리의 변형과 입자 합성
distortion은 유기적인 좌표 왜곡, swirl은 중심 주위의 회전 왜곡입니다. grainMixer는 색 경계의 혼합에 관여하고 grainOverlay는 최종 표면 위에 입자를 더합니다. 색 목록의 순서와 개수도 덩어리의 구성을 바꾸므로 왜곡 비교에서는 팔레트를 고정합니다.
- 색 덩어리의 변형과 입자 합성
metaballs
- 공의 개수와 마지막 공의 등장
count는 공의 수이고 소수 부분은 마지막 공을 작게 만들어 점진적으로 나타나게 합니다. size는 모든 공의 크기에 관여합니다. 색은 공 순서에 따라 적용되므로 count보다 뒤의 색은 쓰이지 않을 수 있습니다. 단순히 보이는 연결 덩어리 수를 count 값으로 세면 겹침을 오해하게 됩니다.
- 공의 개수와 마지막 공의 등장
neuro noise
- 교차점의 밝기와 선망의 대비
colorFront는 교차점의 강조색, colorMid는 주된 선망 색, colorBack은 배경입니다. brightness는 교차점 밝기에, contrast는 중간색에서 배경으로 넘어가는 경계에 관여합니다. 두 값을 함께 바꾸면 밝아진 것과 가늘어진 것의 원인을 분리하기 어렵습니다.
- 교차점의 밝기와 선망의 대비
paper texture
- 같은 씨앗에서 종이 질감의 층을 하나씩 비교
seed를 고정하면 roughness·fiber·folds·wrinkles·crumples·drops의 기여를 따로 비교할 수 있습니다. fiberSize는 fiber, wrinkleSize는 wrinkles, crumpleCount는 crumples가 있을 때 의미가 생깁니다. angle은 조명 방향과 roughnessRows 방향에 관여하며 이 질감은 시간 입력을 쓰지 않습니다.
- 같은 씨앗에서 종이 질감의 층을 하나씩 비교
perlin
- 한 층의 잡음과 여러 층의 잡음
octaveCount는 잡음 층 수이고 persistence는 뒤쪽 층의 기여 감소, lacunarity는 층 사이의 주파수 변화입니다. 기본 octaveCount=1에서는 뒤쪽 층 조절을 비교하기 어렵습니다. proportion·softness는 계산한 잡음을 두 색으로 옮기는 별도 단계입니다.
- 한 층의 잡음과 여러 층의 잡음
simplex noise
- 색 단계 수와 경계 부드러움의 조합
두 Simplex 잡음을 섞어 만든 모양에 colors를 입힙니다. stepsPerColor는 기본 색 사이의 추가 단계, softness는 그 단계 경계의 부드러움입니다. 두 입력은 색이 두 개 이상일 때 비교 의미가 생기며 shape를 직접 바꾸는 입력은 아닙니다.
- 색 단계 수와 경계 부드러움의 조합
smoke ring
- 고리의 반지름과 두께·안쪽 채움
radius는 고리 반지름이고 thickness는 두께, innerShape는 안쪽을 채우는 정도입니다. noiseScale은 연기 무늬의 빈도이고 noiseIterations는 겹치는 잡음 층 수입니다. 형태를 비교할 때 잡음 세부까지 함께 바꾸지 않아야 작은 고리와 거친 고리를 구분할 수 있습니다.
- 고리의 반지름과 두께·안쪽 채움
spiral
- 나선 밀도와 선의 끝 모양
density는 반경에 적용하는 변환이고 strokeWidth는 선 폭입니다. strokeTaper·strokeCap은 폭과 끝부분 모양에 관여합니다. distortion은 시간에 따른 나선 변형, noise·noiseFrequency는 각도 방향의 잡음입니다. 선을 가늘게 만드는 일과 더 촘촘한 나선을 만드는 일은 다릅니다.
- 나선 밀도와 선의 끝 모양
static mesh gradient
- 색점의 씨앗과 두 방향의 정적 변형
positions는 좌표 배열이 아니라 색점 배치의 숫자 씨앗입니다. waveX·waveY는 각 방향의 왜곡 강도이고 waveXShift·waveYShift는 해당 파형의 위상입니다. mixing은 색 혼합을 바꿉니다. 시간 입력이 없으므로 이름에 wave가 있어도 자동 애니메이션은 아닙니다.
- 색점의 씨앗과 두 방향의 정적 변형
static radial gradient
- 그라디언트 반지름과 초점 위치
radius는 전체 형상의 크기이고 focalDistance·focalAngle은 초점 위치입니다. focalDistance=0에서는 각도를 바꿔도 초점 위치가 바뀌지 않습니다. falloff는 색 분포의 감쇠, mixing은 경계 혼합입니다. distortionFreq·distortionShift는 distortion이 있을 때만 의미가 생기는 입력입니다.
- 그라디언트 반지름과 초점 위치
swirl
- 색 띠 수와 소용돌이의 비틀림
bandCount는 각도 방향의 띠 수이며 셰이더에서 올림하여 사용합니다. 0에서는 동심 무늬가 됩니다. twist는 중심 쪽의 비틀림, center는 twist가 있을 때 색이 나타나기 시작하는 중심 영역입니다. proportion·softness는 색의 비율과 경계이며 기하를 정하는 두 입력과 분리됩니다.
- 색 띠 수와 소용돌이의 비틀림
voronoi
- 셀 경계의 간격과 내부 음영
gap·colorGap은 셀 사이의 경계이고 glow·colorGlow는 셀 내부의 방사형 음영입니다. distortion은 셀 중심의 변위, stepsPerColor는 셀 색의 추가 단계입니다. 원본은 gap을 0으로 해도 경계 아티팩트가 완전히 사라지지 않을 수 있다고 명시하므로 이 값을 완전한 경계 제거 기능으로 소개하지 않습니다.
- 셀 경계의 간격과 내부 음영
warp
- 바탕 패턴의 크기와 그 위의 변형
shape는 checks·stripes·edge의 바탕 무늬이고 shapeScale은 그 무늬의 확대입니다. scale은 전체 그래픽 좌표의 확대입니다. distortion은 잡음 변형, swirl은 소용돌이 변형이며 swirlIterations는 겹치는 변형 단계 수입니다. 바탕 무늬부터 확인한 다음 변형을 더해야 역할을 구분할 수 있습니다.
- 바탕 패턴의 크기와 그 위의 변형
water
- 이미지를 휘게 하는 값과 물빛을 더하는 값
Water는 image 없이도 움직이는 질감을 만들 수 있습니다. highlights는 배경 위의 빛, caustic은 이미지가 있을 때의 굴절, edges는 이미지 가장자리의 굴절을 조절합니다. waves는 별도의 잡음 왜곡이고 layering은 두 번째 광무늬 층입니다. size는 무늬 크기이며 전체 scale과 구분됩니다.
- 이미지를 휘게 하는 값과 물빛을 더하는 값
waves
- 흐르는 모양과 실제 시간 애니메이션의 구분
Waves는 시간 uniform이 없는 선 패턴입니다. shape는 지그재그·사인·불규칙 파형 사이를 연속적으로 섞고 amplitude는 진폭, frequency는 반복 빈도, spacing은 선 사이 간격입니다. frequency=0에서 amplitude는 파동을 만드는 대신 선 위치만 바꿀 수 있습니다.
- 흐르는 모양과 실제 시간 애니메이션의 구분
Radial Glow Background · Gold
- 빛의 위치와 실제 정보의 역할
금빛 배경은 500px 반경의 radial-gradient 한 장입니다. 중심은 가로 50%, 세로 100px이며 금빛의 알파는 0.4입니다. 이동·마우스 반응·시간 변화가 없는 정적 표현이고, 원본에는 실제 콘텐츠가 없습니다.
- 빛의 위치와 실제 정보의 역할
Radial Glow Background · Blue
- 부모가 바뀌어도 반경은 고정
푸른 배경은 중심이 50% 50%라 영역의 중앙을 기준으로 합니다. 반경은 600px로 고정이며 색의 알파는 0.3입니다. 중심이 비율 좌표라고 해서 빛의 크기까지 비율로 확대되는 구현은 아닙니다.
- 부모가 바뀌어도 반경은 고정
Separate Card Accordion · Myna UI
- 카드 간격과 긴 답변
루트의 space-y-4가 카드 간격을 만들고 각 카드의 px-4가 본문 여백을 정합니다. imported AccordionContent는 닫힘·열림에 따라 높이 애니메이션 클래스를 적용하고 overflow-hidden을 사용합니다. 긴 답변의 잘림과 포커스는 실제 렌더링에서 확인할 대상입니다.
- 카드 간격과 긴 답변
Icon Alert Dialog · Myna UI
- 헤더의 방향 변화와 읽기 순서
헤더는 작은 폭에서 세로·중앙, md에서 가로·상단 정렬로 바뀝니다. 아이콘 다음에 제목·설명이 오고 footer에는 Cancel 다음 Continue가 놓입니다. viewport 분기와 DOM 순서를 각각 확인할 대상입니다.
- 헤더의 방향 변화와 읽기 순서
Avatar Group · Myna UI
- 세 이미지의 겹침과 입력 범위
Basic은 flex 행의 세 Avatar를 -space-x-3으로 겹칩니다. 원본에는 인원수 계산·추가 인원 배지·hover 확장·선택 상태가 없습니다. ring은 이미지 경계 표현이고 클릭 대상을 의미하지 않습니다.
- 세 이미지의 겹침과 입력 범위
Icon Banner · Origin UI
- 두 줄 안내와 실행 영역의 순서
로켓은 aria-hidden인 장식 영역에 있고, 제목과 설명은 space-y-0.5 묶음에 남습니다. 그 다음에 Try now를 배치하며 md 아래에서는 안내·버튼 묶음이 세로입니다. 이 배치는 데모의 중첩 자식이 소유하고 Banner의 layout 옵션은 지정하지 않습니다.
- 두 줄 안내와 실행 영역의 순서
Link Buttons Banner · Origin UI
- 줄바꿈 가능한 버튼 묶음과 닫기
본문·CTA 묶음은 md에서 가로로 바뀌고 CTA 행에는 max-md:flex-wrap이 있습니다. Close banner는 이 묶음 바깥의 shrink-0 버튼이며 isVisible을 바꿉니다. 줄바꿈 규칙만으로 긴 문구와 모든 좁은 부모를 처리한다고 보장할 수는 없습니다.
- 줄바꿈 가능한 버튼 묶음과 닫기
Upgrade Banner · Origin UI
- 가운데 정렬과 긴 문구의 제약
안내, 구분점, Upgrade를 flex 문단에서 가운데 정렬합니다. flex-wrap이나 반응형 세로 전환은 이 문단에 없습니다. muted 배경과 기본 여백은 Banner 변형에서 오며, 가운데 정렬은 데모 자식이 직접 소유합니다.
- 가운데 정렬과 긴 문구의 제약
New Feature Banner · Origin UI
- 기능 공지의 실제 범위
기능 문구 전체를 하나의 href="#" 앵커에 넣은 정적 배너입니다. 이메일 작성·발송 코드나 상태는 없습니다. 호스트의 목적지 제거 정책 아래에서는 공지 표현을 살펴보는 예제이며 실제 발송 도구로 연결되지 않습니다.
- 기능 공지의 실제 범위
Centered Button Banner · Origin UI
- 닫기 옆 남은 영역의 가운데 정렬
md:justify-center는 안내·아이콘·Learn more를 포함한 grow 영역에 적용됩니다. 닫기는 그 바깥의 형제이므로 배너 전체의 기하학적 중심과 항상 같다고 볼 수 없습니다. 문구와 버튼은 기본 세로, md 이상 가로로 배치됩니다.
- 닫기 옆 남은 영역의 가운데 정렬
Two Buttons Banner · Origin UI
- CTA 행과 독립 닫기 영역
CTA 행은 작은 뷰포트에서 flex-wrap을 허용하며, 본문과 행은 md에서 가로로 바뀝니다. X는 행 밖에 남는 shrink-0 버튼입니다. 닫기는 isVisible을 false로 바꾸지만 이후 초점을 옮기거나 닫기 기록을 저장하지 않습니다.
- CTA 행과 독립 닫기 영역
Link Banner · Origin UI
- 본문과 줄바꿈하지 않는 링크
본문과 Learn more는 기본 세로 배치이고 md에서 justify-between 가로 배치로 바뀝니다. 링크에는 whitespace-nowrap이 있어 내부 문구와 화살표를 한 줄로 유지합니다. 긴 번역 링크가 본문을 밀거나 부모를 넘는지는 별도 검토 대상입니다.
- 본문과 줄바꿈하지 않는 링크
Countdown Banner · Origin UI
- 실제 행사와 분리된 상대 종료 시각
saleEndDate는 모듈이 평가될 때 Date.now()에 9시간 45분 24초를 더해 정합니다. 매 렌더에서 다시 연장하는 시각이 아닙니다. 24시간 행사라는 문구는 원본의 샘플 카피이고 Buy now에는 구매 핸들러가 없습니다.
- 실제 행사와 분리된 상대 종료 시각
Human Review Panel · Extend UI
- 문서 위치 자료와 실제 문서 뷰어의 경계
21st의 원래 데모는 HumanReviewPanel 하나를 !h-[680px]로 렌더링합니다. 소스에는 인용 좌표와 HumanReviewHighlight도 있지만 이 구성은 PDF나 문서 이미지를 렌더링하지 않고 onLocationHover도 연결하지 않습니다. 따라서 필드를 살피는 검토 패널의 예제이며 문서의 실제 위치를 추적하는 완성 화면은 아닙니다.
- 문서 위치 자료와 실제 문서 뷰어의 경계
Arrow Breadcrumb · Myna UI
- 화살표 구분자와 방향
MoveRight를 두 BreadcrumbSeparator 안에 넣습니다. primitive는 구분자를 role="presentation"·aria-hidden으로 처리하고 목록은 flex-wrap합니다. MoveRight 자체에 rtl 반전 클래스는 없으므로 방향 적합성은 별도 검토 대상입니다.
- 화살표 구분자와 방향
Button Groups · Myna UI
- 겹친 테두리 위로 올라오는 초점
-space-x-px로 경계를 겹치고 각각 focus:z-10을 지정합니다. 버튼이 두 개인 첫 묶음만 isolate를 명시하며 둘째 묶음에는 없습니다. 방향키 이동을 제공하는 toolbar나 단일 선택 그룹으로 구현하지 않습니다.
- 겹친 테두리 위로 올라오는 초점
Dense Command List · Myna UI
- 23개 명령의 목록 스크롤
300px 폭 안에 5개 그룹·23개 항목이 들어 있습니다. imported CommandList가 max-h-[300px]와 overflow-y-auto를 갖고 바깥 Command는 overflow-hidden입니다. 목록 내부가 주된 세로 스크롤 영역입니다.
- 23개 명령의 목록 스크롤
Grouped Input · Serafim
- 맞닿은 테두리와 개별 컨트롤 크기
최대 400px flex 행에 -space-x-px를 주고 입력 오른쪽·버튼 왼쪽의 둥근 모서리를 없앱니다. 입력 프리미티브는 h-9, 기본 버튼은 h-8이므로 같은 높이를 선언한 구성은 아닙니다. 물리적 좌우 클래스와 음수 간격이 RTL에서도 원하는 연결을 만드는지는 별도 확인이 필요합니다.
- 맞닿은 테두리와 개별 컨트롤 크기
Boxed Pagination · Myna UI
- 테두리로 묶인 가로 링크
Boxed는 PaginationContent에 gap-0.5·border·p-1을 더합니다. 내부 primitive는 flex-row만 지정하고 wrap이나 자체 가로 스크롤은 제공하지 않습니다. 숫자와 Previous·Next가 차지하는 폭은 좁은 부모에서 확인해야 합니다.
- 테두리로 묶인 가로 링크
Separate Pagination · Myna UI
- 좁은 화면에서 사라지는 요약
요약은 hidden md:block이고 Pagination은 justify-between으로 문구와 링크를 벌립니다. Previous는 렌더링하지 않으며 Ellipsis는 조작할 수 있는 더보기 버튼이 아닙니다. md 아래에서 남는 정보는 숫자 링크와 Next입니다.
- 좁은 화면에서 사라지는 요약
Progressive Blur Slider · Motion Primitives
- 양쪽 200px 안에 겹치는 흐림 레이어
각 ProgressiveBlur는 기본 8개 레이어를 만들고 index × blurIntensity만큼 backdrop-filter를 적용합니다. 이 데모는 강도 1이라 0~7px을 사용하며 왼쪽 270도·오른쪽 90도 마스크를 200px씩 배치합니다. 부모 폭이 400px보다 작으면 두 효과 영역이 겹칠 수 있습니다. 레이어는 pointer-events-none이고 이미지를 직접 수정하지 않습니다.
- 양쪽 200px 안에 겹치는 흐림 레이어
Card Skeleton · Myna UI
- 예약 공간과 읽을 정보
카드는 min-w-[300px]이고 footer의 두 Skeleton은 h-8 w-20인 div입니다. 실제 버튼이나 로딩 안내 문구가 아닙니다. Skeleton에는 role·aria-busy·감소 선호 분기가 없으므로 호스트의 별도 처리와 원본을 구분해야 합니다.
- 예약 공간과 읽을 정보
Tag Table With Sort Menu · 21st/shadcn
- 빈 결과·동률·행 작업의 한계
filteredTags.map만 렌더링하므로 검색 결과가 없으면 tbody가 비고 안내 행은 없습니다. 비교 함수는 동률에도 -1을 반환합니다. Pencil·Trash2 버튼에는 이름·작업 콜백이 없어서 행을 편집하거나 삭제하지 않습니다.
- 빈 결과·동률·행 작업의 한계
Basic Accordion · Smooth UI
- 공식 예제의 내용과 초기 상태
연결된 것은 같은 작성자가 MIT로 공개한 공식 FAQ입니다. 제목과 세 질문, max-w-2xl·p-6을 유지합니다. 과거 21st 데모의 별도 문구와 max-w-xl·p-4까지 동일하다는 뜻은 아닙니다. 이 예제의 설치 명령은 원문에 포함된 예시 문자열이며 최신 설치 안내로 검증하지 않았습니다.
- 공식 예제의 내용과 초기 상태
Ellipsis Pattern Card · Indie UI
- 30px 점 타일과 점점 옅어지는 덮개
CardWithEllipsis는 30px × 30px 크기의 원본 SVG 타일을 반복하고 from-zinc-950/90 via-zinc-950/40 to-zinc-950/10 그라데이션을 겹칩니다. 바깥 내부 여백은 p-3입니다. 타일 크기는 고정 CSS 길이라 카드 폭을 늘려도 무늬가 같은 비율로 확대되지 않습니다. 시간이나 포인터에 반응하는 코드는 없습니다.
- 30px 점 타일과 점점 옅어지는 덮개
Grid Ellipsis Card · Indie UI
- 25px 격자 점과 양 끝의 어두운 덮개
CardWithGridEllipsis는 25px × 25px 크기의 원본 SVG 타일을 반복하고 from-zinc-950 via-zinc-950/70 to-zinc-950 그라데이션을 겹칩니다. 바깥 내부 여백은 p-1입니다. 타일 크기는 고정 CSS 길이라 카드 폭을 늘려도 무늬가 같은 비율로 확대되지 않습니다. 시간이나 포인터에 반응하는 코드는 없습니다.
- 25px 격자 점과 양 끝의 어두운 덮개
Grid Pattern Card · Indie UI
- 50px 격자와 가운데만 약하게 드러나는 무늬
CardWithGrid는 50px × 50px 크기의 원본 SVG 타일을 반복하고 from-zinc-950 via-zinc-950/[.85] to-zinc-950 그라데이션을 겹칩니다. 바깥 내부 여백은 없음입니다. 타일 크기는 고정 CSS 길이라 카드 폭을 늘려도 무늬가 같은 비율로 확대되지 않습니다. 시간이나 포인터에 반응하는 코드는 없습니다.
- 50px 격자와 가운데만 약하게 드러나는 무늬
Lines Pattern Card · Indie UI
- 40px 선 타일과 대각선 덮개
CardWithLines는 40px × 40px 크기의 원본 SVG 타일을 반복하고 from-zinc-950 via-zinc-950/80 to-zinc-900/40 그라데이션을 겹칩니다. 바깥 내부 여백은 p-[1px]입니다. 타일 크기는 고정 CSS 길이라 카드 폭을 늘려도 무늬가 같은 비율로 확대되지 않습니다. 시간이나 포인터에 반응하는 코드는 없습니다.
- 40px 선 타일과 대각선 덮개
정보 알림 · Origin UI
- 짧은 정보 안내의 역할
comp-273은 파란 InfoIcon과 Just a quick note! 한 문장을 표시합니다. 공개 prop이나 상태, 요청, 닫기 컨트롤이 없는 고정 예제입니다. 정보 아이콘이 있다고 해서 새 데이터가 도착했거나 사용자 작업이 완료된 것은 아닙니다.
- 짧은 정보 안내의 역할
닫기 버튼이 있는 경고 · Origin UI
- 400px 알림의 실제 배치 책임
원본 컨테이너는 z-50, max-w-[400px], 테두리와 그림자를 선언합니다. fixed bottom-4 right-4는 적용 클래스가 아니라 사용 안내 주석에만 있습니다. 본문은 grow이고 닫기 버튼은 size-8과 shrink-0이므로 좁은 부모에서는 문구의 남은 폭을 확인해야 합니다.
- 400px 알림의 실제 배치 책임
방송 일정 알림 · Origin UI
- 일정과 버튼 사이의 큰 고정 간격
size-9 방송 아이콘 자리, 일정·버튼 묶음, size-8 닫기가 한 행을 공유합니다. 일정과 Notify me 사이에는 gap-12가 있고 컨테이너 최대 폭은 400px입니다. 버튼 래퍼의 whitespace-nowrap도 함께 작용하므로 번역된 날짜가 길어졌을 때의 결과는 별도로 확인해야 합니다.
- 일정과 버튼 사이의 큰 고정 간격
링크가 있는 경고 · Origin UI
- 줄바꿈과 아이콘 축소 선언을 실제로 확인
경고 아이콘의 클래스에는 shrink-0 대신 hrink-0가 적혀 있습니다. 본문·링크 묶음은 grow와 justify-between이고 링크는 whitespace-nowrap입니다. 좁은 부모에서 아이콘과 본문이 어떤 폭을 차지하는지 클래스 이름만으로 보장하지 않습니다.
- 줄바꿈과 아이콘 축소 선언을 실제로 확인
메시지 전송 안내 · Origin UI
- View·Undo 묶음이 확보하는 폭
Message sent와 액션 묶음 사이에는 gap-12가 있으며 View·Undo·구분점은 whitespace-nowrap 안에 있습니다. 체크 아이콘과 닫기도 줄어들지 않도록 작성했습니다. 컨테이너 최대 폭 400px만으로 번역된 메시지와 버튼이 모두 들어간다고 보장할 수 없습니다.
- View·Undo 묶음이 확보하는 폭
성공 알림 · Origin UI
- border-eborder의 출처와 실제 테두리
성공 안내의 부모에는 border와 border-eborder가 함께 있습니다. 작성자 테마는 --color-border를 --border에 연결하지만 eborder 토큰은 선언하지 않습니다. 원본 철자를 보존하며 실제 테두리색은 기본 border 규칙과 생성 CSS를 확인해야 합니다.
- border-eborder의 출처와 실제 테두리
강조된 경고 알림 · Origin UI
- 누락된 정보가 무엇인지는 연결하지 않은 안내
원본에는 Some information is missing! 문단 한 개만 있고 필드 ID, 오류 관계, 링크, 닫기 버튼은 없습니다. 이 변형은 정보 누락을 강조하는 표현이며 어떤 입력을 보완해야 하는지는 설명하지 않습니다.
- 누락된 정보가 무엇인지는 연결하지 않은 안내
작업 요청 알림 · Origin UI
- 조치를 요청하지만 구체적인 작업은 없는 예문
comp-289은 Something requires your action!과 조치가 필요하다는 일반 설명을 보여 줍니다. Learn more는 size=sm Button이지만 목적지나 처리기가 없습니다. 경고 아이콘과 제목·설명·버튼의 위계를 보여 주는 예제이며 실제 해결할 상황은 입력받지 않습니다.
- 조치를 요청하지만 구체적인 작업은 없는 예문
업데이트 안내 · Origin UI
- 아이콘·긴 설명·닫기를 공유하는 폭
업데이트 카드는 size-9 원형 아이콘 자리, 세로로 쌓인 설명과 버튼, size-8 닫기를 gap-3으로 나눕니다. 아이콘과 닫기는 shrink-0이고 본문 묶음은 grow이며, 최대 폭은 400px입니다. Install·Later는 설명 아래 별도 행에 있지만 긴 번역과 확대 환경의 결과는 확인되지 않았습니다.
- 아이콘·긴 설명·닫기를 공유하는 폭
Checkbox Group · Fluid Functionalism
- 한국어 레이블과 실제 사용 폰트
레이블은 같은 칸에 보이는 span과 invisible인 semibold 공간 확보용 span을 겹칩니다. 선택 시 보이는 글자에 wght 550·opsz 18, 해제 시 wght 400·opsz 14를 적용합니다. 원래 획득 팩에는 폰트가 없지만 호스트는 같은 작성자 Git 리비전의 Inter 파일을 별도로 확보하고 runtime/fonts/provenance.json에 출처와 해시를 기록했습니다. 새 한국어 문구의 실제 글리프·대체 폰트·폭 보정은 실행 검증하지 않았으므로 폰트 확보만으로 동일한 표현을 입증하지 않습니다.
- 한국어 레이블과 실제 사용 폰트
Fully Checked Group · Fluid Functionalism
- 고정 행 높이와 측정된 배경 경계
어댑터는 w-80 max-w-full을 주며 size나 ShapeProvider는 지정하지 않습니다. 원본 기본값은 h-9 행과 rounded 모양입니다. 호버 훅은 행의 offset 크기를 읽고 행·부모 ResizeObserver로 다시 측정합니다. 포커스 링은 행보다 사방 2px 바깥으로 그리므로 부모의 잘림과 긴 한국어 문구가 고정 높이를 넘는 조건을 검토해야 합니다.
- 고정 행 높이와 측정된 배경 경계
Orbiting circles작은 궤도
- 궤도로 표현하는 관계의 범위
세 궤도는 반지름과 회전 주기가 다르고 가운데 궤도는 반대로 돕니다. 기호와 중심의 관계를 보여주는 장식 연구이며, 위치나 속도가 실제 데이터 값을 나타내지는 않습니다.
- 궤도로 표현하는 관계의 범위
Glass outline투명한 모서리
- 얇은 경계 안의 실제 읽기 조건
투명한 윤곽은 움직이는 색 덩어리 위에 후면 흐림과 얇은 하이라이트를 겹칩니다. 흐림이나 테두리가 있다는 사실만으로 작은 보조 문구의 읽기 가능성을 보장하지 않습니다.
- 얇은 경계 안의 실제 읽기 조건
Color lens색을 들여다보는 렌즈
- 렌즈가 실제로 바꾸는 속성
원형 렌즈는 아래 표면의 대비와 채도를 높입니다. 내용의 크기나 해상도를 확대하지 않으며, 원의 위치만 포인터를 따릅니다.
- 렌즈가 실제로 바꾸는 속성
Wireframe globe선으로 만든 지구
- 지구 모양과 위치 데이터의 경계
일곱 경선이 회전하고 다섯 위선과 점 하나는 고정되어 지구처럼 보입니다. 지도 데이터나 지리 좌표 계산은 없으므로 점을 실제 장소나 연결 상태로 해석하지 않습니다.
- 지구 모양과 위치 데이터의 경계
Animated paths연결되는 경로
- 연결선의 흐름과 실제 사건의 구분
세 곡선 위로 짧은 선 조각이 반복 이동하고 가운데 노드가 강조됩니다. 위치는 고정이고 외부 사건을 받는 코드는 없으므로 빛의 통과를 데이터 전송이나 성공으로 해석하지 않습니다.
- 연결선의 흐름과 실제 사건의 구분
Primary role: design-engineering decision guide.
Repository Boundary
This page helps connect product intent, implementation detail, and verification. It does not create a second StyleGallery principle set, rank visual taste as objective quality, or override Layout, accessibility, source-order, and shared evidence contracts.
Reusable Method
Establish The Job
Before tuning the interface, name:
- the user task and state change;
- why the behavior or treatment is necessary;
- how frequently it appears;
- which constraints and inputs it must survive;
- the observable that will decide whether it works.
If those answers are absent, implementation detail is premature.
Build A Verifiable Representation
Use semantic structure and the owning domain's smallest robust contract first. Prototype the uncertain interaction or visual relationship at the lowest fidelity that exposes its failure modes. A prototype is evidence of one implementation state, not proof of general usability.
Review Observable Failures
Inspect real content, empty states, long labels, constrained containers, repeated interaction, focus order, alternative input, relevant preferences, and target browsers/devices. When timing or continuity matters, review recordings slowly or frame by frame.
Record The Decision
Use the shared high-impact claim shape:
Principle:
Claim:
Context:
Use case:
Warrant:
Evidence family:
Verification protocol:
Implementation handoff:
Consumer reference: not_applicable
Consumer reference reason: This blank craft-decision template declares no consumer-specific reference record.
Boundary or limitation:
Debt or escalation:
Decision:This makes the result reviewable without turning the practitioner's preference into authority.
Decision Questions
| Question | Evidence that can help | What it cannot prove alone |
|---|---|---|
| Does the detail serve the primary task? | Task model, prototype, user evidence | Universal preference |
| Is the default understandable without instruction? | Task completion, terminology test, comparative prototype | Long-term adoption |
| Does repetition make the behavior costly? | Frequency estimate, interaction timing, user evidence | One universal threshold |
| Does the interface preserve continuity? | Rendered sequence, source/focus inspection | Human orientation for every user |
| Does the implementation survive real constraints? | Content/container/input/browser matrix | Brand or aesthetic quality |
| Is the final polish coherent with declared intent? | Named comparative criteria and representative review | Objective beauty |
Opinionated Guidance
Small details can compound, strong defaults can lower adoption effort, and fresh-eye review can expose defects familiarity hides. These are practitioner heuristics. “Beautiful,” “delightful,” “premium,” “obvious,” and “feels right” require an operational definition and suitable human evidence when used as claims.
Platform-Specific Guidance
CSS entry features, clipping techniques, Motion/Framer Motion, React effects, component-library variables, pointer capture, and browser-specific performance behavior belong in bounded implementation notes. Verify current official documentation and the actual product surface before recommending them.
Unsupported Absolutes
- Beauty is not repository leverage or a sufficient acceptance criterion.
- A fixed duration, easing, scale, velocity, or frequency threshold is not universal.
- CSS does not categorically outperform JavaScript.
- A property or API name does not prove hardware acceleration.
- Product popularity does not prove a reusable implementation pattern.
- A promotional or enthusiastic posture is not part of the review contract.
Verification Contract
Every high-impact recommendation maps principle -> claim -> context -> warrant -> evidence -> protocol -> boundary/debt. Visual and interaction claims require rendered evidence; accessibility claims use the accessibility gate; human-quality claims need corresponding user or HCI evidence. A passing implementation keeps the owning domain's constraints visible in the handoff.
Source, License, And Attribution
- Upstream inspiration: emil-design-eng/SKILL.md
- Snapshot:
220e8607c90b17337d210125777b7b695f26c221 - Upstream license: MIT, Copyright (c) 2026 Emil Kowalski.
- Reuse form: independent method rewrite; upstream prose, tables, code, examples, distinctive ordering, and the quotation attributed to Paul Graham were not retained.
- Evidence boundary: this practitioner source suggests review questions; it does not establish local quality, accessibility, performance, or adoption outcomes.
IA Navigation
Parent: Design Engineering. Next: Platform Guides.


