Communitygithub.com

Kadeka-SI/web-design-base-v1

모든 웹사이트 또는 웹 UI를 구축, 재설계 또는 감사합니다: 랜딩 페이지, 포트폴리오, 쇼핑몰, 에디토리얼, 기업 사이트, 문서, 대시보드, 도구, HTML/CSS/JS, Tailwind 또는 React. 사용자가 페이지, 사이트, UI, 레이아웃, 히어로, 재설계, "더 좋아 보이게/더 프리미엄하게" 또는 디자인 리뷰를 요청할 때마다 이 스킬을 사용합니다. 주제에 특화된 디자인 시스템(구체적인 시각적 아이디어, 계산된 대비, 이중 서체 타이포그래피, 실제 콘텐츠)을 하나의 시그니처 모션과 함께 생성합니다. 템플릿 기본값, 그라데이션 히어로, 일반적인 팔레트, 카드 그리드 채우기, 플레이스홀더 복사본, 숨겨지거나 잘린 헤드라인을 피합니다.

web-design-base-v1란 무엇인가요?

이 스킬은 웹 디자인에서 '템플릿처럼 보이지 않는' 아트 디렉션된 사이트를 만드는 방법을 제공합니다. 디자인 결정을 내리기 전에 먼저 주제를 읽고 구체적인 시각적 아이디어(예: '인쇄된 출발 시간표: 무거운 좁은 숫자, 줄 그어진 행, 보드가 히어로')를 명명한 후, 시스템을 구축하고 콘텐츠를 계획한 다음 코드를 작성합니다. 이는 '최초 페인트 및 No-JS 접근성', '대비', '팔레트 규율', '완전성', '특수성'이라는 5가지 게이트를 통과해야 합니다. HTML/CSS/JS, Tailwind 또는 React와 같은 모든 플랫폼에서 작동하며, 사용자가 랜딩 페이지, 대시보드, 문서 또는 감사를 요청할 때 구체적인 모드(쇼케이스, 제품 UI, 문서, 감사, 반복)를 선택합니다. 이 스킬은 타이포그래피를 주요 도구로 사용하며, 하나의 디스플레이 서체와 하나의 텍스트 서체를 사용하고, 인터, 로보토, 포핀스와 같은 일반적인 서체를 피합니다. 디자인 시스템은 색상 팔레트, 서체, 히어로 아키타입, 레이아웃, 모션 패턴 및 섹션을 포함하며, 모든 선택은 주제의 실제 맥락에 기반합니다.

지원 대상~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Kadeka-SI/web-design-base-v1/tree/HEAD

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

web-design-base-v1은(는) 무엇을 하나요?

표준. 모든 사이트는 자신의 주제에 맞게 아트 디렉션되어야 하며, 템플릿으로 오인될 수 없고, 모든 세부 사항이 기술적으로 정확하며, 타이포그래피를 주요 도구로 사용해야 합니다.

방법. 주제를 읽고, 구체적인 시각적 아이디어 하나를 명명하고, 시스템을 구축하고, 콘텐츠를 계획한 다음 코드를 작성합니다. 시스템은 첫 코드 줄보다 먼저 존재해야 합니다. 코드를 작성하면서 내리는 선택은 기본값으로 표류하기 때문입니다.

0. 이 스킬을 읽는 방법

수준의미
게이트(Gate)마지막에 확인됩니다. 게이트를 통과하지 못한 페이지는 완료된 것이 아닙니다.
MUST / MUST NOT기본 법칙입니다. 사용자가 요청한 경우에만 예외를 두며, 그 이유를 한 문장으로 설명합니다.
SHOULD강력한 기본값입니다. 주제가 요구할 때는 묵시적으로 예외를 둡니다.
MAY주제에 도움이 될 때 허용됩니다.

우선순위: 게이트 1 및 2 (접근성) → 사용자의 명시적 요청 → MUST → SHOULD → MAY. 사용자가 게이트를 위반하는 것을 요청하면, 가장 가까운 통과 가능한 버전을 구축하고 변경한 사항을 설명합니다. 같은 수준 내에서는 더 구체적인 규칙이 우선합니다.

