Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .Jules/palette.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,3 @@
## 2026-06-25 - Fix Header Overlap
**Learning:** When using a sticky header, clicking anchor links can cause the target element to scroll under the header, hindering the user experience.
**Action:** Use `scroll-padding-top` on the `html` element with the height of the sticky header to ensure anchor links scroll to a position just below the header.

## 2024-06-25 - Improve Color Contrast
**Learning:** Found that using `--gold` for text on white or light backgrounds (like `--paper`) fails WCAG AA contrast standards, making the text difficult to read for some users.
**Action:** Avoid using `--gold` on light backgrounds. Instead, use alternatives with better contrast like `--teal`. Retain `--gold` for dark backgrounds (like `--ink`) where it provides excellent contrast.
3 changes: 0 additions & 3 deletions .jules/bolt.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,3 @@
## 2024-06-27 - 초기 μ–Έμ–΄ λ‘œλ“œ μ‹œ λΆˆν•„μš”ν•œ DOM 탐색 제거
**Learning:** 초기 λ‘œλ“œ μ‹œ μš”μ²­λœ μ–Έμ–΄κ°€ HTML의 κΈ°λ³Έ μ–Έμ–΄(ko)와 λ™μΌν•œ 경우, λͺ¨λ“  DOM ν…μŠ€νŠΈ λ…Έλ“œλ₯Ό νƒμƒ‰ν•˜κ³  μΉ˜ν™˜ν•˜λŠ” λΆˆν•„μš”ν•œ μž‘μ—…μ„ μƒλž΅ν•˜λ©΄ μ„±λŠ₯이 ν–₯상됨을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.
**Action:** `isInitialDefault` 쑰건을 μΆ”κ°€ν•˜μ—¬ 초기 λ‘œλ“œ μ‹œ λΆˆν•„μš”ν•œ DOM 순회 μ½”λ“œκ°€ μ‹€ν–‰λ˜μ§€ μ•Šλ„λ‘ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.
## 2026-07-05 - content-visibility와 scrollbar jumping λ°©μ§€
**Learning:** κΈ΄ 단일 νŽ˜μ΄μ§€(static site)μ—μ„œ `content-visibility: auto`λ₯Ό μ‚¬μš©ν•˜μ—¬ μ˜€ν”„μŠ€ν¬λ¦° μ„Ήμ…˜μ˜ λ Œλ”λ§μ„ μ΅œμ ν™”ν•  λ•Œ, `contain-intrinsic-size`λ₯Ό ν•¨κ»˜ μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μŠ€ν¬λ‘€λ°”κ°€ νŠ€κ±°λ‚˜ λ ˆμ΄μ•„μ›ƒ μ‹œν”„νŠΈκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
**Action:** 항상 길이 기반 폴백(예: `contain-intrinsic-size: 600px;`)을 μ„ ν–‰ν•˜κ³ , λΈŒλΌμš°μ €κ°€ μ‹€μ œ 높이λ₯Ό κΈ°μ–΅ν•  수 μžˆλ„λ‘ `auto` ν‚€μ›Œλ“œλ₯Ό ν¬ν•¨ν•œ 속성을 μ„€μ •ν•©λ‹ˆλ‹€. μ„Ήμ…˜λ³„ μ‹€μ œ 높이에 맞좰 크기λ₯Ό μ‘°μ •ν•©λ‹ˆλ‹€.
4 changes: 4 additions & 0 deletions .jules/sentinel.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,7 @@
**Vulnerability:** μ™ΈλΆ€ 링크(특히 μ°Έμ‘°λ¬Έν—Œ 링크 λ“±)에 `target="_blank"` 속성을 μ‚¬μš©ν•˜κ±°λ‚˜ μƒˆ νƒ­μœΌλ‘œ μ—¬λŠ” λ™μž‘μ„ μœ λ„ν•  λ•Œ, `rel="noopener noreferrer"` 속성이 λˆ„λ½λ˜μ–΄ Reverse Tabnabbing 곡격에 λ…ΈμΆœλ  수 있음.
**Learning:** `rel="noopener noreferrer"`κ°€ μ—†μœΌλ©΄ μƒˆλ‘œ μ—΄λ¦° νƒ­μ˜ νŽ˜μ΄μ§€κ°€ `window.opener` 객체λ₯Ό 톡해 μ›λž˜ νŽ˜μ΄μ§€μ˜ `location`을 μ•…μ˜μ μΈ μ‚¬μ΄νŠΈλ‘œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
**Prevention:** μ™ΈλΆ€ 링크λ₯Ό μƒˆ νƒ­μœΌλ‘œ μ—΄κΈ° μœ„ν•΄ `target="_blank"`λ₯Ό μ‚¬μš©ν•  λ•Œλ§Œ `rel="noopener noreferrer"`λ₯Ό ν•¨κ»˜ μΆ”κ°€ν•˜μ—¬ λΆ€λͺ¨ 창에 λŒ€ν•œ 접근을 차단해야 ν•©λ‹ˆλ‹€.
## 2026-07-03 - Native Trusted Types enforcement
**Vulnerability:** Trusted Types μ •μ±… λΆ€μž¬λ‘œ μΈν•œ DOM 기반 XSS (Cross-Site Scripting) 취약점 μœ„ν—˜.
**Learning:** 이 정적 μ›Ήμ‚¬μ΄νŠΈλŠ” `innerHTML` 같은 μœ„ν—˜ν•œ Sinkλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  `textContent`, `setAttribute` λ“± μ•ˆμ „ν•œ DOM APIλ§Œμ„ μ‚¬μš©ν•˜κ³  μžˆμœΌλ―€λ‘œ, λ³„λ„μ˜ Trusted Types μ •μ±…μ΄λ‚˜ μ™ΈλΆ€ Sanitizer(예: DOMPurify) 없이도 CSPμ—μ„œ `require-trusted-types-for 'script'`λ₯Ό μ•ˆμ „ν•˜κ²Œ κΈ°λ³Έ κ°•μ œν•  수 μžˆμŒμ„ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.
**Prevention:** CSP에 `require-trusted-types-for 'script'`λ₯Ό μ μš©ν•˜μ—¬ XSSλ₯Ό λ°©μ–΄ν•˜κ³ , μ•žμœΌλ‘œλ„ μ•ˆμ „ν•œ DOM API만 μ‚¬μš©ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. λΆ€λ“μ΄ν•˜κ²Œ `innerHTML`을 λ„μž…ν•΄μ•Ό ν•  κ²½μš°μ—λŠ” λ°˜λ“œμ‹œ μ μ ˆν•œ Sanitizerλ₯Ό ν•¨κ»˜ ꡬ성해야 ν•©λ‹ˆλ‹€.
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self'; object-src 'none'; base-uri 'self'; form-action 'none'; upgrade-insecure-requests;">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self'; object-src 'none'; base-uri 'self'; form-action 'none'; upgrade-insecure-requests; require-trusted-types-for 'script';">
<meta name="referrer" content="strict-origin-when-cross-origin">
<title>λ§₯λ½μ§€ν˜œ 연ꡬ싀 | Contextual Wisdom Lab</title>
<meta
Expand Down
11 changes: 1 addition & 10 deletions styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -297,15 +297,6 @@ h1 {
.section {
padding: clamp(72px, 10vw, 132px) clamp(20px, 5vw, 72px);
border-top: 1px solid var(--line);
/* ⚑ Bolt: Defer rendering of off-screen sections to improve initial page load performance */
content-visibility: auto;
contain-intrinsic-size: 600px;
contain-intrinsic-size: auto 600px;
}

.section.dikw, .section.projects {
contain-intrinsic-size: 1000px;
contain-intrinsic-size: auto 1000px;
}

.section-heading {
Expand Down Expand Up @@ -451,7 +442,7 @@ h1 {
.dikw-grid span {
display: block;
margin-bottom: 38px;
color: var(--teal);
color: var(--gold);
font-size: 14px;
font-weight: 900;
}
Expand Down
Loading