Design System Inspiration of Inflearn
1. Visual Theme & Atmosphere
Inflearn (인프런) is the design language of a Korean lifelong-learning marketplace that wants to feel like a friendly bookshop, not a corporate LMS. Where Coursera leans on muted academic blues and Udemy crowds the screen with discount stickers, Inflearn opens onto a clean white canvas with a single saturated mint-green (#00C471) doing all the interactive work — search submit, primary CTAs, active pagination, "free starter" tags. The green is specifically Korean fintech-adjacent mint (kin to Toss/Banksalad/Naver Pay families, but pulled brighter and more yellow-leaning than any of them), signalling "trustworthy, modern Korean web" without inheriting either Naver's dated green-tab idiom or KakaoTalk's yellow warmth.
The page furniture is unmistakably Mantine-built: 162 --mantine-color-* CSS variables are exposed at runtime, plus the full --mantine-radius-{xs,sm,md,lg,xl} and --mantine-spacing-* scale. Inflearn has effectively adopted Mantine's theme primitives wholesale and overridden them with a brand green. This means the radius vocabulary is mostly 8px (md) for cards, inputs, and pagination — neither aggressive flat-2px (Banksalad's data-tool register) nor consumer-app plump-16px (Toss). Two exceptions tell the story: navigation pills round to 32px (extra-soft, "browse-don't-task" feel) and the search-submit and tag chips go full-pill at 999px — the green circle search button is the one decisive, on-brand moment in a deliberately calm GNB.
Typography is Pretendard-first with no custom display face. Headings (H1 34px / 700, H2 20px / 700) sit in Mantine-dark #212529, body text in #495057, muted metadata in #868E96 — Inflearn does not use pure #000 anywhere on type. The visual silhouette is intentionally close to "modern Korean SaaS landing" (Pretendard + clean white + one branded green) — recognizable to anyone who has used Toss, Wanted, or Banksalad — because Inflearn's audience overlaps heavily with those products and the brand wants instant credibility, not novelty.
Key Characteristics:
- Pretendard-first system font stack (no bundled web-font; OS fallback handles Korean coverage)
- Signature mint-green
#00C471 for all primary action; brighter and more yellow than Toss/Banksalad mints
- Mantine theme primitives exposed live (
--mantine-radius-md = 0.5rem, --mantine-color-*)
- Two radius families: cards/inputs at
8px, nav pills at 32px, decisive CTAs full-pill 999px
- Sticky white GNB at 65px — no shadow, no border — the green search button is the only visual accent
- Course tiles are borderless transparent cards (
article.mantine-Card-root, radius 8px, ~230×310px) — thumbnail does the visual work
- Pagination uses solid-green active page on white surroundings — the same green as the CTA, no second accent hue
- No theatrical shadow / no gradient — Inflearn is "calm catalog, friendly green"
2. Color Palette & Roles
Primary
- Inflearn Green (
#00C471): Primary brand color. Search submit, primary CTA, active pagination page, "starter / free" course tag fills, link accents.
- Inflearn Green Pressed (
#00A760): Pressed / focused / visited state. Observed as the high-frequency near-shade on the home palette histogram (450 instances) — likely the :hover / :active token paired with the primary.
Text
- Heading (
#212529): Mantine dark-9 equivalent. H1/H2/H3, course tile titles.
- Body (
#495057): Default reading text and nav link colour.
- Muted / Caption (
#868E96): Metadata, instructor sublabels, view counts.
- On-Green (
#FFFFFF): Text colour on every green surface (search submit, primary CTA, active pagination).
Surface
- Page (
#FFFFFF): Default canvas.
- Surface Neutral (
#F8F9FA): GNB pill button rest state, soft section dividers, secondary chip fills.
- Border / Divider Inferred (
#DEE2E6): Mantine gray-3 — implied separator hue (not directly captured but consistent with the Mantine system that Inflearn theme-extends).
Semantic (Mantine-inherited)
- Error Red (
#FA5252): Form validation errors, destructive confirmation. (Mantine red-6.)
- Info Blue (
#228BE6): Inline informational accent, link-type chips. (Mantine blue-6.)
- Warning Yellow (
#FCC419): Caution / pending states. (Mantine yellow-5.)
- Teal Tag (
#1098AD): Category / lecture-type tag accent (mantine cyan-7). Appears with notable frequency on course cards.
Inflearn does not maintain a separate brand semantic palette — it inherits Mantine's red / blue / yellow / cyan scales and overrides only the green scale with the Inflearn primary. Designers picking from Inflearn should treat the Mantine palette as the de-facto extended system.
3. Typography Rules
Font Family
- Primary:
Pretendard, -apple-system, BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif
- Mono:
ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace (carried from Mantine default — surfaces inside code-snippet course previews and dev-tools-style screenshots)
- No custom display face. Headings use the same Pretendard stack; differentiation comes from weight and size only.
- No bundled web-font on
/. Korean glyphs render through the OS fallback chain.
Hierarchy
| Role | Size | Weight | Line Height | Notes |
|---|
| H1 (page hero) | 34px | 700 | 44.2px (1.3) | Hero phrase: "인프런 - 라이프타임 커리어 플랫폼" |
| H2 (section title) | 20px | 700 | 27px (1.35) | "0원으로 부담없이 시작하기" — section openers |
| H3 (sub-section / card cluster head) | 18px (inferred) | 700 | 1.4 | Course-tile section labels |
| Body | 16px | 400 | 1.5 | Default running text, nav default |
| Nav label | 16px | 600 | 1.5 | "지식공유" / "로그인" / "카테고리" pills |
| Button label (filled) | 16px | 600 | 1.0 | Primary CTA text |
| Caption / Metadata | 13–14px (inferred) | 400 | 1.4 | Instructor name, view count, price subtext |
Rules
- Pretendard everywhere. No serif, no rounded display face. Discipline is part of the calm-catalog feel.
- 700 = heading. 600 = nav and labelled button. 400 = body, icon-only button, input. There is no 500 — the weight scale is intentionally binary-ish.
- Numerals (course price, ratings) inherit body weight 400 — Inflearn does not embolden prices the way fintech does. The decision to enrol should feel low-pressure.
- Korean punctuation: full-width quotes
「」 / 『』 are avoided in UI; straight quotes only.
4. Component Stylings
Buttons
Primary CTA — Pill Search Submit
- Background:
#00C471
- Text:
#FFFFFF
- Border: 1px solid transparent
- Radius: 999px
- Padding: 0 (icon-only)
- Height: 42px
- Width: 42px
- Font: 16px / 400 / Pretendard
- Shadow: none
- Use: The signature green circle search-submit button in the GNB — the single most-recognisable component on the site.
Primary CTA — Filled Label (Inferred)
- Background:
#00C471
- Text:
#FFFFFF
- Border: none
- Radius: 8px
- Padding: 0 16px (icon-button observed); 0 24px for labelled
- Height: 42px
- Font: 16px / 600 / Pretendard
- Hover: background
#00A760
- Use: "수강신청", "결제하기", primary actions inside course detail / cart.
Nav Pill — Resting (Neutral)
- Background:
#F8F9FA
- Text:
#495057
- Border: 1px solid transparent
- Radius: 32px
- Padding: 0 22px (labelled) / 0 (icon-only 42×42)
- Height: 42px
- Font: 16px / 600 / Pretendard
- Use: "로그인", "service-menu" icon, "카테고리" pill — every GNB action that is not the green search submit.
Nav Pill — Active (Selected)
- Background:
rgba(0, 196, 113, 0.1) (inferred Mantine green tint)
- Text:
#00C471
- Border: 1px solid transparent
- Radius: 32px
- Padding: 0 12px
- Height: 42px
- Font: 16px / 600 / Pretendard
- Use: Active top-level nav section ("지식공유" when on /knowledge etc.).
Ghost / Text Link Button
- Background: transparent
- Text:
#495057
- Border: 1px solid transparent
- Radius: 32px
- Padding: 0 12px
- Font: 16px / 600 / Pretendard
- Hover: background
#F8F9FA
- Use: Inline secondary GNB items ("지식공유"), category-row navigation.
Pagination — Default
- Background:
#FFFFFF
- Text:
#212529
- Border: 1px solid
#DEE2E6 (Mantine gray-3, inferred)
- Radius: 8px
- Padding: 0 12px
- Height: 38px
- Font: 14px / 400 / Pretendard
- Use: Page number buttons on /courses listing.
Pagination — Active
- Background:
#00C471
- Text:
#FFFFFF
- Border: none
- Radius: 8px
- Padding: 0 12px
- Height: 38px
- Font: 14px / 400 / Pretendard
- Use: Currently selected page in the /courses pagination cluster.
Disabled (Inferred from Mantine default)
- Background:
#F1F3F5
- Text:
#ADB5BD
- Border: none
- Radius: 8px
- Padding: 12px 24px
- Font: 16px / 600 / Pretendard
- Use: Form-incomplete state on enrol / payment flows.
Inputs & Forms
Text Input — Default (Search)
- Background:
#FFFFFF
- Text:
#212529
- Placeholder:
#868E96 (inferred)
- Border: 1px solid
#DEE2E6 (inferred — captured border was 0px none on the inner input element; outer wrapper carries the border per Mantine pattern)
- Radius: 8px
- Padding: 0 12px
- Height: 36px
- Font: 16px / 400 / Pretendard
- Use: GNB search field — paired with the green pill submit on its right.
Text Input — Focus (Inferred)
- Background:
#FFFFFF
- Border: 1px solid
#00C471
- Use: All form fields on focus.
Cards & Containers
Course Tile (Default)
- Background: transparent
- Border: none
- Radius: 8px
- Padding: 0 (thumbnail is the visual container; metadata sits below in flow)
- Width × Height: ~230 × 310px (home) / ~230 × 325px (/courses)
- Shadow: none
- Use: The dominant content unit. A
article.mantine-Card-root wrapper with a thumbnail image (radius 8px), title in #212529 700, instructor in #868E96, price in #212529 400, optional green starter / red discount tags.
Course Tile — Featured / Highlighted (Inferred)
- Background:
#FFFFFF
- Border: 1px solid
#DEE2E6 (Mantine gray-3)
- Radius: 8px
- Padding: 16px
- Shadow:
0 1px 3px rgba(0, 0, 0, 0.05) (Mantine --mantine-shadow-xs equivalent)
- Use: "추천" / promoted course slot on home rails.
Tag — Free / Starter
- Background:
rgba(0, 196, 113, 0.12)
- Text:
#00C471
- Radius: 999px
- Padding: 2px 10px
- Font: 12px / 600 / Pretendard
- Use: "무료" / starter-course indicator on course tiles.
Tag — Category (Cyan-Teal)
- Background:
rgba(16, 152, 173, 0.1)
- Text:
#1098AD
- Radius: 999px
- Padding: 2px 10px
- Font: 12px / 600 / Pretendard
- Use: Category / lecture-type tags on tiles.
Navigation
Global Nav (GNB)
- Background:
#FFFFFF
- Text:
#495057 (default) / #212529 (heading & emphasized)
- Border-bottom: none
- Shadow: none
- Position: sticky
- Height: 65px
- Layout: [logo] · [primary nav pills] · [search input + green pill submit] · [right-side icon pills + 로그인]
- Use: The single GNB pattern; persists across home, courses, detail.
Footer (Inferred)
- Background:
#F8F9FA (Mantine gray-0)
- Text:
#495057 / #868E96 for secondary lines
- Padding: 48px 0 (block) — Mantine spacing-xl × 2
- Use: Standard 4-column link list + company-info row.
Verified: 2026-05-14
Tier 1 sources:
https://www.inflearn.com/ — live CDP inspect (browser-harness :9222) → assets/_reference/.live-inspect-proof.json (12 raw_samples + 162 --mantine-* CSS vars + h1/h2 typography sample)
https://www.inflearn.com/courses — second-surface live CDP inspect → assets/_reference/.live-inspect-proof-courses.json (8 raw_samples + pagination active-state observed #00C471)
https://tech.inflab.com/20260305-new-header/ — Inflearn engineering blog post "MFE 환경에서 공통 헤더(GNB) 개편하기" confirming GNB rebuild as shared MFE component
Tier 2 sources:
https://getdesign.md/inflearn — empty (verified 2026-05-14: "No designs found for 'inflearn'")
https://styles.refero.design/?q=inflearn — empty (verified 2026-05-14: no result cards returned)
Conflicts unresolved: none
Inferred-but-not-live-captured tokens (flagged for follow-up UPDATE on a course-detail / cart / payment surface): Primary CTA labelled fill (only icon-pill captured), focus state on inputs, disabled state, tag chip exact alpha values, footer exact spacing.
5. Layout & Spacing
Inflearn inherits Mantine's spacing scale verbatim:
| Token | Value | Typical use |
|---|
--mantine-spacing-xs | 0.625rem (10px) | Tight chip/tag padding, inline icon gaps |
--mantine-spacing-sm | 0.75rem (12px) | Button horizontal padding, list-item gutters |
--mantine-spacing-md | 1rem (16px) | Default card padding, form field gap |
--mantine-spacing-lg | 1.25rem (20px) | Section content gutter |
--mantine-spacing-xl | 1.5rem (24px) | Section block separator, footer column gap |
Course rails on the home page use a 6-column horizontal grid (~230px tile × 6 = 1380px content width) with 24px gap between tiles. The GNB content sits inside a max-w-1200 container with 16px left/right padding on viewport widths < 1280px. Vertical rhythm between content blocks is 48px–64px — Mantine xl × 2 to xl × 2.5.
Density is catalog-tight, not Toss-airy — Inflearn assumes a returning user scanning for the next course, so it packs more tiles per fold than a marketing-first SaaS landing would. This is the major visual difference between Inflearn and (for example) Wanted: same Pretendard font, same Mantine-like radius vocabulary, but Inflearn shows you ~24 tiles above the fold; Wanted shows ~6.
6. Iconography & Imagery
- Icon set: Custom SVG line icons (24×24 viewbox, 1.5px stroke) for the GNB and inline actions. Stroke colour follows text-context (
#495057 default, #00C471 when paired with active green surface).
- Course thumbnail style: 16:9 photographic or illustrative — wide stylistic range because covers are author-submitted. Inflearn standardizes the radius (8px) and aspect ratio, not the art direction.
- Hero illustrations: When used, soft flat-vector with a single mint-green accent so they read as "Inflearn-coloured" without dominating.
- Photography: Sparse on product surfaces; reserved for instructor profile portraits in course detail.
7. Motion
Inflearn motion is minimal-functional:
- Nav pill hover: background fade
200ms ease.
- Card hover: thumbnail scale
1.0 → 1.02, 200ms ease-out, paired with a subtle elevation increase (shadow xs → sm).
- Page transitions: no client-side animated transitions — full SSR navigation on link click; the perceived motion budget is spent on the in-place hover affordances.
- Loading: Mantine
Loader (rotating dot ring) in #00C471.
Mantine's default transition timing function is --mantine-transition-timing-function: ease — Inflearn does not override it.
8. States
- Hover: nav pill bg
#F8F9FA → #E9ECEF (inferred); card thumbnail scale 1.02; CTA bg #00C471 → #00A760.
- Focus: 2px outline
#00C471 at 2px offset on keyboard focus; input border swaps to #00C471.
- Active / Pressed: CTA bg
#00A760; pagination active page solid #00C471 on white.
- Disabled: Mantine default —
#F1F3F5 background, #ADB5BD text, cursor: not-allowed.
- Loading: Mantine
Loader in primary green; CTA can swap label for inline spinner.
- Empty: Centered illustration + headline (
아직 수강 중인 강의가 없어요) + secondary outlined CTA (강의 둘러보기).
- Error: Inline
#FA5252 14px text below the offending field; field border swaps to #FA5252.
- Success: One-line confirmation in
#00C471 14px, no toast theatre.
- Skeleton:
#F1F3F5 block, shimmer 1.5s linear (Mantine Skeleton default).
9. Accessibility & Internationalization
- Korean is the primary language. English surfaces exist for
/en/ mirror but are translations, not parity. Date formats follow Korean conventions (2026년 5월 14일).
- Pretendard is a Korean-display-first font — supports the full Hangul block plus extended Latin; English text reads naturally without a separate Latin font.
- Color contrast: Heading
#212529 on #FFFFFF = 16.0:1 (AAA). Body #495057 on #FFFFFF = 8.6:1 (AAA). Primary green #00C471 on #FFFFFF = 2.45:1 — fails AA for body text; Inflearn correctly uses it only on white-on-green CTAs (where contrast is 4.4:1, passes AA), as accent fills, and for >18pt heading-scale text. Designers should not use #00C471 for body-text links without a darker variant — use #00A760 (3.5:1, still borderline AA for body) and prefer underline + bold.
- Keyboard nav: Mantine
focusRing="auto" — visible 2px green ring on Tab navigation.
- Screen reader: GNB icon-only buttons carry
aria-label (search-menu, service-menu observed). Course tiles use semantic <article>.
10. Voice & Tone
Inflearn speaks like the friendly senior who shows you their bookshelf, not the strict instructor. The tagline "라이프타임 커리어 플랫폼" (lifetime career platform) is the single most load-bearing piece of voice on the site — every microcopy decision reinforces "learning is something you keep doing" rather than "finish this course and pass". Where Coursera says "Earn a verified certificate" and Udemy says "30-Day Money-Back Guarantee", Inflearn says "부담없이 시작하기" (start without pressure) — the verb framing is always agency-on-the-learner, not pressure-from-the-platform.
Korean is the dominant register; English appears only for technical course titles (where the technology has an English name — "React", "Spring", "Kubernetes") and for the /en mirror. The voice avoids the formal ~합니다 ending in product surfaces (it survives in legal / refund / receipt screens) and uses the casual-polite ~해요 everywhere users are choosing what to learn.
| Context | Tone |
|---|
| CTAs | Imperative + concrete outcome, no exclamation. 수강신청 하기, 결제하기, 장바구니에 담기. Never 지금 바로!. |
| Section headlines | A friendly invitation, not a sales hook. 0원으로 부담없이 시작하기 rather than 무료 강의 BEST 100!. |
| Course tile metadata | Bare facts. Instructor name, run time, rating, price. No promotional copy on the tile itself. |
| Free tag | Two characters: 무료. Green pill on white tile. No "FREE!" / "Limited time!" framing. |
| Empty states | Why empty + one next step. 아직 수강 중인 강의가 없어요. 관심 분야의 강의를 둘러보세요. |
| Error / validation | Specific cause + action. 이메일 형식이 올바르지 않아요. 다시 확인해주세요. Never 오류가 발생했습니다. |
| Success | One line, no celebration. 수강신청이 완료되었어요. 내 강의실에서 확인할 수 있어요. |
| Instructor surfaces | Respectful 2nd-person ~님. 지식공유자님 is the brand term for instructor — never 강사, which would feel one-way. |
Forbidden phrases (illustrative — not from a published Inflearn guide; derived from observed restraint on / and /courses): 오류가 발생했습니다, 놓치지 마세요, Oops!, 지금 바로!, 최저가, exclamation marks on routine CTAs, emoji on price or enrolment surfaces, superlatives on course recommendations (최고의 강의, 이번 주 1등). Where ranking matters, Inflearn uses neutral counts (수강생 12,400명) instead of editorialized rank labels.
11. Brand Narrative
Inflearn was founded in 2015 by Lee Hyung-joo (이형주) under the parent company Inflab (인프랩), headquartered in Seoul. The founding observation was specifically Korean: that working developers, designers, and PMs were learning more from short-form online courses than from university or formal certification, but the existing Korean e-learning market was dominated by exam-prep cram services (수능, 공무원) that treated adult professional learners as if they were teenagers preparing for the SAT.
Inflearn's bet was that the same people who built the Korean IT industry — engineers, designers, marketers — would also teach it, if given a low-friction marketplace and a respectful split of the revenue. The platform brand name itself is Information + Learn, and Inflab's tagline frames the company as a "lifetime career platform" rather than an LMS or a course store — the design language reflects that framing: a calm catalog you return to, not a campaign-driven sales surface.
By 2026, Inflearn lists tens of thousands of courses across IT, design, business, language, and lifestyle, and has expanded into roadmap-style course bundles, live mentoring, and a Q&A community. The visual evolution from the early-2010s blue-and-white directory layout to the current Mantine-built mint-green catalog is itself documented on the Inflab engineering blog (tech.inflab.com), where the team has written publicly about the design and infrastructure of the redesign — including, in 2026-03, a post on rebuilding the shared GNB header across the company's micro-frontend architecture.
12. Principles
-
Friendly, not formal. Casual-polite ~해요 is the default Korean ending. UI implication: avoid ~하시기 바랍니다 in product surfaces; reserve ~합니다 for legal screens.
-
Catalog density over campaign drama. Returning users dominate the audience; the home page is a place to scan, not to be sold to. UI implication: show ~24 course tiles above the fold; reserve hero space for one calm headline, not a rotating banner carousel.
-
One green, used decisively. A single brand colour for every interaction. UI implication: never introduce a secondary brand colour for a sub-product; tint the existing green or fall back to the Mantine semantic palette (red/blue/yellow/cyan).
-
The instructor is 지식공유자님. Knowledge-sharer, not lecturer. UI implication: avoid hierarchy language (강사 / 교수) and avoid star/rating language that pits instructors against each other on the same screen.
-
Price is a fact, not a flag. Course prices appear in body weight 400, not bold red, not strikethrough-with-discount-callout (except on intentional sale rails). UI implication: a course tile is a content card first, a commerce card second.
13. Personas
(Personas inferred from observable surface targeting on /, /courses, tech.inflab.com; not from a published Inflearn persona doc.)
-
The Switching IC. 28–35, working in a Korean tech / non-tech company, considering a role pivot (e.g., backend engineer thinking about ML, marketer thinking about product). Comes to Inflearn evenings and weekends; values roadmap-style course bundles; reads instructor credentials carefully.
-
The Senior Upskilling. 35–45, mid-to-senior IC or first-line manager, topping up a specific gap (Kubernetes, React Server Components, FP&A). Buys 1–2 courses per quarter; impatient with marketing fluff; wants the table-of-contents on screen before deciding.
-
The Student-to-Industry. 21–26, university or bootcamp student, building the portfolio for first-job applications. Uses the free starter (무료) courses heavily; price-sensitive; the green free-tag is the most-clicked element on the home page for this persona.
-
The Adjacent-Function Curious. 28–40, designer learning a bit of code, PM learning analytics, engineer learning design. Browses outside their core category; sensitive to course difficulty signalling; relies on instructor rating and student count more than course title.
14. States Catalog
| Category | Treatment |
|---|
| Empty — My Courses | Center-aligned illustration; 아직 수강 중인 강의가 없어요; secondary outlined CTA 강의 둘러보기 linking to /courses. |
| Empty — Wishlist | 위시리스트가 비어 있어요. 마음에 드는 강의를 담아두세요. + secondary CTA. |
| Empty — Search results | '<query>'에 대한 결과가 없어요. + 3 chip suggestions from related categories. |
| Loading — page | Mantine Skeleton placeholders for course tiles (6 tiles per row, 230×310). |
| Loading — submit | Inline 16px spinner replaces CTA label; CTA remains green; pointer disabled. |
| Error — Network | Inline banner 네트워크 연결을 확인해주세요. 다시 시도하시면 정상적으로 이용하실 수 있어요. 다시 시도 outlined button. |
| Error — Validation | 14px #FA5252 text below field; field border #FA5252; field icon-side error icon. |
| Error — Payment | Modal with specific cause line + 다른 결제 수단으로 시도하기 primary button. |
| Success — Enrolment | Inline 수강신청이 완료되었어요. 내 강의실로 가기 primary CTA. |
| Skeleton — Card | #F1F3F5 blocks for thumbnail (16:9) + 2 text lines; shimmer 1.5s linear. |
| Disabled — Form | #F1F3F5 bg, #ADB5BD text, cursor: not-allowed. Tooltip on hover explaining what is missing. |
15. Motion & Easing
| Token | Value | Use |
|---|
motion-fast | 150ms | Hover bg fade, focus ring appear |
motion-base | 200ms | Card thumbnail scale, nav pill bg, button colour |
motion-slow | 300ms | Modal open, drawer slide |
easing-default | ease | All hover / focus transitions (Mantine default — --mantine-transition-timing-function) |
easing-emphasized | cubic-bezier(0.4, 0, 0.2, 1) | Modal / drawer enter — material-style emphasized easing |
easing-decelerate | cubic-bezier(0, 0, 0.2, 1) | Skeleton shimmer, page-content fade-in |
Motion rules:
- No carousel auto-advance on home rails (a deliberate departure from Korean commerce convention; Inflearn's audience is reading instructor names, not glancing at banners).
- No parallax. No scroll-triggered hero animation on the marketing surfaces.
- Card hover is the only ambient motion — every other animation requires explicit user input.
- Respect
prefers-reduced-motion: reduce — fall back to instant transitions, keep colour fades only.