본문으로 건너뛰기
oh-my-design

KBS DESIGN.md

DESIGN.md

Design System Inspiration of KBS

Overview

Visual Theme & Atmosphere

KBS is South Korea's public broadcaster. Its own history traces radio broadcasting to 1927, television to 1961 and the establishment of 한국방송공사 as a public broadcasting corporation to 1973. Today its services include television, radio and KBS+ digital media. KBS introduction and history

The identity combines the KBS wordmark with a globe-like symbol. KBS explains the globe as its place in a developing world, the internal lines as information flowing across Korea, and the overall form as drawn from Taegeuk's yin and yang. On the measured homepage, white branding and navigation sit over large programme artwork; dark content bands carry news, video thumbnails and programme posters. Cyan highlights help distinguish content categories and live-broadcast information. The visual reading is grounded in the captured homepage, while the symbol's meaning comes from the official CI page.

KBS's 2025–2027 plan centres on trust, innovation, public interest, enjoyment and diversity. It describes a direction spanning terrestrial broadcasting, online and mobile content, with AI among its planned service technologies. KBS medium-term plan

The measured homepage is the Korean-language surface at www.kbs.co.kr/, with HTML lang="ko", no redirect and dark mode active. Its immediate tasks are opening live broadcasts, finding programmes and browsing news or recorded video.

Brand Narrative

The historical thread runs from radio through television to today's broadcast and digital services. KBS's introduction describes universal access to quality programmes across income levels and geography. Its CI gives that public-service identity a globe form and flowing information lines. A useful design reading is to retain clear routes into live services and programme discovery alongside expressive programme artwork. KBS introduction, KBS CI

Principles

KBS's stated strategic directions are trust, innovation, public interest, enjoyment and diversity. For this measured surface, carry those facts into a practical reference through clear content labels, distinct content groupings, prominent live-broadcast entry points and the observed type and colour hierarchy. These implementation suggestions are a reading of the page, not a published KBS UI-principles document. 2025–2027 plan

Personas

No user-persona research was verified.

Colors

The live page exposes 374 computed root custom properties. Every property name also occurs in the two KBS stylesheets linked by that page. The palette below preserves their names, with foreground explicitly mapped to the paragraph ink and --common-txt. Colours are normalized from the captured short or uppercase hex values.

Live valueHexObserved variable or role
foreground / light-gray1#dddddd--common-txt, --color-light-gray1; the census's one paragraph ink sample
blue1#140661--color-blue1, --color-blue-deep; white hero CTA's text
primary / blue2#0090d4--color-blue2, --color-blue; category/progress accent; primary is this reference's mapping to the measured blue
blue3#006fff--color-blue3, --color-blue-light
black#1e1f21--color-black, dark --common-background
black-deep#000000--color-black-deep, dark background-point token
black-sub#3a3a3a--color-black-sub, dark component surface and line tokens
white#ffffff--color-white; navigation, card title and hero CTA background
deep-gray1#535353--color-deep-gray1; theme-button border
deep-gray2#8f8f8f--color-deep-gray2; descriptions and card schedule text
deep-gray3#292929--color-deep-gray3, dark section-background token
light-gray2#ebebeb--color-light-gray2; dark secondary text / common-border token
light-gray3#f8f8f8--color-light-gray3; declared palette value
onair-red#ff001c--color-onair-red
red#ff0000--color-red
orange#ff9c00--color-orange
purple#9252e1--color-purple
green#45a840--color-green
green-kong#70bf54--color-green-kong
yellow#fbae17--color-yellow
pink#d32989--color-pink
comp-newsbar-bg#252628Dark --comp-newsbar-bg

The remaining named hues are palette evidence, without verified error, success or warning roles. The text census is dominated by white (211 samples), but paragraph ink is #dddddd (one sample); those are different observations.

