Protocol은 UI를 지원하는 동시에 편집 콘텐츠와 마케팅 화면도 다룹니다. 이 예제는 큰 헤드라인과 오리지널 원형 일러스트로 시작한 뒤, 기사 미리보기와 요약 이메일 양식으로 이어집니다. 이 구성은 독자가 컨트롤을 조작하기 전에 메시지를 충분히 전달합니다. 정보 밀도가 높은 관리 대시보드와는 다른 구성입니다.
브랜드 테마와 애플리케이션의 콘셉트를 분리하세요
이 예제는 mzp-t-mozilla와 Protocol의 기본 타이포그래피를 사용합니다. 기사, 일러스트레이션, 읽기 밀도 설정은 독창적인 애플리케이션 콘텐츠입니다. 기본 클래스 이름이나 글꼴 파일을 사용한다고 해서 공식 Mozilla 서비스가 되는 것은 아닙니다. 푸터에서 범위를 설명하며, 다이제스트 작업은 확인 화면만 미리 보여 줍니다.
Mozilla Protocol 디자인 시스템 글꼴 및 제목 유틸리티
브랜드에 맞는 글꼴 조합 선택
Protocol 22는 Mozilla용 Mozilla Headline 및 Mozilla Text 스택과 Firefox용 Metropolis 및 Inter를 제공합니다. 이 예제는 패키지에 포함된 글꼴을 불러옵니다. 제목과 본문 역할을 구분하세요. 모든 문단에 디스플레이 서체를 적용하면 편집 구조를 유용하게 만드는 대비가 사라집니다.
시각적 크기와 제목 의미 구조를 분리
히어로는 mzp-u-title-lg를 적용한 h1입니다. 보조 섹션은 mzp-u-title-xs를 적용한 h2이고, 기사 제목은 mzp-u-title-2xs를 적용한 h3입니다. 반응형 유틸리티는 제목 구조를 바꾸지 않고 시각적 크기를 조정할 수 있습니다. 읽기 밀도 컨트롤은 샘플 문단만 변경하며, 페이지 전체나 컨트롤 크기는 바꾸지 않습니다.
h1은 페이지의 시작을 나타냅니다.
h2는 읽기 미리보기와 양식을 구분합니다.
h3은 기사 발췌문의 제목입니다.
Mozilla Protocol 디자인 시스템 색상 및 일러스트레이션
일러스트레이션을 편집 콘텐츠로 활용
원형 그라데이션은 간결한 접근성 설명을 곁들인 독창적인 CSS 아트워크입니다. 따뜻한 색에서 보라색으로 이어지는 이 표현은 새로운 공식 Mozilla 로고나 Protocol에서 내보낸 토큰으로 제시되지 않습니다. 페이지의 나머지 부분에는 절제된 중립색 표면을 사용해 일러스트레이션과 주요 작업이 뚜렷한 역할을 유지하도록 합니다.
양식 상태에 고유한 의미 부여
이메일 오류에는 텍스트 설명과 눈에 보이는 오류 테두리가 표시됩니다. 성공 시에는 별도의 확인 블록이 나타나며, 입력한 예시 주소와 함께 이메일이 전송되지 않았다는 점을 안내합니다. 화려한 히어로가 오류 상태와 경쟁하거나 양식이 성공했는지 모호하게 만들지 않도록 하세요.
Mozilla Protocol 디자인 시스템 컴포넌트 및 레이아웃 간격
두 가지 간격 척도를 의도적으로 사용
공개된 컴포넌트 간격 단계는 4, 8, 16, 24, 32, 48px입니다. 별도의 레이아웃 척도는 64, 96, 192px까지 확장됩니다. 양식과 카드 안에는 더 작은 척도를 사용하고, 편집 섹션 사이에는 더 큰 간격의 흐름을 적용하세요. 작은 간격을 모두 레이아웃 간격으로 늘리면 레이블과 입력 필드 사이의 관계가 흐려집니다.
열을 더 추가하기 전에 행 길이 제한
Mozilla Protocol 디자인 시스템 버튼, 세부 설명 및 양식
실제 양식 구조 유지
다이제스트 예제는 눈에 보이는 레이블, 이메일 입력 필드, 안내 문구, 오류 메시지, 제출 버튼으로 구성된 기본 양식입니다. Protocol은 컴포넌트의 스타일을 지정하고, 애플리케이션은 입력값을 검증해 로컬 결과를 표시합니다. 히어로 작업은 페이지 내 섹션으로 이동하므로 링크를 사용하고, 제출에는 버튼을 사용합니다.
보충 설명에는 간단한 펼침 요소 사용
‘변경 사항’ 펼침 요소는 기본 details/summary 쌍입니다. 본문을 방해하지 않으면서 사용자 지정 편안함 및 컴팩트 문단 설정을 설명합니다. 가짜 탐색 탭이나 숨겨진 필수 단계가 아니므로, 펼침 요소를 열거나 닫은 상태 모두에서 양식과 밀도 컨트롤을 사용할 수 있습니다.
Mozilla Protocol 디자인 시스템 읽기 및 유효성 검사 상태
읽기 설정은 한 번에 하나씩 변경
두 밀도 버튼은 레이블이 지정된 그룹을 이루며 aria-pressed 속성을 노출합니다. 컴팩트 설정으로 바꾸면 기사 안의 문단 글꼴 크기, 줄 높이, 아래쪽 간격만 변경됩니다. 텍스트, 제목, 양식 입력 필드는 그대로 유지됩니다. 이 예제는 이 설정과 Mozilla 및 Firefox 브랜드 테마 간 전환을 의도적으로 구분합니다.
양식 오류에서 예측 가능한 복구 제공
잘못된 주소를 입력하면 오류가 표시되고 입력 필드에 포커스가 이동합니다. 입력을 수정하면 이전 오류가 지워지고, 기존 확인 메시지가 숨겨집니다. 올바른 주소를 입력하면 로컬에서 생성된 결과가 표시되고 해당 결과에 포커스가 이동합니다. ‘다른 주소 입력’을 선택하면 양식이 초기화되고 잘못된 상태가 해제되며 입력 필드로 포커스가 돌아갑니다. 비동기 구독 처리는 제공되지 않습니다.
비어 있거나 형식이 잘못된 주소를 제출하고 필드 오류를 확인하세요.
예시 주소를 입력하고 로컬 확인 화면을 미리 보세요.
‘다른 주소 입력’을 사용해 양식을 초기화하고 입력 필드로 포커스를 되돌리세요.
Mozilla Protocol 디자인 시스템 접근성 있는 편집 컨트롤
아트워크와 컨트롤에 서로 다른 역할 부여
일러스트레이션은 간결한 대체 텍스트를 제공하는 이미지 역할 요소입니다. 밀도 버튼, 펼침 요소, 제출 작업은 실제 컨트롤입니다. 이메일 필드는 aria-describedby를 통해 안내 문구와 오류 메시지를 모두 참조합니다. 키보드 사용을 위해 기본 스타일에 더해 눈에 보이는 포커스 윤곽선을 제공합니다.
레이아웃이 세로로 쌓여도 의미 있는 순서 유지
문서 순서는 제목, 읽기 미리보기, 설명, 양식입니다. 모바일에서도 같은 순서를 유지하며, CSS는 양식을 맥락보다 앞에 배치하지 않습니다. 모바일에서 사용하는 180px 일러스트레이션은 가로 스크롤을 유발하는 고정 너비의 장애물이 아니라 편집 콘텐츠를 보조하는 요소입니다.
Mozilla Protocol 디자인 시스템 CSS 통합
공개된 에셋을 예제와 함께 번들링
제공된 진입점은 컴파일된 테마, protocol.css, protocol-components.css를 불러온 다음 애플리케이션 스타일시트를 불러옵니다. Protocol 22에서는 :root에 테마 사용자 지정 속성을 지정해야 합니다. 기존 브랜드 클래스만 추가하면 타이포그래피가 제대로 적용되지 않습니다. Vite를 시작하기 전에 protocol-theme.scss를 컴파일하세요. 모듈을 인식하는 번들러는 글꼴과 이미지 URL을 처리합니다. 아래의 HTML, JavaScript, CSS 블록에는 예제의 전체 소스가 포함되어 있습니다. 숨겨진 뉴스레터 백엔드나 패키지 전용 상태 제공자는 없습니다.
실제 구독 서비스가 있을 때만 양식을 확장
Mozilla Protocol 디자인 시스템 구성 요소 예시
index.html — 편집 페이지 전체
시맨틱 article, 밀도 조절, disclosure, 독창적인 CSS 일러스트가 포함된 로컬 다이제스트 양식입니다.
html
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Reading specimen</title></head>
<body>
<main class="reading-example mzp-t-mozilla">
<header class="reading-top">
<strong>MOZILLA PROTOCOL · EDITORIAL SPECIMEN</strong
><span>Original example by OpenDesign</span>
</header>
<section class="reading-hero">
<div>
<h1 class="mzp-u-title-lg">A little more room to read.</h1>
<p>
Make space for useful ideas, quieter pages, and a reading rhythm that
feels like yours.
</p>
<a class="mzp-c-button" href="#reading-controls"
>Explore the reading preview</a
>
</div>
<div
class="orb"
role="img"
aria-label="Original warm-to-purple circular illustration"
></div>
</section>
<div class="reading-main">
<section id="reading-controls">
<h2 class="mzp-u-title-xs">Choose your reading rhythm</h2>
<p>
Compare two application-defined densities using the same short article.
</p>
<div class="density-options" role="group" aria-label="Reading density">
<button
class="mzp-c-button mzp-t-secondary"
data-density="comfortable"
aria-pressed="true"
>
Comfortable</button
><button
class="mzp-c-button mzp-t-secondary"
data-density="compact"
aria-pressed="false"
>
Compact
</button>
</div>
<article id="article-sample">
<h3 class="mzp-u-title-2xs">The open page</h3>
<p>
A useful page gives an idea enough room to breathe. Its headings show
the path, its paragraphs keep a readable measure, and its controls
remain easy to find.
</p>
<p>
Changing density should preserve the story. This preview adjusts
paragraph size and spacing without replacing the article or changing
your place in the task.
</p>
</article>
<details>
<summary>What changes in this example?</summary>
<p>
Comfortable uses 16px text with 1.6 line height. Compact uses 14px
with 1.4. These are example reading preferences, not separate official
Protocol themes.
</p>
</details>
</section>
<aside class="signup">
<h2 class="mzp-u-title-xs">Preview a reading digest</h2>
<p>
Try the form styling and local validation. No subscription is created.
</p>
<form id="reading-form" novalidate>
<label for="email">Email address</label
><input
id="email"
type="email"
autocomplete="email"
aria-describedby="email-note email-error"
/>
<p class="note" id="email-note">
Use an example address. Nothing will be sent.
</p>
<p id="email-error" class="error" role="alert" hidden>
Enter an email address, such as [email protected].
</p>
<button class="mzp-c-button" type="submit">Preview confirmation</button>
</form>
<div id="confirmation" tabindex="-1" role="status" hidden>
Local preview confirmed for <strong></strong>. No email was sent.<button
id="reset"
class="mzp-c-button mzp-t-secondary"
type="button"
>
Try another address
</button>
</div>
</aside>
</div>
<footer class="reading-footer">
Native Mozilla Protocol 22.0.0 CSS and fonts. Original illustration, copy
and JavaScript; not an official Mozilla service.
</footer>
</main>
<script type="module" src="/src/main.js"></script>
</body></html>
기본 CSS/fonts와 독창적인 스크립트를 로컬 미리보기용으로 묶었습니다. Vite 릴리스에서 지원하는 Node.js 버전을 사용하세요. 빌드를 재배포할 때 패키지 라이선스와 에셋 출처를 함께 포함하세요.
sh
npm create vite@latest protocol-reading -- --template vanilla
cd protocol-reading
npm install
npm install @mozilla-protocol/[email protected]
npm install --save-dev sass
npx sass --load-path=node_modules src/protocol-theme.scss src/protocol-theme.css
# Replace index.html; add src/main.js and src/protocol.css from the full examples.
npm run dev
프로젝트를 위한 프롬프트
에이전트 프롬프트
Mozilla Protocol 22.0.0을 사용해 편집 페이지를 만드세요. 실제 글꼴, 간격, 컨테이너 참조를 확인하세요. 제공된 HTML/CSS/JS 구성 전체를 시작점으로 삼고, 시맨틱 제목과 항상 표시되는 양식 레이블을 유지하세요. 독창적인 일러스트 및 밀도 선택은 공식 토큰과 구분하세요. 로컬 유효성 검사를 실제와 다르게 표현하지 마세요. 실제 구독 기능은 서비스 및 동의 요건을 정의한 뒤에만 통합하세요.
05
Mozilla Protocol 디자인 시스템 출처 및 범위
Mozilla Protocol 22.0.0을 위한 OpenDesign 애플리케이션 가이드입니다. 이 예제는 공개된 CSS와 번들로 제공된 글꼴을 독창적인 문구, 일러스트, 로컬 양식 동작과 함께 실행합니다. Mozilla 제품, 뉴스레터 또는 구독 서비스가 아닙니다. 브랜드와 에셋의 권리는 각 소유자에게 있습니다.