예제는 시연이지 템플릿이 아닙니다. 아래의 모든 팔레트, 서체 쌍, 페리 시간표 및 코드 값은 좋은 답변의 형식을 보여줍니다. 관련 없는 주제에 그대로 복사하는 것은 이 스킬의 가장 흔한 실패입니다. 나열된 팔레트나 쌍을 그대로 선택하는 경우 주제에 대한 사실을 계획에 정당화하십시오.

1. 다섯 가지 게이트

  1. 최초 페인트 및 No-JS. 히어로 헤드라인이 첫 프레임부터 보여야 합니다: 이동되지 않고, 잘리지 않으며(Ä Ö Ü의 움라우트 점 포함), 절대 애니메이션되지 않습니다. JavaScript가 비활성화되거나 모션이 축소된 상태에서 페이지가 완전해야 합니다.
  2. 대비. 본문 텍스트 ≥ 7:1, 음소거 텍스트 및 강조-텍스트 ≥ 4.5:1, 큰 제목 ≥ 4.5:1, 구조적 테두리, 포커스 링 및 UI 부품 ≥ 3:1. 실제로 사용되는 모든 텍스트/표면 쌍에 대해 계산되어야 하며, 가정하지 않습니다(§6).
  3. 팔레트 규율. 배경, 잉크, 하나의 강조 색상, 그리고 배경/잉크의 색조. 그라데이션, 글로우, 유리 모피즘 또는 색상 그림자는 없습니다.
  4. 완전성. 모든 섹션에는 실제 콘텐츠(§8)가 있어야 하고, 모든 링크는 의도적인 곳으로 연결되어야 하며, 필요한 모든 상태가 존재해야 합니다.
  5. 특수성. 팔레트와 서체가 변경 없이 다른 주제로 이동될 수 있다면 작업이 완료된 것이 아닙니다.

2. 모드 선택

모드사용처적용되는 규칙
쇼케이스(Showcase)랜딩, 포트폴리오, 쇼핑몰 프론트, 에디토리얼, 이벤트, 기업§12를 제외한 모든 것
제품 UI(Product UI)대시보드, 관리자, 도구, 앱, 폼 중심 흐름§1–§6, §10, §11, §12; 히어로 아키타입 및 섹션 풀 생략
문서(Docs)문서, 핸드북, 모델 카드쇼케이스의 타이포그래피 및 색상, 제품 UI의 구조(목차, 코드, 상태)
감사(Audit)"내 페이지 검토/개선"결과를 나열하고, 깨진 부분만 패치하며, 기존 정체성 유지
반복(Iterate)"X 변경"명명된 토큰 또는 규칙과 그 직접적인 종속 항목만 변경하고, 무음 리팩터링 금지

사용자가 브랜드(색상, 로고, 서체)를 제공하는 경우 브랜드가 팔레트와 서체입니다. 대비를 계산합니다. 브랜드 강조 색상이 텍스트로 4.5:1에 실패하면 큰 요소나 비텍스트 요소에만 사용하고 동일한 색조의 더 어두운 텍스트 변형을 추가합니다.

3. 구축 방법

코드보다 먼저 계획을 작성합니다: 사용자 언어로 12–16줄 (반복: 3줄 차이).

3.1 주제를 읽습니다. 방문자가 무엇을 하거나 이해해야 합니까? 주제가 실제 장소(항구, 주물 공장, 실험실, 주방, 법정, 기록 보관소)에서 어떻게 보이고, 들리고, 느껴집니까? 그들이 반드시 기억해야 할 한 가지는 무엇입니까?

3.2 시각적 아이디어를 명명합니다. 주제에서 가져온 구체적인 물체, 재료 또는 관례를 명명하는 한 문장. 예: 페리 노선의 경우 "인쇄된 출발 시간표: 무거운 좁은 숫자, 줄 그어진 행, 보드가 히어로." 추상적인 형용사("현대적, 깔끔한, 대담한")와 색상 목록은 아이디어가 아닙니다. 독창성 테스트: 이 카테고리의 일반적인 사이트가 가진 세 가지를 명명하고, 이 디자인이 그 중 어떤 것도 가지고 있지 않음을 확인합니다.

3.3 시스템 구축 계획에 표로 작성:

