kern.min.css에는 Fira Sans가 지정되어 있고, fonts/fira-sans.css에는 실제 font-face와 상대 경로의 WOFF2 에셋이 선언되어 있습니다. 글꼴 디렉터리를 그대로 유지해야 스타일시트에 올바른 글꼴이 지정되어 있는데도 다른 글꼴로 조용히 대체되는 일을 막을 수 있습니다. 정적 텍스트 크기는 16, 18, 21px로 유지되며, 적응형 제목 및 헤딩 토큰은 768px에서 바뀝니다. 계층 구조에는 제목 요소를 사용하고, 시각적 표현에는 적절한 KERN 클래스를 사용하세요. 이 예제에는 h1이 하나만 있으며 다이얼로그에는 별도의 h2가 지정되어 있습니다.
KERN은 0~192px 범위의 이름이 지정된 간격 토큰을 제공하며, 작은 값에는 2px와 4px 단위의 간격도 포함됩니다. 테두리와 모서리 반경 토큰은 별도의 척도를 사용합니다. 이 예제는 세로 간격을 24px로 유지하고 작업 행을 줄바꿈할 수 있게 구성합니다. 콘텐츠 최대 너비 800px와 다이얼로그 최대 너비 560px는 명시적으로 지정한 애플리케이션별 선택 사항이며, 어느 쪽도 범용 KERN 컨테이너로 제시하지 않습니다. 화면이 좁을 때는 페이지 여백이 16px로 바뀌고 다이얼로그 너비는 뷰포트 안에 유지됩니다. 문서에 최소 뷰포트 높이를 적용하지 않으므로 다른 요소에 포함해도 크기 조정 피드백 루프가 발생하지 않습니다.
패키지는 텍스트, 액션, 배경, 포커스에 시맨틱 CSS 속성을 사용합니다. 라이트 및 다크 팔레트는 이러한 역할의 색상을 함께 바꿉니다. 예를 들어 action-default는 라이트 모드에서 darkblue-700, 다크 모드에서 darkblue-300에 매핑되고, 전경색은 흰색에서 검은색으로 바뀝니다. 이 예제는 html에 data-kern-theme을 설정하고 눌림 상태를 표시하는 버튼을 제공합니다. 이 설정은 현재 문서에만 적용되며 저장되지 않습니다. 명시적 속성을 제거하면 스타일시트는 prefers-color-scheme을 따릅니다.
textarea에는 kern-form-input 안에 kern-form-input__input을 사용하고, 입력 요소의 id를 가리키는 실제 label을 연결합니다. 안내 문구에는 별도의 id를 지정하고 aria-describedby로 입력 요소와 연결합니다. 선택 입력인 로컬 메모이므로, 이 예제에서는 필수 입력 오류나 서버 저장 기능을 만들어내지 않습니다. ‘예시 복원’을 선택하면 초기값을 설정하고 편집 가능한 필드에 포커스를 둡니다. 상태 영역은 라벨을 대체하거나 비활성 텍스트로 포커스를 옮기지 않고 결과를 알립니다.
열린 상태는 details 요소가 관리하고 summary가 트리거 역할을 합니다. KERN은 표현을 위해 kern-details__header, 작은 제목 span, kern-details__body를 추가합니다. 이 예제에서는 보관 기간 정보를 부가 정보로 여기에 배치합니다. 필수 안내, 오류, 폐기 작업은 공개 영역 밖에 계속 표시합니다. 네이티브 키보드 동작으로 활성화할 수 있으므로 별도의 클릭 핸들러나 중복된 aria-expanded 상태가 필요하지 않습니다.
summary는 내용을 구체적이고 간결하게 설명하도록 작성하세요.
summary 안에 다른 버튼이나 링크를 넣지 마세요.
서로 관련된 항목을 묶어 공개할 때는 Accordion을 사용하세요. 관련 없는 작업을 Details처럼 보이게 만들지 마세요.
다이얼로그의 h2를 라벨로 사용하고, 짧은 결과 설명을 연결합니다. 헤더, 본문, 푸터에는 KERN에 문서화된 클래스를 사용합니다. showModal()은 네이티브 다이얼로그를 최상위 레이어에 표시하고, close()는 상호작용을 끝냅니다. autofocus를 통해 ‘메모 유지’에 초기 포커스를 둡니다. Escape를 누르면 텍스트를 변경하지 않고 닫히며, 닫힘 이벤트 리스너는 ‘메모 폐기’로 포커스를 돌려보냅니다. ‘예, 폐기’를 선택했을 때만 값이 변경됩니다. 데이터 삭제 확인이므로 배경 클릭으로는 다이얼로그를 닫지 않습니다. 이는 일반 예제의 배경 클릭 닫기 핸들러를 무분별하게 복사하는 대신, 중요한 결정을 위한 문서화된 지침을 따릅니다.
아래 설정은 버전을 정확히 지정한 패키지 하나를 설치하고 CSS과 글꼴 디렉터리를 복사합니다. 전체 예제에는 자체 레이아웃 CSS, 루트 테마 속성, DOM 구조, 이벤트 연결 코드가 포함되어 있습니다. 실제 양식에 통합한 뒤에는 다이얼로그의 두 가지 결과, Escape, 좁은 화면을 모두 테스트하세요. KERN 코드는 EUPL 라이선스로 제공되며, 웹사이트의 텍스트 및 그래픽 자료에는 CC BY-NC-SA가 적용됩니다. 이 독립적인 예제는 기관의 정체성을 복제하거나 서비스가 접근성 감사를 통과했다고 암시하지 않습니다. 실제 애플리케이션에는 데이터 영속성, 서버 측 검증, 전체 사용자 여정에 대한 평가가 여전히 필요합니다.
문서 마크업, 레이아웃 CSS, 애플리케이션 동작이 모두 포함되어 있습니다. 설정 블록을 사용해 에셋을 설치하세요.
html
<!doctype html><html lang="en" data-kern-theme="light"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>KERN workshop note</title><link rel="stylesheet" href="vendor/kern-2.8.2/kern.min.css"><link rel="stylesheet" href="vendor/kern-2.8.2/fonts/fira-sans.css"><style>body{margin:0;padding:clamp(16px,4vw,40px);color:var(--kern-color-layout-text-default)}main{max-width:800px;margin:auto;display:grid;gap:24px}.top,.actions{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.top{justify-content:space-between}.kern-dialog{max-width:min(560px,calc(100% - 32px))}textarea{width:100%;resize:vertical}#status{min-height:24px}.kern-details{width:100%}</style><main><div class="top"><span class="kern-preline">KERN · Native components</span><button class="kern-btn kern-btn--secondary" id="theme" aria-pressed="false"><span class="kern-label">Dark appearance</span></button></div><h1 class="kern-heading kern-heading--large">Workshop note</h1><p class="kern-body">Prepare a short note for your next workshop. This demonstration keeps edits only in this page.</p><div class="kern-form-input"><label class="kern-label" for="note">Your note</label><p class="kern-hint" id="hint">No personal information is needed. Nothing is submitted.</p><textarea class="kern-form-input__input" rows="5" id="note" aria-describedby="hint">Discuss accessible ways to collect workshop feedback.</textarea></div><details class="kern-details"><summary class="kern-details__header"><span class="kern-title kern-title--small">What happens to this note?</span></summary><div class="kern-details__body"><p class="kern-body">Edits live in this browser tab. Reloading restores the example text. Discarding clears the current note after confirmation; it does not delete a server record.</p></div></details><div class="actions"><button class="kern-btn kern-btn--primary" id="discard"><span class="kern-label">Discard note</span></button><button class="kern-btn kern-btn--secondary" id="restore"><span class="kern-label">Restore example</span></button></div><p id="status" class="kern-body" role="status"></p><dialog class="kern-dialog" id="confirm" aria-labelledby="confirm-title" aria-describedby="confirm-description"><header class="kern-dialog__header"><h2 class="kern-title kern-title--large" id="confirm-title">Discard this note?</h2></header><section class="kern-dialog__body"><p class="kern-body" id="confirm-description">Your current text will be cleared from this page. Choose Keep note to continue editing.</p></section><footer class="kern-dialog__footer"><button class="kern-btn kern-btn--secondary" id="keep" autofocus><span class="kern-label">Keep note</span></button><button class="kern-btn kern-btn--primary" id="clear"><span class="kern-label">Yes, discard</span></button></footer></dialog></main><script>const byId=id=>document.getElementById(id),note=byId('note'),modal=byId('confirm'),original=note.value;byId('discard').onclick=()=>modal.showModal();byId('keep').onclick=()=>modal.close('keep');byId('clear').onclick=()=>{note.value='';modal.close('discard');byId('status').textContent='Note discarded from this page.'};modal.addEventListener('close',()=>byId('discard').focus());byId('restore').onclick=()=>{note.value=original;byId('status').textContent='Example restored.';note.focus()};byId('theme').onclick=()=>{const dark=document.documentElement.dataset.kernTheme!=='dark';document.documentElement.dataset.kernTheme=dark?'dark':'light';byId('theme').setAttribute('aria-pressed',String(dark))};</script></html>
빌드 단계나 UI 프레임워크가 필요하지 않습니다. CSS에서 상대 경로의 WOFF2 파일을 불러오므로 글꼴 디렉터리는 그대로 유지하세요. Sources의 완전한 작업 예제 ZIP에는 정확한 미리보기 종속 항목과 전체 문서도 포함되어 있습니다. 압축을 푼 뒤 해당 디렉터리에서 python3 -m http.server 8080을 실행하고 http://localhost:8080/kern.html을 여세요. 모듈을 사용하는 예제는 file://로 열지 마세요.
bash
npm install --save-exact @kern-ux/[email protected]
mkdir -p vendor/kern-2.8.2
cp node_modules/@kern-ux/native/dist/kern.min.css vendor/kern-2.8.2/
cp -R node_modules/@kern-ux/native/dist/fonts vendor/kern-2.8.2/
# Save the complete HTML example below as kern.html beside vendor/.
python3 -m http.server 8080
# Open http://localhost:8080/kern.html
프로젝트를 위한 프롬프트
에이전트 프롬프트
@kern-ux/native 2.8.2 CSS와 패키지에 포함된 Fira Sans를 사용해 로컬 워크숍 메모 예제를 만드세요. 레이블이 지정된 kern-form-input 텍스트 영역, 보조 네이티브 Details 공개 영역, 레이블이 지정된 헤더·본문·푸터가 있는 kern-dialog를 구성하세요. showModal()로 대화상자를 열고 Keep note에 자동으로 포커스를 둡니다. Escape를 누르면 텍스트를 바꾸지 않고 대화상자를 닫으며, Yes, discard를 선택한 경우에만 메모를 지우세요. 닫을 때 트리거로 포커스를 돌려보내고 Restore example을 제공하세요. 새 팔레트 토큰을 만들지 말고 data-kern-theme을 light와 dark 사이에서 전환하세요. 기존 애플리케이션의 너비 선택지를 그대로 유지하고 메모를 로컬에 보관하세요. 업로드나 서버 초안, 정부 서비스 관련 주장은 필요하지 않습니다.
05
KERN 디자인 시스템 출처 및 범위
KERN 코드를 사용한 독창적인 데모입니다. 정부 기관의 정체성, 영구 저장 또는 접근성 인증을 의미하지 않습니다.