No React. Each item is one set of gn- classes plus one block of markup, liftable with the copy button.React를 만들지 않는다. 각 항목은 gn- 클래스 한 벌과 복붙용 마크업 하나로 끝나고, 복사 버튼으로 그대로 가져갈 수 있다.
<div class="gn-card gn-card-interactive"> <div class="gn-card-head"> <div class="gn-card-title">Pilo</div> <div class="gn-card-desc">One-line description</div> </div> <div class="gn-card-body">Body.</div> <div class="gn-card-foot"> <button class="gn-btn gn-btn-sm gn-btn-brand">Run</button> </div> </div><div class="gn-card gn-card-interactive"> <div class="gn-card-head"> <div class="gn-card-title">Pilo</div> <div class="gn-card-desc">한 줄 설명</div> </div> <div class="gn-card-body">본문.</div> <div class="gn-card-foot"> <button class="gn-btn gn-btn-sm gn-btn-brand">실행</button> </div> </div>
<span class="gn-badge gn-badge-brand">pilo</span> <span class="gn-badge gn-badge-warning gn-badge-dot">running</span> <span class="gn-tag" aria-selected="true"> Design System<span class="gn-tag-x">×</span> </span>
| id | task | state | elapsed |
|---|---|---|---|
| in-317 | Fix HWPX line breakHWPX 줄바꿈 수정 | done | 3m 29s |
| in-318 | Unify token names토큰 이름 통일 | running | 1m 04s |
| in-319 | Port the deck template덱 템플릿 이식 | queued | — |
<table class="gn-table"> <thead><tr> <th>id</th><th>task</th> <th class="gn-table-num">elapsed</th> </tr></thead> <tbody><tr> <td>in-317</td><td>Fix HWPX line break</td> <td class="gn-table-num">3m 29s</td> </tr></tbody> </table><table class="gn-table"> <thead><tr> <th>id</th><th>task</th> <th class="gn-table-num">elapsed</th> </tr></thead> <tbody><tr> <td>in-317</td><td>HWPX 줄바꿈 수정</td> <td class="gn-table-num">3m 29s</td> </tr></tbody> </table>
<hr class="gn-divider" /> <div class="gn-divider-label"><span>or</span></div> <figure class="gn-figure"> <div class="gn-figure-slot">screenshot 16:9</div> <figcaption class="gn-figure-cap">Caption.</figcaption> </figure><hr class="gn-divider" /> <div class="gn-divider-label"><span>or</span></div> <figure class="gn-figure"> <div class="gn-figure-slot">screenshot 16:9</div> <figcaption class="gn-figure-cap">캡션.</figcaption> </figure>
<label class="gn-field"> <span class="gn-field-label"> Email <span class="gn-field-req">*</span> </span> <input class="gn-input" type="email" placeholder="you@example.com" /> <span class="gn-field-hint">The address I should reply to.</span> </label> <input class="gn-input" value="you@" aria-invalid="true" /> <span class="gn-field-error">The domain is missing.</span> <textarea class="gn-textarea"></textarea> <select class="gn-select"><option>…</option></select><label class="gn-field"> <span class="gn-field-label"> 이메일 <span class="gn-field-req">*</span> </span> <input class="gn-input" type="email" placeholder="you@example.com" /> <span class="gn-field-hint">회신 받을 주소.</span> </label> <input class="gn-input" value="you@" aria-invalid="true" /> <span class="gn-field-error">도메인이 빠졌습니다.</span> <textarea class="gn-textarea"></textarea> <select class="gn-select"><option>…</option></select>
<label class="gn-check"> <input type="checkbox" checked /> <span class="gn-check-box">✓</span>Notify after deploy </label> <label class="gn-switch"> <input type="checkbox" checked /> <span class="gn-switch-track"> <span class="gn-switch-knob"></span> </span>Autosave </label> <div class="gn-seg gn-seg-sm" role="tablist"> <button class="gn-seg-opt" role="tab" aria-selected="true">All</button> <button class="gn-seg-opt" role="tab">Work</button> </div><label class="gn-check"> <input type="checkbox" checked /> <span class="gn-check-box">✓</span>배포 후 알림 </label> <label class="gn-switch"> <input type="checkbox" checked /> <span class="gn-switch-track"> <span class="gn-switch-knob"></span> </span>자동 저장 </label> <div class="gn-seg gn-seg-sm" role="tablist"> <button class="gn-seg-opt" role="tab" aria-selected="true">전체</button> <button class="gn-seg-opt" role="tab">작업</button> </div>
One notification at a time; position is shown by form. The deck frame scales with a container query.알림은 한 번에 하나, 위치는 형태로 표시한다. 덱 프레임은 컨테이너 쿼리로 크기를 따라간다.
<div class="gn-overlay" role="dialog" aria-modal="true"> <div class="gn-dialog gn-dialog-danger"> <div class="gn-dialog-head"><div> <div class="gn-dialog-title">Delete?</div> <div class="gn-dialog-desc">This cannot be undone.</div> </div></div> <div class="gn-dialog-foot"> <button class="gn-btn gn-btn-sm">Cancel</button> <button class="gn-btn gn-btn-sm gn-btn-danger">Delete</button> </div> </div> </div><div class="gn-overlay" role="dialog" aria-modal="true"> <div class="gn-dialog gn-dialog-danger"> <div class="gn-dialog-head"><div> <div class="gn-dialog-title">삭제할까요?</div> <div class="gn-dialog-desc">되돌릴 수 없습니다.</div> </div></div> <div class="gn-dialog-foot"> <button class="gn-btn gn-btn-sm">취소</button> <button class="gn-btn gn-btn-sm gn-btn-danger">삭제</button> </div> </div> </div>
<div class="gn-toaster" role="status" aria-live="polite"> <div class="gn-toast gn-toast-success"> <span class="gn-toast-icon">✓</span> <div> <div class="gn-toast-title">Deployed</div> <div class="gn-toast-desc">e96ecaf · 12s</div> </div> </div> </div> <span class="gn-tip-wrap"> <button class="gn-iconbtn" aria-label="Open">❯</button> <span class="gn-tip" role="tooltip">Open with ⌘K</span> </span><div class="gn-toaster" role="status" aria-live="polite"> <div class="gn-toast gn-toast-success"> <span class="gn-toast-icon">✓</span> <div> <div class="gn-toast-title">배포 완료</div> <div class="gn-toast-desc">e96ecaf · 12s</div> </div> </div> </div> <span class="gn-tip-wrap"> <button class="gn-iconbtn" aria-label="Open열기">❯</button> <span class="gn-tip" role="tooltip">⌘K 로 열기</span> </span>
These four are the whole app shell. Sidebar fixed at 268px, top bar 54px.이 넷이 앱 셸의 전부다. 사이드바 고정폭 268px, 상단 54px.
<div class="gn-topbar gn-topbar-sticky">…</div> <nav class="gn-sidenav"> <div class="gn-sidenav-group">workspace</div> <div class="gn-sidenav-item" aria-current="page">runs <span class="gn-sidenav-meta">4</span> </div> </nav> <div class="gn-tabs" role="tablist"> <button class="gn-tab" role="tab" aria-selected="true">Overview</button> </div> <div class="gn-crumbs"><span>home</span><span>/</span><span>pilo</span></div><div class="gn-topbar gn-topbar-sticky">…</div> <nav class="gn-sidenav"> <div class="gn-sidenav-group">workspace</div> <div class="gn-sidenav-item" aria-current="page">runs <span class="gn-sidenav-meta">4</span> </div> </nav> <div class="gn-tabs" role="tablist"> <button class="gn-tab" role="tab" aria-selected="true">개요</button> </div> <div class="gn-crumbs"><span>home</span><span>/</span><span>pilo</span></div>
<span class="gn-chip gn-chip-running">running</span> <div class="deck-scope"> <div class="gn-slide"> <div class="gn-slide-label">2026.09.02</div> <div class="gn-slide-title">Terminal-based system</div> <div class="gn-slide-body">One-line subtitle</div> <div class="gn-slide-num">01</div> </div> <div class="gn-slide gn-slide-field">…</div> </div> <!-- size follows the container (cqw) --><span class="gn-chip gn-chip-running">running</span> <div class="deck-scope"> <div class="gn-slide"> <div class="gn-slide-label">2026.09.02</div> <div class="gn-slide-title">터미널 기반 시스템</div> <div class="gn-slide-body">부제 한 줄</div> <div class="gn-slide-num">01</div> </div> <div class="gn-slide gn-slide-field">…</div> </div> <!-- 크기는 컨테이너를 따라간다 (cqw) -->