필드값
팔레트(Palette)bg, ink, accent (hex), 이름이 붙은 재료, 사용된 쌍별 계산된 비율
서체(Type)display + text face, 주제와 연결된 이유, 가장 긴 단어 및 모바일 크기
히어로(Hero)아키타입(§7.1) + 한 줄 정당화
레이아웃(Layout)기본 로직(§7.2) 및 섹션이 이를 어떻게 변형하는지
모션(Motion)하나의 시그니처 패턴 + 선택적 지원 패턴
섹션(Sections)순서대로, 각각의 역할과 형태
시그니처 순간(Signature moment)방문자가 기억하는 한 가지

3.4 콘텐츠 계획. 각 섹션을 구체적인 사실, 단계, 이름, 수치, 날짜, 가격과 함께 나열합니다. 내부적으로 일관되고 표시(§8.3)된다면 창작된 콘텐츠도 허용됩니다.

4. 기본 사항

4.1 head는 디자인의 일부입니다

<!doctype html>
<html lang="de">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Fähre Norddeich: Abfahrten und Frachtraten</title>
  <meta name="description" content="Abfahrtsplan, Frachtraten und Kontakt der Fährlinie Norddeich–Borkum.">
  <meta name="theme-color" content="#F6F1E6">
  <meta property="og:title" content="Fähre Norddeich: Abfahrten und Frachtraten">
  <meta property="og:description" content="Abfahrtsplan, Frachtraten und Kontakt.">
  <meta property="og:locale" content="de_DE">
  <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='%23C0430B'/%3E%3C/svg%3E">
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Big+Shoulders+Display:wght@700;800&family=Public+Sans:wght@400;500;600&display=swap">
  <script>
    /* Motion gate: hidden start states exist only if this class is set (§9) */
    if (!matchMedia("(prefers-reduced-motion: reduce)").matches && "IntersectionObserver" in window)
      document.documentElement.classList.add("js-motion");
  </script>
  <style>/* §4.2 base, §4.3 tokens, then components */</style>
</head>
  • MUST: lang이 복사본과 일치하고, title 및 description이 구체적이며, 글꼴 URL이 §5에서 선택된 패밀리와 일치하고 display=swap으로 끝나며, 파비콘이 있어야 합니다(404를 방지하고 완성된 느낌을 줍니다).
  • MUST NOT: 빈 head, 독일어 복사본에 lang="en", display=swap 없는 글꼴.
  • 개인정보 보호(EU/DE). Google 서버에서 로드된 Google Fonts는 방문자 IP를 전송합니다. 독일 법원은 이를 GDPR 문제로 간주했습니다. 프로토타입의 경우 허용됩니다. 프로덕션의 경우 글꼴을 자체 호스팅(woff2 파일, @font-face)해야 한다고 보고서에 명시합니다. 환경이 외부 글꼴을 차단하는 경우 대체 스택(§4.5)이 여전히 디자인된 것처럼 보여야 합니다.

4.2 기본 CSS

모든 페이지를 이 기본 사항으로 시작합니다. 이동, 잘림 및 상속으로 인한 타이포그래피 손상을 방지합니다.

