Section 01
타이포그래피 시스템
팀 보고서 전반에 적용되는 폰트·크기·굵기·행간 표준입니다. Google Fonts CDN으로 로드하며 한글(Pretendard Variable)과 코드(JetBrains Mono) 두 종만 사용합니다.
폰트 선언 — <head> 복사용
HTML
<link href="https://fonts.googleapis.com/css2?family=Pretendard+Variable:wght@100..900&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
CSS
--font: 'Pretendard Variable', 'Noto Sans KR', sans-serif; --mono: 'JetBrains Mono', monospace;
타입 스케일 — 실제 렌더링
H1 보고서 제목
CSS
font-size: 32px; font-weight: 800; line-height: 1.2;
H2 섹션 헤더
CSS
font-size: 24px; font-weight: 700; line-height: 1.3;
H3 소제목
CSS
font-size: 18px; font-weight: 700; line-height: 1.4;
H4 항목 제목
CSS
font-size: 15px; font-weight: 600; line-height: 1.4;
본문 텍스트. 측정 결과를 기술하는 문장으로 행간을 확인합니다. 공학 보고서의 기본 단위입니다.
CSS
font-size: 14px; font-weight: 400; line-height: 1.7;
그림 1. 4기통 엔진 RPM 구간별 진동 가속도 측정 결과 (단위: g)
CSS
font-size: 12px; font-weight: 400; color: var(--text2);
표 내부 데이터 · 13px 기준
CSS
font-size: 13px; font-weight: 400; line-height: 1.5;
Section 02
색상 토큰
모든 색상은
:root CSS 변수로 선언합니다. 코드에 hex 값을 직접 쓰지 않고 변수명만 사용합니다.브랜드 컬러
Brand
--brand
#2E86C1
Brand Dark
--brand-d
#1a5276
Brand Light
--brand-l
#aed6f1
시맨틱 컬러
Success
--success
#27AE60
Warning
--warning
#F39C12
Danger
--danger
#E74C3C
Info
--info
#8E44AD
차트 전용 팔레트 (순서 고정)
Chart 1
--c1
#2E86C1
Chart 2
--c2
#E74C3C
Chart 3
--c3
#27AE60
Chart 4
--c4
#F39C12
Chart 5
--c5
#8E44AD
Chart 6
--c6
#E67E22
배경·텍스트·선
BG
--bg
#f4f6f9
Surface
--surface
#ffffff
Surface 2
--surface2
#f0f2f5
Line
--line
#dde1e7
Text
--text
#1a1d26
Text 2
--text2
#4a5568
Muted
--muted
#8899aa
Section 03
레이아웃·그리드
A4 기준 여백, 컬럼 분할, 간격 단위 체계. 모든 간격은 8px 배수로 통일합니다.
A4 여백 기준
top: 20mm
left: 25mm
right: 25mm
본문 영역 (max-width: 800px)
bottom: 20mm
CSS · @media print
@media print {
body { margin: 0; padding: 0; }
.report { padding: 20mm 25mm; max-width: 100%; }
.no-print { display: none; }
.page-break { page-break-before: always; }
* { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
}컬럼 분할 예시
6:4 분할 — 그래프 + 설명 텍스트
그래프 영역 (60%)
설명 텍스트 (40%)
7:3 분할 — 본문 + 사이드 노트
본문 (70%)
사이드 (30%)
1:1:1 3등분 — 수치 요약 카드
지표 A
지표 B
지표 C
CSS
.col-6-4 { display: grid; grid-template-columns: 6fr 4fr; gap: 24px; }
.col-7-3 { display: grid; grid-template-columns: 7fr 3fr; gap: 24px; }
.col-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 16px; }간격 단위 체계 (8px 배수)
--sp-1: 4px
아이콘-텍스트 간격, 태그 내부 패딩
--sp-2: 8px
인접 요소 간격, 소규모 패딩
--sp-3: 12px
카드 내부 항목 간격
--sp-4: 16px
카드 패딩, 섹션 내 요소 간격
--sp-5: 24px
카드 간격, 컬럼 gutter
--sp-6: 32px
주요 섹션 내 블록 간격
--sp-7: 48px
섹션 간 여백
--sp-8: 64px
페이지 최상단 패딩
Section 04
컴포넌트 라이브러리
실제 렌더링(좌)과 HTML 코드(우)를 나란히 표시합니다. 우측 코드를 복사해 보고서에 바로 붙여 넣으세요.
섹션 헤더
1
진동 측정 결과
코드
HTML
<div class="rpt-sec-hd"> <div class="rpt-num-badge">1</div> <h3>진동 측정 결과</h3> </div> <div class="rpt-divider"></div>
데이터 표
| 측정 위치 | RPM | 가속도(g) | 판정 |
|---|---|---|---|
| 엔진 마운트 | 3,000 | 2.4 | 정상 |
| 서브프레임 | 3,000 | 3.1 | ⚠ 주의 |
| 대시보드 | 3,000 | 0.8 | 정상 |
| 최대값 | 3.1 | — | |
코드
HTML
<table class="rpt-table">
<thead>
<tr><th>측정 위치</th>...</tr>
</thead>
<tbody>
<tr><td>...</td></tr>
<tr class="hl">...</tr> <!-- 강조행 -->
<tr class="tot">...</tr> <!-- 합계행 -->
</tbody>
</table>그림 + 캡션
[ 그래프 / 이미지 영역 ]
코드
HTML
<figure class="rpt-fig">
<img src="./assets/fig1.png" alt="그래프">
<figcaption class="rpt-figcap">
<strong>그림 1.</strong> 설명 텍스트
</figcaption>
</figure>콜아웃 박스 3종
ℹ️
참고 — 이 측정값은 공회전 조건 기준입니다.
⚠️
주의 — 3,000 RPM 구간에서 한계값(3.0g) 초과.
✅
결론 — 엔진 마운트·대시보드는 허용 범위 내 정상.
코드
HTML
<div class="rpt-callout info"> <span>ℹ️</span> <div><strong>참고</strong> — 내용</div> </div> <div class="rpt-callout warn">...</div> <div class="rpt-callout ok">...</div>
코드·수식 블록
f_n = (1/2π) × √(k/m)
여기서 k = 강성 [N/m], m = 질량 [kg]
여기서 k = 강성 [N/m], m = 질량 [kg]
코드
HTML
<div class="rpt-code-blk"> f_n = (1/2π) × √(k/m) </div>
인라인 강조 — 수치·단위
최대 가속도는 3.1g로 한계값 대비 103% 수준이며, 측정 온도는 72.4°C를 기록했습니다.
코드
HTML
<span class="rpt-hi">3.1</span> <span class="rpt-unit">g</span>
Section 05
인터랙션 컴포넌트
마우스 반응·애니메이션·소팅 등 사용자 경험을 높이는 인터랙션 컴포넌트입니다. 복사 버튼으로 코드 전체를 가져가세요.
마그네틱 카드 — 마우스 접근 시 3D 기울기
진동 분석
FFT 기반 주파수 응답 분석
온도 측정
열화상 카메라 데이터 처리
소음 평가
사운드레벨미터 측정값 분석
코드
HTML + JS
<div class="mag-card" data-mag>내용</div>
<script>
document.querySelectorAll('[data-mag]').forEach(card => {
card.addEventListener('mousemove', e => {
const r = card.getBoundingClientRect();
const x = (e.clientX - r.left) / r.width - .5;
const y = (e.clientY - r.top) / r.height - .5;
card.style.transform =
`perspective(600px) rotateY(${x*14}deg) rotateX(${-y*14}deg) scale(1.03)`;
});
card.addEventListener('mouseleave', () => {
card.style.transform = '';
});
});
</script>KPI 애니메이션 카드 — 뷰포트 진입 시 카운트업
최대 가속도
0g
▲ 한계 대비 103%
측정 포인트
0개
▲ 전회 대비 +4
평균 온도
0°C
▼ 기준 대비 -5%
코드
HTML + JS
<div class="kpi-val" data-kpi="3.1" data-dec="1">
0<span>g</span>
</div>
<script>
const obs = new IntersectionObserver(entries => {
entries.forEach(e => {
if (!e.isIntersecting) return;
const el = e.target, end = +el.dataset.kpi;
const dec = +el.dataset.dec, unit = el.querySelector('span');
const txt = unit?.outerHTML || '';
let start = 0, dur = 1200, t0 = null;
const tick = t => {
if (!t0) t0 = t;
const p = Math.min((t - t0) / dur, 1);
const v = (end * (p < .5 ? 2*p*p : 1-(2*(1-p)**2)));
el.innerHTML = v.toFixed(dec) + txt;
if (p < 1) requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
obs.unobserve(el);
});
});
document.querySelectorAll('[data-kpi]').forEach(el => obs.observe(el));
</script>리플 버튼 — 클릭 파문 효과
코드
HTML + JS
<button class="rpl-btn" data-ripple>버튼</button>
<script>
document.querySelectorAll('[data-ripple]').forEach(btn => {
btn.addEventListener('click', e => {
const r = btn.getBoundingClientRect();
const d = Math.max(r.width, r.height);
const rpl = document.createElement('span');
rpl.className = 'ripple';
rpl.style.cssText =
`width:${d}px;height:${d}px;
left:${e.clientX-r.left-d/2}px;
top:${e.clientY-r.top-d/2}px`;
btn.appendChild(rpl);
setTimeout(() => rpl.remove(), 600);
});
});
</script>아코디언 — 클릭 확장·축소
측정 조건 ▼
샘플링 주파수: 10 kHz · 측정 시간: 10 sec · 창함수: Hanning Window · 해상도: 1 Hz
장비 정보 ▼
가속도계: PCB 356A32 · DAQ: NI USB-6341 · 소프트웨어: LabVIEW 2024
판정 기준 ▼
한계값 3.0 g 초과 시 주의, 5.0 g 초과 시 즉시 조치 필요
코드
HTML + JS
<div class="acc-item">
<div class="acc-head" onclick="toggleAcc(this)">
제목 <span class="acc-arrow">▼</span>
</div>
<div class="acc-body">
<div class="acc-inner">내용</div>
</div>
</div>
<script>
function toggleAcc(head) {
head.closest('.acc-item').classList.toggle('open');
}
</script>소터블 테이블 — 헤더 클릭 정렬
| 측정 위치 | RPM | 가속도(g) |
|---|---|---|
| 엔진 마운트 | 3000 | 2.4 |
| 서브프레임 | 3000 | 3.1 |
| 대시보드 | 3000 | 0.8 |
| 도어 트림 | 3000 | 1.2 |
코드
HTML + JS
<th onclick="sortTable('id',0,this)">
컬럼명<span class="sort-ic"></span>
</th>
<script>
function sortTable(id, col, th) {
const tbl = document.getElementById(id);
const asc = !th.classList.contains('asc');
tbl.querySelectorAll('th').forEach(t =>
t.classList.remove('asc','desc'));
th.classList.add(asc ? 'asc' : 'desc');
const rows = [...tbl.tBodies[0].rows];
rows.sort((a,b) => {
const av = a.cells[col].textContent.trim();
const bv = b.cells[col].textContent.trim();
const n = !isNaN(av) && !isNaN(bv);
return asc
? (n ? av-bv : av.localeCompare(bv))
: (n ? bv-av : bv.localeCompare(av));
});
rows.forEach(r => tbl.tBodies[0].appendChild(r));
}
</script>툴팁 — 호버 시 설명 말풍선
FFT
Fast Fourier Transform — 시간 신호를 주파수 성분으로 변환
RMS
Root Mean Square — 신호의 실효값
SPL
Sound Pressure Level — 음압 레벨 (dB 단위)
코드
HTML (CSS only)
<div class="tip-wrap"> <span class="tip-target">FFT</span> <div class="tip">설명 텍스트</div> </div> /* JS 불필요 — 순수 CSS hover로 동작 */
Section 06
CSS 변수 구조
:root에 선언된 변수만 교체하면 전체 테마가 바뀝니다. 보고서 코드 어디에도 hex 값을 직접 쓰지 마세요.전체 :root 변수 선언 — 복사 후 <style> 상단에 붙여넣기
CSS
:root {
/* ── Brand ── */
--brand: #2E86C1;
--brand-d: #1a5276;
--brand-l: #aed6f1;
/* ── Semantic ── */
--success: #27AE60;
--warning: #F39C12;
--danger: #E74C3C;
--info: #8E44AD;
/* ── Chart palette (순서 고정) ── */
--c1: #2E86C1; --c2: #E74C3C;
--c3: #27AE60; --c4: #F39C12;
--c5: #8E44AD; --c6: #E67E22;
/* ── Surface & Text ── */
--bg: #f4f6f9;
--surface: #ffffff;
--surface2: #f0f2f5;
--line: #dde1e7;
--text: #1a1d26;
--text2: #4a5568;
--muted: #8899aa;
/* ── Typography ── */
--font: 'Pretendard Variable', 'Noto Sans KR', sans-serif;
--mono: 'JetBrains Mono', monospace;
/* ── Spacing (8px 배수) ── */
--sp-1: 4px; --sp-2: 8px;
--sp-3: 12px; --sp-4: 16px;
--sp-5: 24px; --sp-6: 32px;
--sp-7: 48px; --sp-8: 64px;
/* ── Border radius ── */
--r: 8px;
--r-sm: 4px;
--r-lg: 14px;
}
/* 다크 모드 오버라이드 */
[data-theme="dark"] {
--bg: #0e1016;
--surface: #13151c;
--surface2: #1a1d26;
--line: #2a2d3a;
--text: #e8eaf0;
--text2: #9aa5b8;
--muted: #5a6478;
}변수 사용 원칙
✅
올바른 사용 —
color: var(--text); · background: var(--brand);🚫
금지 —
color: #1a1d26; · background: #2E86C1; — hex 직접 사용 시 다크 모드·테마 교체 불가테마 교체 방법 — :root 값만 변경
/* 예: 빨강 계열 브랜드로 전환 */
:root {
--brand: #C0392B;
--brand-d: #922B21;
--brand-l: #f1948a;
/* 나머지 변수는 그대로 유지 */
}Section 07
파일 운용 가이드
서로 다른 컴퓨터에서 같은 품질의 보고서를 만들기 위한 운용 규칙입니다.
이 레퍼런스 파일의 존재 이유
팀원마다 폰트·색상·여백이 제각각인 보고서가 나오는 문제를 없애기 위해 만든 단일 진실 공급원(Single Source of Truth)입니다.
단일 HTML 파일인 이유 — 외부 CSS 파일·이미지·폰트 파일이 분리되면 컴퓨터를 옮겼을 때 경로가 깨집니다. 이 파일은 Google Fonts CDN을 제외한 모든 코드를 인라인으로 포함해 파일 하나만 공유하면 어디서든 동일하게 열립니다.
새 보고서 작성 시작 절차
1
이 파일에서 <style> 블록 전체 복사
:root 변수 선언부터 컴포넌트 CSS까지 모두 포함
2
새 HTML 파일의 <head>에 붙여넣기
Google Fonts <link> 태그도 함께 복사
3
<body>에서 필요한 컴포넌트 HTML만 복사
섹션 헤더·표·콜아웃 등 04번 탭의 코드 블록 사용
4
내용만 채우기
CSS 클래스명·변수명은 절대 수정하지 않음
수정 금지 항목
🚫
CSS 변수명 변경 금지 —
--brand를 --blue로 바꾸는 식의 이름 변경은 팀 전체 파일과 충돌 발생🚫
컴포넌트 클래스명 변경 금지 —
rpt-table, rpt-callout 등 팀 표준 클래스명 임의 변경 금지🚫
hex 직접 사용 금지 — 색상은 반드시 CSS 변수로만 참조
외부 의존성 규칙
허용 Google Fonts CDN — 폰트 로드 전용
허용 Chart.js CDN — 차트 시각화 전용 (
https://cdn.jsdelivr.net/npm/chart.js)주의 오프라인 환경 — 인터넷 없는 환경에서는 폰트 파일을
./assets/fonts/에 로컬 배치 후 @font-face로 선언금지 기타 외부 CSS 프레임워크 — Bootstrap, Tailwind 등 충돌 가능성
이미지 경로 규칙
폴더 구조
보고서파일.html
└── assets/
├── fonts/ ← 오프라인 폰트 (필요시)
├── figures/ ← 그래프·사진 이미지
└── data/ ← CSV·JSON 원본 데이터HTML 경로 표기
<img src="./assets/figures/fig1_vibration.png" alt="진동 측정 결과">
파일 네이밍 컨벤션
규칙
YYYYMMDD_보고서명_vN.html 예시: 20260822_진동측정결과_v1.html 20260822_진동측정결과_v2.html ← 수정 시 버전 번호 올림 20260901_냉각성능평가_v1.html
ℹ️
파일명에 날짜·버전을 포함하면 여러 버전이 혼재해도 최신본을 즉시 식별 가능합니다.
이 레퍼런스 파일 업데이트 규칙
① 변경 전 팀 채널에 "design-standard.html 수정 예정" 공지
② 파일 상단 주석의 버전·날짜·변경 이유 업데이트
③ 추가 새 컴포넌트는 04번 섹션 하단에 추가, 기존 항목 삭제 금지
④ 변경 색상·폰트·간격 수정 시 팀 전체 기존 파일 영향도 검토 후 진행
⑤ 수정된 파일은 팀 공유 드라이브
/표준파일/ 폴더에 덮어쓰기 배포Meta · 생성 프롬프트
이 레퍼런스 HTML 생성 프롬프트
이 파일을 처음부터 다시 만들거나, 업데이트 버전을 생성할 때 아래 프롬프트를 사용합니다.
아래 조건을 모두 충족하는 팀 공용 HTML 보고서 디자인 표준 레퍼런스 파일을 단일 HTML 파일로 만들어줘. ━━━━━━━━━━━━━━━━━━━━━━ [파일 목적] ━━━━━━━━━━━━━━━━━━━━━━ 서로 다른 컴퓨터에서 여러 팀원이 HTML 보고서를 작성할 때 동일한 디자인 품질이 나오도록 하는 단일 레퍼런스 파일. 이 파일 하나만 열면 "어떻게 써야 하는지"를 보고 바로 따라 쓸 수 있어야 함. ━━━━━━━━━━━━━━━━━━━━━━ [포함할 내용 — 6개 섹션] ━━━━━━━━━━━━━━━━━━━━━━ ① 타이포그래피 시스템 - 사용 폰트 선언 (Google Fonts CDN, 한글+영문 각 1종) - H1 ~ H4, 본문(p), 캡션, 표 내부 폰트의 크기·굵기·행간·색상을 실제 렌더링으로 보여줌 - 각 항목 옆에 CSS 값을 코드 블록으로 함께 표시 ② 색상 토큰 - :root CSS 변수로 선언된 팔레트 전체 표시 - 브랜드 컬러 / 시맨틱 컬러(강조·경고·정보) / 차트 전용 6색 팔레트 / 배경·텍스트·선 색 - 각 색상 스와치(사각형) + 변수명 + hex 값 나란히 표시 ③ 레이아웃·그리드 - A4 가로/세로 기준 여백 수치 명시 - 본문 최대 너비, 2단 분할 비율(예: 6:4, 7:3) 예시를 실제 박스로 보여줌 - 섹션 간격·요소 간격 단위 체계 (8px 배수 기준 등) - @media print 규칙 포함 (인쇄 시 배경색 제거, 페이지 브레이크 기준) ④ 컴포넌트 라이브러리 아래 컴포넌트를 실제 렌더링 + 해당 HTML 코드 나란히 표시: - 섹션 헤더 (번호 뱃지 + 제목 + 하단 구분선) - 표(Table): 헤더행·데이터행·강조행·합계행 스타일 - 이미지+캡션 삽입 블록 (figure > img + figcaption) - 콜아웃 박스 3종: 참고(파랑) / 주의(노랑) / 결론(초록) - 코드·수식 블록 - 인라인 강조 태그 (수치 강조, 단위 표기) ⑤ CSS 변수 구조 & 사용 규칙 - :root 전체 변수 선언 코드를 복사 가능한 블록으로 제공 - "값만 바꾸면 전체 테마 교체" 원리 설명 텍스트 포함 ⑥ 파일 운용 & 작성 가이드 (메타 섹션) 아래 내용을 이 레퍼런스 HTML 안에 문서로 포함: - 이 레퍼런스 HTML을 만드는 이유와 원칙 (왜 단일 파일인가) - 새 보고서 작성 시작 절차 (이 파일에서 복사할 부분, 수정 금지 부분) - 외부 의존성 처리 규칙 (CDN 허용 목록, 오프라인 환경 대응) - 이미지 경로 규칙 (상대경로 ./assets/ 기준) - 파일 네이밍 컨벤션 (예: YYYYMMDD_보고서명_v1.html) - 레퍼런스 파일 자체를 업데이트할 때 지켜야 할 규칙 ━━━━━━━━━━━━━━━━━━━━━━ [기술 조건] ━━━━━━━━━━━━━━━━━━━━━━ - 단일 HTML 파일 (CSS·JS 모두 인라인) - 외부 의존성: Google Fonts CDN 만 허용 - 좌측 네비게이션 또는 상단 탭으로 6개 섹션 이동 가능 - 각 컴포넌트 옆에 "복사" 버튼 — 클릭 시 해당 HTML 코드를 클립보드에 복사 - 다크/라이트 모드 토글 버튼 포함 - CSS 변수 기반 테마 구조 (하드코딩 금지) - 완성 즉시 브라우저에서 열어 바로 쓸 수 있어야 함 ━━━━━━━━━━━━━━━━━━━━━━ [출력] ━━━━━━━━━━━━━━━━━━━━━━ 파일명: design-standard.html <!DOCTYPE html> 부터 </html> 까지 전체 코드 출력. 주석은 섹션 구분용 최소한만.
업데이트 버전 생성 시 추가 지시
위 프롬프트 기준으로 design-standard.html v{버전}을 만들어줘.
이번 버전에서 추가/변경할 내용:
[추가]
- {새 컴포넌트명}: {설명}
[변경]
- 색상 토큰: --brand를 {새 hex값}으로 변경
- {기타 변경사항}
기존 컴포넌트와 규칙은 모두 유지.