The official corporate CI palette is a separate evidence domain: KBS Purple Blue is RGB 9/0/62 (#09003e, Pantone 275C), KBS Blue RGB 34/130/185 (#2282b9, Pantone 2925C), and KBS Orange RGB 255/156/0 (#ff9c00, Pantone 165C). These published RGB values are not substituted for the live UI blues. Official CI colours

Typography

Official product-use statement: no opened corporate or CI prose identifies a product-wide interface font.

Live-loaded: document.fonts reports Noto Sans, normal style, at 300, 400, 500 and 700. This is the only family in the structured typography tokens. The homepage stylesheet names it Noto Sans but maps its sources to Noto Sans CJK KR / NotoSansKR Hestia files. For each weight it offers local sources followed by EOT, WOFF and OTF URLs on res.static.kbs.co.kr. The census confirms loaded faces, rather than which local or network source supplied them. At weight 400 the CSS contains both DemiLight and Regular declarations, so the individual file remains unresolved. Homepage stylesheet

Official distributed assets: the deployed CSS exposes font-source URLs. No public font-distribution page or licence was verified, and no font files were downloaded.

Declared-only: the CSS also defines Noto Sans at 100 and 900, absent from the loaded-face census. Its fallback stack names Apple SD Gothic Neo, 애플 SD 산돌고딕 Neo, Helvetica Neue and Roboto; none appears in that loaded-face list. VideoJS is declared for player icons and is also absent from the loaded list. These declarations receive no specimens or additional family tokens.

Unresolved: the exact 400-weight font resource, actual local-versus-network source, and a company-wide font policy. Substitute: none chosen.

SettingVerified valueEvidence class
Hero headline48px, 700, line-height 56pxLoaded homepage CSS .tit rule; root --fz-hero-tit: 48px
Hero programme name30pxHomepage CSS .program rule
Root body scale16px / 400; common line-height 1.5Computed custom properties; not the body element's default size
Header drama link18px / 700, line-height 28px, tracking -1pxPage-top control identity; parked sticky-header reading is 18px / 500
Programme-card title18px / 400Visible span.tit; its anchor inherits 13px / 400
Hero action12px / 700, line-height 18pxMeasured CTA
Search-opening label11px / 400, line-height 16pxMeasured link
Theme button13.3333px / 400, normal line-heightMeasured button

Additional root scale values are page title 30px, page subtitle 24px, item title 18px, item subtitle 16px, description 14px, and badge 12px. These describe captured declarations, not measurements of every corresponding component. Hero stylesheet

Layout

Use a wide promotional stage followed by content bands. The captured desktop page has a 1200px content column, matching --wrap-width; survey controls span x=113 to x=1313. The hero is configured at 613px high. News and video rows mix large features with smaller thumbnails, while the programme strip shows six poster links.

The survey measures paired feature links at 592px each, four smaller video links at 288px each, and the selected programme poster at 186.7px wide. Root spacing declarations are --margin-sec: 72px, --margin-tit: 24px and --padding-comp: 48px. Preserve their named scope instead of applying all three to every card.

Responsive Behavior

Only the 1440 × 1000 desktop viewport was measured; mobile layouts, breakpoints and the light-mode surface were not measured.

Elevation & Depth

All six sampled controls have box-shadow: none at rest. The interface separates content through artwork, dark surface bands and typography. Header tokens configure rgba(0 0 0 / 72%), blur(20px) and 0 0 50px rgba(0 0 0 / 25%); the parked drama-link snapshot records that translucent header background. The hero text-shadow token is 1px 1px 3px #3a3a3a.

Motion & Easing

The hero-next link's raw computed transition is all 0.2s ease-out 0s. Its measured hover and pointer-held state use opacity 1 and expanded 57.6 × 57.6px bounds.

The root image-transition token is --transition-img: transform .3s ease-in-out, derived from --common-transition: .3s ease-in-out. These are captured custom-property values. The programme card link itself computes to all 0s ease 0s; its image is the hover target. No additional easing curve, carousel interval or reduced-motion behaviour was verified.


Measurement evidence: homepage survey and two states captures on 2026-11-03 Korea time; raw data, exact selectors, control identities, transition strings, source quotes and limitations are recorded in report.md and verification.md. Corporate narrative and CI pages support only the facts attributed to them; live tokens come from the measured homepage and its linked CSS.

Components

Programme poster link — program-card. The measured link is “옥탑방의 문제아들 2TV 화 20:30 방송”, with a 186.7 × 339.4px box, square corners, no padding, border or shadow, and a transparent background over the #3a3a3a programme strip. Its visible title is white #ffffff, 18px / 400; schedule text is #8f8f8f. The image scales to 1.03 on hover. Keyboard focus scales the whole link to 0.99. A held pointer combines that focused-link contraction with the image hover. These distinct targets matter when reproducing the interaction.

Hero carousel next — hero-next. “다음 버튼” is an icon link with role="button", 48 × 48px, square corners and no padding, border or shadow. It is transparent over changing hero artwork. Its external SVG sprite is visible; the inherited white 13px / 400 text belongs to a hidden label. Hover and measured pointer press change opacity from 0.4 to 1 and visual bounds from 48 × 48px to 57.6 × 57.6px. Focus has only the browser's auto ring.

The other measured controls remain prose references. The hero CTA is a 120 × 34px white #ffffff link with #140661 text, square corners, 8px 12px padding and 12px / 700 type. The secondary “라이트 모드” button is 130 × 56px, #1e1f21 with #dddddd text, a 2px #535353 border, 14px padding and a 50px pill radius. The drama and search links are transparent, square, unpadded and white. No visible search input appeared in the survey.

The root --common-radius is 16px. It does not override the measured square corners of these links. Only the programme card and carousel arrow have authored interaction changes sufficient for structured components.

States

The second capture used hideOverlays: true; the search trigger still remained covered by its sticky header. Both captures closed the chatbot prompt through .chatbot-btn__close, labelled “닫기”. No consent rejection was recorded and no consent banner was visible in the inspected viewport screenshots.

ControlHoverPointer heldKeyboard focus
Programme cardImage matrix(1.03, 0, 0, 1.03, 0, 0); link stays 186.7 × 339.4pxWith :active and :focus both true: link matrix(0.99, 0, 0, 0.99, 0, 0), 184.8 × 336px; image retains 1.03 hoverSame link matrix and 184.8 × 336px bounds, plus browser auto outline; after blur returns to none, 186.7 × 339.4px
Hero nextOpacity 0.4 → 1; 48 × 48px → 57.6 × 57.6pxMeasured; identical to hoverBrowser auto outline only
Theme buttonNo change within the compared scopeUNMEASURED: :active did not matchBrowser auto outline only
Drama navigationNo change within the compared scopeUNMEASURED: :active did not matchBrowser auto outline only
Search triggerUNMEASURED: covered by sticky headerUNMEASURED: covered by sticky headerBrowser auto outline only
Hero CTAUNMEASURED: carousel made the selected link pointer-events:noneUNMEASURED: same disabled conditionUNMEASURED: selected link not reached before the Tab walk cycled

The no-change scope covers the element and its pseudo-elements, descendants and their pseudo-elements, plus recorded ancestors: one descendant and one ancestor for the theme button, zero descendants and three ancestors for drama navigation. It compares colours, backgrounds, borders, drawn outlines, shadows, opacity, transforms, filters, visibility, size, decoration, image and mask properties, media sources and supported SVG internals. The drama-link parked snapshot reads weight 500 after scrolling, versus 700 at page top; the no-change verdict does not establish an invariant font across header modes. Browser auto outlines are observations rather than brand ring tokens. No disabled visual treatment was measured.

Do's and Don'ts

  • Keep the captured dark canvas, light text hierarchy and content imagery together.
  • Use the live UI blues for the interface and the documented CI values when discussing corporate identity.
  • Distinguish the programme card's image hover from its whole-link focus transform.
  • Preserve square geometry where it was measured; use the theme control's pill treatment only in that context.
  • Keep advertising, translation widgets and chatbot surfaces out of the product component set.
  • Add no search-input, disabled-state, font-substitution or brand focus-ring value without evidence.

Voice & Tone

Navigation uses direct Korean destination and action labels: “온에어 바로가기”, “프로그램 바로가기”, “검색” and “메뉴 열기”. Use similarly short labels that tell the visitor where a control leads. No broader editorial voice was assessed from programme copy.

Agent Prompt Guide

“Build a Korean programme-browsing surface with the measured dark KBS palette: #1e1f21 canvas, #3a3a3a programme band, #dddddd paragraph ink, white titles and #0090d4 accents. Use the live-loaded Noto Sans family. A programme poster link is 186.7 × 339.4px, square and unpadded, with an 18px / 400 visible title. Hover enlarges its image to 1.03; keyboard focus contracts the whole link to 0.99. Keep those transforms on their measured targets.”

색상

브랜드

면과 글자

그 밖의 색

단계별 색

blue1–3

deep-gray1–3

light-gray1–3

타이포그래피

타입 스케일

  1. heroHomepage hero .tit rule: 48px/56px, bold; root --fz-hero-tit is 48px. Live-loaded family.48px, 굵기 700
    The quick brown fox jumps over the lazy dog
  2. navigationDrama header link at page top; the parked sticky-header snapshot reads weight 500.18px, 굵기 700
    The quick brown fox jumps over the lazy dog
  3. card-titleVisible title span of the measured programme card; the anchor itself inherits 13px/400.18px, 굵기 400
    The quick brown fox jumps over the lazy dog
  4. bodyRoot scale --fz-body and --fw-normal; this is a declared scale, not a measurement of the body element's default size.16px, 굵기 400
    The quick brown fox jumps over the lazy dog
  5. hero-actionMeasured white hero CTA link, line-height 18px.12px, 굵기 700
    The quick brown fox jumps over the lazy dog

여백과 모양

여백

  • margin-tit24px
  • padding-comp48px
  • margin-sec72px

모서리 반경

  • square0px
  • common16px