*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
html { overflow-x: clip; -webkit-text-size-adjust: 100%; scroll-padding-top: var(--header-h, 0px); }
body {
  background: var(--bg); color: var(--ink);
  font-family: var(--font-text); font-size: 1.0625rem; line-height: 1.6;
  font-synthesis: none;              /* no fake bold/italic if a weight is not loaded */
  text-rendering: optimizeLegibility;
}
h1, h2, h3, h4, h5, h6, p, ul, ol, dl, dd, figure, blockquote, table, form { margin: 0; }
ul, ol { padding-inline-start: 1.25em; }
ul[role="list"], ol[role="list"] { list-style: none; padding: 0; }
img, svg, video, canvas { display: block; max-width: 100%; height: auto; }
button, input, select, textarea { font: inherit; color: inherit; }
button { background: none; border: 0; padding: 0; cursor: pointer; }
a { color: inherit; text-decoration-thickness: 0.08em; text-underline-offset: 0.2em; }  /* links stay recognizable */
nav a, .btn { text-decoration: none; }
:focus-visible { outline: 2px solid var(--focus); outline-offset: 3px; }
[id] { scroll-margin-top: var(--header-h, 0px); }
table { border-collapse: collapse; }
h1, h2, h3 { text-wrap: balance; }
p, li { text-wrap: pretty; }
::selection { background: var(--accent); color: var(--on-accent); }
.container { width: 100%; max-width: 90rem; margin-inline: auto; padding-inline: var(--gutter); }
.measure { max-width: var(--measure); }
.skip-link { position: absolute; inset-inline-start: -9999px; }
.skip-link:focus { inset-inline-start: var(--gutter); inset-block-start: 0.75rem; z-index: 20;
  background: var(--accent); color: var(--on-accent); padding: 0.75rem 1rem; }
  • MUST NOT: 콘텐츠에 100vw, 유형 자르기에 overflow: hidden, 히어로 헤드라인에 음수 마진 또는 transform을 사용하지 않습니다. 광학적으로 교정하는 대신 글꼴의 자연스러운 측면 베어링을 수용합니다.
  • 모든 텍스트는 .container 안에 넣어야 합니다. 히어로 헤드라인은 계획에 오프셋 레이아웃이 명명되지 않은 한 본문 복사본의 왼쪽 가장자리를 공유합니다.
  • 전체 높이 히어로는 min-height: 100vh; min-height: 100svh;로 크기를 지정해야 합니다(svh 라인이 지원되는 곳에서 우선하므로 모바일 브라우저 막대가 히어로를 자르지 않습니다).
  • 본문 복사본은 rem을 사용하고 고정 px를 사용하지 않으므로 방문자의 브라우저 글꼴 설정이 계속 작동합니다.

4.3 토큰

모든 색상, 글꼴, 크기 및 간격 값은 하나의 블록에 있습니다. 예제 값을 자신의 팔레트로 바꾸십시오(§6).

:root {
  color-scheme: light;                     /* "dark" for dark palettes: form controls and scrollbars follow */
  --bg: #F6F1E6;  --bg-soft: #ECE3D3;
  --ink: #1C1A17; --ink-muted: #635A4C;    /* muted: labels and captions only */
  --accent: #C0430B; --on-accent: #F6F1E6; /* text on accent fills */
  --line: #857A66;                         /* structural rules: ≥ 3:1 on bg and bg-soft */
  --line-soft: #C9BEA8;                    /* decorative hairlines only */
  --focus: var(--accent);                  /* re-assigned inside inverted bands */
  --font-display: "Big Shoulders Display", "Arial Narrow", sans-serif;
  --font-text: "Public Sans", "Segoe UI", sans-serif;
  --step-hero: clamp(3.25rem, 1rem + 11vw, 13rem);
  --step-h2:   clamp(2.25rem, 1rem + 5vw, 6rem);
  --step-label: 0.8125rem;
  --space-xs: 0.5rem;  --space-s: 1rem;
  --space-m: clamp(1.5rem, 1rem + 2vw, 3rem);
  --space-l: clamp(3rem, 2rem + 4vw, 6.5rem);
  --space-xl: clamp(5rem, 3rem + 8vw, 11rem);
  --gutter: clamp(1.25rem, 0.5rem + 3vw, 4rem);
  --measure: 66ch;
  --header-h: 0px;                         /* set to the sticky header height, else 0 */
  --rule: 1px solid var(--line);
}

MUST: 모든 값은 이 토큰에서 가져와야 합니다. MUST NOT: 규칙에 인라인 16진수 또는 프레임워크 기본 팔레트(gray-500, slate-200)를 사용하지 않습니다. 유체 크기는 rem과 vw를 혼합하므로 브라우저 확대 및 글꼴 설정이 계속 크기를 조정합니다(순수 vw는 확대를 무시합니다).

4.4 언어 및 로케일

  • 복사본은 요청 언어로 작성됩니다. lang이 일치합니다. Sie/du는 일관성을 유지합니다.
  • 독일어: 좁은 열에서 hyphens: auto (올바른 lang 필요); 글꼴 하위 집합은 äöüß 및 „ “ ‚ ‘ –를 반드시 포함해야 합니다. 독일어 페이지에는 영어 마케팅 단어 없이 인용 부호(„…“), 숫자와 단위 사이에 &nbsp; (12&nbsp;kg, 9:30&nbsp;Uhr), 날짜는 1. November 2026 형식을 사용합니다.
  • 비즈니스용 독일어 사이트는 바닥글에 Impressum 및 Datenschutz 링크가 필요합니다(프로토타입의 경우 인페이지 데모 섹션으로 충분합니다). 2025년부터 BFSG는 많은 소비자 대상 전자 상거래 서비스에 대해 접근성을 법적 의무로 만들었습니다. WCAG 2.1 AA가 최소 기준이며, 이 스킬의 게이트는 이미 이를 초과합니다.

