HUD 디자인, 화면이 나를 겨누는 랜딩 부품 9개
HUD 디자인은 게임이나 SF 영화 속 조준경·레이더처럼, 화면 위에 좌표·상태 수치를 얹어 마치 나를 지켜보고 있는 듯한 인상을 주는 인터페이스 스타일입니다.
아래 원페이지를 먼저 스크롤해 보십시오. 상단 내비게이션부터 맨 아래 터미널 푸터까지, 네 귀퉁이 브래킷과 스캔라인이 화면 전체에서 같은 리듬으로 움직이는지가 이 스타일이 성립하는 기준입니다.
이 화면을 만든 부품 아홉 개는 아래 격자에서 각각 따로 열어 볼 수 있습니다. 배열 순서는 방문자가 실제로 페이지를 훑는 흐름(첫눈에 들어오기, 메뉴 살피기, 기능 훑기, 진행 로그 보기, 요금 고르기, 후기로 믿음 얻기, 행동 촉구, 가입, 하단 정리) 그대로입니다.
자동 재생 · 눌러서 해당 항목으로 · 전부 한 zip
01락온 히어로
헤드라인 카드를 감싼 네 귀퉁이 브래킷이 0.15초씩 어긋난 시차로 조여들듯 맥동하고, 뒤로는 스캔라인이 카드 안쪽을 위에서 아래로 한 번씩 훑고 지나갑니다. SaaS 랜딩 첫 화면이나 제품 출시 커버처럼, 처음 보는 순간 "이 화면이 나를 인식하고 있다"는 인상을 줘야 하는 자리에 씁니다.
<div class="relative w-full max-w-md overflow-hidden rounded-control bg-ink px-6 py-8 shadow-glow">
<span class="corner corner-tl" aria-hidden="true"></span>
<span class="corner corner-tr" aria-hidden="true"></span>
<span class="corner corner-bl" aria-hidden="true"></span>
<span class="corner corner-br" aria-hidden="true"></span>
<div class="scan-sweep absolute inset-0 pointer-events-none" aria-hidden="true"></div>
<p class="mb-3 flex items-center gap-2 text-[11px] font-bold uppercase tracking-widest text-accent">
<span class="blink-dot inline-block h-1.5 w-1.5 rounded-full bg-accent"></span>SENTRY / ONLINE
</p>
<h1 class="mb-2 text-2xl font-bold leading-tight">놓치는 순간 없이 지켜보는 대시보드</h1>
<p class="mb-4 text-sm text-cream/60">실시간으로 감지하고 기록합니다</p>
<button class="rounded-control border border-accent bg-accent/10 px-5 py-2 text-sm font-bold text-accent">무료로 시작</button>
</div>
02상태 표시줄 내비
내비게이션 전체가 HUD 상태 표시줄처럼 브래킷에 감싸이고, 활성 탭 아래 밑줄이 스캔하듯 탭 사이를 미끄러져 이동합니다. 랜딩 페이지 상단바나 대시보드 내비처럼 브랜드·메뉴·상태가 한 줄에 같이 들어가는 자리에 씁니다.
<nav class="relative flex items-center gap-4 rounded-control bg-ink/95 px-3 py-2 shadow-glow" aria-label="SENTRY">
<span class="shrink-0 whitespace-nowrap pl-2 font-extrabold text-sm">SENTRY</span>
<div class="relative flex min-w-0 flex-1 items-stretch">
<span class="relative z-10 flex-1 whitespace-nowrap py-2 text-center text-xs font-semibold text-cream/70">홈</span>
<span class="relative z-10 flex-1 whitespace-nowrap py-2 text-center text-xs font-semibold text-cream/70">기능</span>
<span class="relative z-10 flex-1 whitespace-nowrap py-2 text-center text-xs font-semibold text-cream/70">요금</span>
<span class="relative z-10 flex-1 whitespace-nowrap py-2 text-center text-xs font-semibold text-cream/70">문의</span>
<span class="nav-indicator absolute bottom-0 left-0 h-[2px] w-1/4 bg-accent"></span>
</div>
<span class="shrink-0 whitespace-nowrap flex items-center gap-1 pr-2 text-[10px] font-bold tracking-widest text-accent">
<span class="blink-dot inline-block h-1.5 w-1.5 rounded-full bg-accent"></span>LIVE
</span>
</nav>
03타겟 인식 카드
격자의 카드마다 카메라 뷰파인더 같은 브래킷 프레임이 둘리고, 스캔라인이 카드 순서대로 하나씩 훑으며 우상단 좌표 리드아웃이 함께 표시됩니다. 기능 소개 격자나 포트폴리오 카드처럼 같은 형태가 여러 칸 반복되는 자리에 씁니다.
<div class="relative overflow-hidden rounded-card bg-ink p-4 shadow-glow">
<span class="corner corner-sm corner-tl" aria-hidden="true"></span>
<span class="corner corner-sm corner-tr" aria-hidden="true"></span>
<span class="corner corner-sm corner-bl" aria-hidden="true"></span>
<span class="corner corner-sm corner-br" aria-hidden="true"></span>
<div class="scan-sweep absolute inset-0 pointer-events-none" style="animation-delay:-.5s"></div>
<span class="relative mb-2 block text-right text-[10px] font-bold text-data/85">#A1</span>
<span class="relative mb-3 block h-5 w-5 rounded border border-accent bg-accent/20"></span>
<p class="relative text-sm font-bold">추적</p>
</div>
04시스템 로그 리스트
목록 각 줄이 타임스탬프 접두어를 달고 있고, 밝은 스캔 바가 위에서 아래로 줄을 하나씩 훑으며 OK 표시를 남깁니다. 기능 목록이나 온보딩 체크리스트처럼 "확인이 순서대로 끝나고 있다"는 진행감을 줘야 하는 자리에 씁니다.
<ul class="flex flex-col gap-1">
<li class="row-scan flex items-center gap-3 rounded px-3 py-2">
<span class="flex-none text-[10px] font-bold text-accent/70">00:01</span>
<span class="min-w-0 flex-1 text-sm font-semibold">사용자 인증 확인</span>
<span class="flex-none text-[10px] font-bold text-accent">OK</span>
</li>
<li class="row-scan flex items-center gap-3 rounded px-3 py-2" style="animation-delay:-.5s">
<span class="flex-none text-[10px] font-bold text-accent/70">00:02</span>
<span class="min-w-0 flex-1 text-sm font-semibold">위치 데이터 동기화</span>
<span class="flex-none text-[10px] font-bold text-accent">OK</span>
</li>
</ul>
<p class="mt-3 text-[10px] text-accent/70">READY <span class="blink-dot inline-block h-2.5 w-1.5 bg-accent"></span></p>
05락 타겟 플랜
추천 플랜 카드만 브래킷이 숨 쉬듯 맥동하고 LOCKED 배지가 붙어, 다른 카드는 불투명도를 낮춰 초점이 나간 듯 물러납니다. 2단 요금제나 무료·유료 비교처럼 어느 쪽을 밀고 있는지 한눈에 보여줘야 할 때 씁니다.
<div class="glow-breathe relative flex-1 basis-40 rounded-card bg-ink p-5 shadow-glow">
<span class="corner corner-sm corner-tl" aria-hidden="true"></span>
<span class="corner corner-sm corner-tr" aria-hidden="true"></span>
<span class="corner corner-sm corner-bl" aria-hidden="true"></span>
<span class="corner corner-sm corner-br" aria-hidden="true"></span>
<span class="mb-2 inline-block rounded bg-accent/15 px-2 py-1 text-[10px] font-bold tracking-widest text-accent">LOCKED</span>
<p class="mb-1 text-base font-bold">프로</p>
<p class="mb-3 text-xs text-cream/60">월 9,900원</p>
<ul class="flex flex-col gap-1 text-xs text-cream/75">
<li>실시간 추적</li>
<li>채널 무제한</li>
</ul>
</div>
06얼굴 인식 후기
아바타 위로 얼굴 인식 상자가 한 번 훑고 지나가고, 인용 카드는 VERIFIED 태그와 함께 브래킷 프레임을 두릅니다. 고객 후기나 파트너 인용처럼 "이 말은 확인된 사람이 했다"는 신뢰를 시각적으로 얹고 싶을 때 씁니다.
<div class="flex flex-wrap items-center gap-4">
<div class="relative h-16 w-16 flex-none overflow-hidden rounded-control bg-ink">
<span class="face-scan absolute left-0 top-0 h-[3px] w-full bg-accent/85"></span>
</div>
<div class="relative min-w-[220px] flex-1 rounded-card bg-ink p-4 shadow-glow">
<span class="corner corner-sm corner-tl" aria-hidden="true"></span>
<span class="corner corner-sm corner-tr" aria-hidden="true"></span>
<span class="mb-2 inline-block text-[10px] font-bold tracking-widest text-accent">VERIFIED</span>
<blockquote class="mb-2 text-sm font-semibold leading-relaxed">놓치는 게 없어서 마음이 편해요</blockquote>
<p class="text-xs text-cream/60">이도윤 · 보안팀 매니저</p>
</div>
</div>
07경보 밴드
화면 폭 전체 밴드 위로 대각선 스캔라인이 천천히 흐르고 브래킷 모서리가 맥동하며, 버튼은 2초에 한 번 짧게 흔들리는 글리치를 냅니다. 가입 유도 띠나 무료 체험 시작처럼 페이지 중간에서 한 번 더 시선을 붙잡아야 하는 자리에 씁니다.
<div class="relative overflow-hidden rounded-card bg-ink px-8 py-12 shadow-glow">
<span class="corner corner-tl" aria-hidden="true"></span>
<span class="corner corner-tr" aria-hidden="true"></span>
<span class="corner corner-bl" aria-hidden="true"></span>
<span class="corner corner-br" aria-hidden="true"></span>
<div class="scan-diag absolute inset-0 pointer-events-none"></div>
<p class="mb-2 text-[11px] font-bold uppercase tracking-widest text-accent">ALERT</p>
<h2 class="mb-5 max-w-2xl text-2xl font-bold leading-snug sm:text-3xl">지금 바로 감시망을 켜보세요</h2>
<button class="glitch-btn rounded-control border border-accent bg-accent/10 px-6 py-3 text-sm font-bold text-accent">무료 체험 시작</button>
</div>
08터미널 푸터
먹색 배경 위 옅은 노이즈가 프레임마다 자리를 바꿔 깜빡이고, 링크 칸은 데이터 리드아웃처럼 정리되며 상단 모서리엔 브래킷이 남습니다. 멀티 컬럼 푸터나 사이트맵 정리처럼 링크가 많은 하단 영역에 톤을 맞출 때 씁니다.
<footer class="relative overflow-hidden rounded-t-card bg-ink px-6 pt-8 pb-6 shadow-glow">
<span class="corner corner-tl" aria-hidden="true"></span>
<span class="corner corner-tr" aria-hidden="true"></span>
<div class="noise-flicker absolute inset-0 pointer-events-none"></div>
<div class="relative grid grid-cols-1 gap-6 sm:grid-cols-3">
<div class="min-w-0">
<p class="mb-2 text-[10px] font-bold uppercase tracking-widest text-accent">SYSTEM</p>
<ul class="flex flex-col gap-1 text-xs text-cream/70">
<li>대시보드</li>
<li>알림 설정</li>
</ul>
</div>
</div>
<p class="relative mt-6 border-t border-accent/20 pt-3 text-[10px] text-cream/40">SENTRY © 2026</p>
</footer>
09락온 버튼·스캔 인풋
버튼을 누르면 네 귀퉁이 브래킷이 안쪽으로 스냅되며 잠기고, 입력창은 포커스를 받으면 밑줄이 스캔하듯 번지는 호박색 글로우로 바뀝니다. 폼 제출 버튼이나 이메일 입력창처럼 방문자의 마지막 클릭 하나에 확실한 반응을 줘야 하는 자리에 씁니다.
<form class="mx-auto flex max-w-md flex-col gap-3 rounded-card bg-ink p-6 shadow-glow sm:flex-row">
<label class="field-glow relative flex-1 rounded-control bg-ink">
<input class="w-full rounded-control bg-transparent px-4 py-3 text-sm text-cream outline-none" type="email" placeholder="이메일 주소">
</label>
<button class="btn-snap relative rounded-control border border-accent bg-accent/10 px-5 py-3 text-sm font-bold text-accent">
<span class="snap-corner snap-tl" aria-hidden="true"></span>
<span class="snap-corner snap-tr" aria-hidden="true"></span>
<span class="snap-corner snap-bl" aria-hidden="true"></span>
<span class="snap-corner snap-br" aria-hidden="true"></span>
가입하기
</button>
</form>
tailwind.config 커스텀
이 편의 부품 아홉 개와 원페이지는 색·글꼴·반경·그림자 값을 오직 이 설정 하나에서만 가져다 씁니다. 여기 숫자를 고치면 브래킷 색부터 카드 모서리까지 화면 전체가 한 번에 같이 바뀝니다.
theme: {
extend: {
colors: {
ink: "#17141a",
cream: "#fff7e6",
accent: "#ffd23f",
data: "#2f6df6",
line: "rgba(255,210,63,.12)",
},
fontFamily: {
display: ["'Space Grotesk'", "system-ui", "sans-serif"],
body: ["'Inter'", "system-ui", "sans-serif"],
},
borderRadius: { control: "12px", card: "16px", pill: "999px" },
boxShadow: {
glow: "0 0 0 1px rgba(255,210,63,.4), 0 0 24px rgba(255,210,63,.16)",
"glow-strong": "0 0 0 1px rgba(255,210,63,.6), 0 0 32px rgba(255,210,63,.4)",
},
spacing: { gutter: "16px" },
},
},
색은 두 개뿐입니다. accent(#ffd23f) 호박색이 브래킷·상태 점·버튼을 전부 맡고, data(#2f6df6) 파란색은 좌표·아이디 번호처럼 "이건 수치다"라고 구분해야 할 딱 한 자리에만 예외로 씁니다.
바이브코딩 프롬프트
이 값을 프로젝트에 먼저 심고 나면, Claude Code나 Cursor에 남길 지시는 아래 한 단락으로 충분합니다. 더 자세한 규칙까지 담은 전체 원문은 zip의 prompt.md에 있습니다.
배경은 ink(#17141a) 하나, 강조는 accent(#ffd23f) 호박색 하나. 카드·헤더·CTA 모서리마다
ㄱ자 브래킷을 두고 accent 색으로 옅게 맥동시킨다. 좌표·타임스탬프·상태 텍스트만
모노스페이스로 쓰고 본문 폰트는 그대로 둔다. 반경은 rounded-card·rounded-pill·
rounded-control 세 값만 쓴다.
page/index.html에 이 지시를 실제로 적용한 뒤 1280px 너비로 전체 페이지를 캡처해 아래에 남겼습니다.

어디서 깨지는가 — 함정
가장 흔한 함정은 큰 제목에 max-width를 걸어두고 여러 화면 폭을 확인하지 않는 것입니다. 이 편 07번 경보 밴드도 처음엔 제목에 max-w-sm(384px)을 걸어 뒀는데, 1280px 데스크톱처럼 화면이 넓어도 "지금 바로 감시망을 켜보세" 다음 줄에 "요" 한 글자만 남는 어색한 줄바꿈이 났습니다 — 뷰포트 폭이 아니라 max-width 값 자체가 원인이라, 좁은 화면만 살펴서는 절대 못 잡습니다. max-w-2xl로 바꾸고서야 1280·768·375px 세 폭 모두 자연스럽게 정리됐습니다. 두 번째 함정은 06번 얼굴 인식 후기입니다. 스캔 상자가 내려가는 거리(61px)가 아바타 높이(64px)에서 상자 두께를 뺀 값으로 고정 px로 박혀 있어, 아바타 크기를 바꾸면 이 값도 손으로 같이 계산해서 고쳐야 합니다.
이 아홉 개 파일과 react 판·프롬프트 원문을 전부 담은 압축 파일의 비밀번호는 t2nt5x9v 이고, 아래 버튼을 누르면 내려받을 수 있습니다.
세 번째 함정은 03번 카드 격자처럼 스캔 순서를 nth-child 지연값으로 매기는 항목입니다. 카드 수를 4장에서 늘리거나 줄이면 animation-delay 배열도 손으로 다시 맞춰야 하고, 그렇지 않으면 스캔이 카드 중간에서 겹치거나 빈 순번이 생깁니다.
접근성
부품 아홉 개는 MDN이 정의한 prefers-reduced-motion 조건을 하나도 빠짐없이 넣어, 동작 줄이기를 켠 방문자 화면에는 스캔·글리치·맥동 대신 "이미 잠긴" 정지 상태(브래킷 100% 크기, 점·캐럿은 항상 켜짐)만 남습니다. 브래킷·스캔라인·노이즈 레이어는 모두 aria-hidden="true"로 감춰 스크린리더가 읽지 않게 했고, LOCKED·VERIFIED·LIVE 같은 상태는 색이 아니라 글자 자체로 전달되므로 색맹 방문자도 그대로 알아볼 수 있습니다.
감시 카메라 톤 말고 다른 디자인 유행도 궁금하면 디자인 트렌드 모음을 열어 보시고, 부품마다 어떤 기준으로 통과시켰는지는 소개 페이지에 적어 뒀습니다.
FAQ
실제 게임이나 SF 영화 속 HUD를 그대로 베낀 건가요?
아니요. 이 편의 부품은 특정 게임·영화·서비스의 화면을 복제한 것이 아니라 브래킷 락온·스캔라인·모노스페이스 리드아웃 같은 일반적인 감시 카메라 시각 언어만 참고했습니다. 서비스명 SENTRY도 예시로 지어낸 가상의 이름입니다.
이 다크 톤을 밝은(라이트) 사이트에도 쓸 수 있나요?
부분적으로는 가능하지만 권하지 않습니다. HUD·터미널 감성은 어두운 배경 위에서 브래킷과 스캔라인이 도드라져야 성립하는데, 배경을 밝게 바꾸면 같은 대비를 내기 위해 accent 색을 더 진하게 써야 해서 다른 트렌드(경고·에러 톤)처럼 보이기 쉽습니다.
Tailwind 없이 순수 CSS로도 쓸 수 있나요?
가능합니다. zip에 같이 담긴 tokens.css가 tailwind.config.js의 색·반경 값을 --color-ink·--color-accent 같은 CSS 변수로 그대로 옮겨 둔 파일이라, 이 한 장만 불러오면 Tailwind가 없는 프로젝트에서도 var(--color-accent)로 같은 호박색을 낼 수 있습니다.