4.5 네트워크 오류에서 살아남는 글꼴

같은 클래스의 대체 글꼴을 선택합니다(압축 → "Arial Narrow"; 세리프 → Georgia; 그로테스크 → system-ui). 두 대체 글꼴은 시각적으로 구별되어야 하므로 글꼴이 실패할 때 페이지의 계층 구조를 유지합니다. 사용하는 가중치만 로드합니다. 디스플레이에 사용되는 가중치는 로드된 패밀리에 존재해야 합니다(§5 참조).

4.6 중단점 및 375 px

모바일 우선. 중단점: 480, 760, 1024, 1320 px. 375 px에서: 가로 스크롤 없음, 히어로 헤드라인 ≤ 5줄, 가장 긴 단어가 들어맞음, 터치 대상 ≥ 44 × 44 px, 고정 헤더가 앵커를 덮지 않음(--header-h), 모든 2열 레이아웃에는 설계된 모바일 형식이 있습니다.

가장 긴 단어 규칙. 사용 가능한 너비 ≈ 375 − 2 × 19 ≈ 335 px. 최대 히어로 크기(px) ≈ 335 ÷ (가장 긴 단어의 문자 수 × 너비 계수). 너비 계수: 압축 0.42, 세리프 0.52, 그로테스크 0.58, 확장 0.68. clamp() 최소값을 해당 값으로 설정합니다. 압축 서체의 "Frachtabfertigung"(17자)는 ≈ 47 px를 허용하므로 위의 52 px 최소값은 넘칠 것입니다. 최소값을 낮추거나 소프트 하이픈(Fracht&shy;abfertigung)을 추가합니다. 긴 독일어 합성어가 히어로에서 overflow-wrap: anywhere를 강제하지 않도록 합니다.

5. 타이포그래피: 주요 도구

정확히 두 개의 패밀리를 사용합니다: 하나는 디스플레이용, 하나는 텍스트용.

디스플레이(Display)텍스트(Text)어울림
Big Shoulders DisplayPublic Sans시간표, 물류, 운송, 스포츠
Barlow CondensedBarlow교통, 안내 표지판, 클럽, 이벤트
FrauncesKarla음식, 공예, 인쇄, 환대
Instrument Serif (400 only)Work Sans에디토리얼, 패션, 건축
NewsreaderLibre Franklin법률, 기관, 연구
Familjen GroteskSource Serif 4잡지, 문화, 비영리
IBM Plex Mono (display)IBM Plex Sans실험실, 도구, 데이터, 문서
Archivo (width axis 112–125)Spline Sans항구, 산업, 제품 시트
Anton (400 only)Barlow캠페인, 장소, 포스터
Bodoni ModaKarla명품, 갤러리, 경매

이는 시작점입니다. 주제에 따라 선택하십시오. 물류가 아닌 주제에 대해 첫 번째 행을 선택한다는 것은 위치에 의해 선택했지 주제에 의해 선택한 것이 아님을 의미합니다. 글꼴의 실제 축과 가중치를 확인하십시오: Instrument Serif 및 Anton은 하나의 가중치만 있으므로 "heavy"를 사용할 수 없으며 font-synthesis: none은 브라우저가 가짜로 만들지 못하게 합니다. Archivo는 URL에서 wdth가 필요합니다(Archivo:wdth,[email protected],700..900) 및 CSS에서 font-stretch가 필요합니다.

MUST NOT: Inter, Roboto, Arial, Poppins, Playfair Display, Lora 또는 Merriweather를 정체성 쌍으로 사용하지 않습니다. MUST NOT: 하나의 패밀리를 모든 것에 사용하지 않습니다. 디스플레이로서의 모노스페이스는...

… [번역을 위해 잘림]

관련 스킬