> MAN_PAGE TERMINAL UI _
A complete manual for Bunker/Retro styled CSS/JS components. Terminal UI now features a theme modification system, form validation, and 30 interface modules.
> 01. STARTER TEMPLATE (BOILERPLATE)
Copy this empty HTML boilerplate to start fresh with Terminal UI.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bunker OS</title>
<link rel="icon" type="image/svg+xml" href="assets/terminal-icon.svg">
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/terminal.css">
</head>
<body class="t-crt">
<div class="t-container">
<!-- Your UI code goes here -->
</div>
<script src="assets/terminal.js"></script>
</body>
</html>> 02. THEME CUSTOMIZATION (CSS VARIABLES)
Terminal UI is designed to be customizable. You can change the "Matrix Green" color scheme to a "Fallout Amber", "Blood Red", or "Sci-Fi Cyan" theme simply by overriding variables in your custom CSS file.
/* Add this to your custom CSS file or inside <style> */
:root {
/* Fallout Theme (Amber) */
--t-green: #ffb000; /* Change primary color to Amber */
--t-green-dim: #996900; /* Its dimmed color */
/* Background colors */
--bg-base: #110d00;
--bg-surface: #1f1700;
}> 03. UTILITY CLASSES
Adapting standard utility naming (similar to Bootstrap/Tailwind) so you don't need to write inline CSS.
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="text-danger font-bold t-blink">D-FLEX & T-BLINK</div>
<div class="fs-small text-muted">FS-SMALL & TEXT-MUTED</div>
</div>.d-flex, .flex-column, .justify-content-center, .justify-content-between, .align-items-center, .gap-2Sizing:
.w-25, .w-50, .w-75, .w-100, .h-100, .w-autoSpacing:
.m-0 to .m-5, .p-0 to .p-5, .px-3, .py-2, etc.Typography:
.text-center, .text-right, .font-bold, .fs-smallVisual:
.t-glow, .t-flicker, .t-border-bottom
> 04. RESPONSIVENESS & BREAKPOINTS
Terminal UI is Mobile-First. Grid structures automatically collapse into 1 full column on screens smaller than 768px (Tablet/Mobile).
You can also use explicit responsive utilities to show or hide elements based on screen size:
<!-- Will be hidden on mobile -->
<div class="d-none-mobile">Desktop Only</div>
<!-- Will be hidden on desktop -->
<div class="d-none-desktop">Mobile Only</div>> 05. LAYOUT MODULES
Built-in complex modules for building specific applications.
A. KANBAN BOARD (.t-board)
<div class="t-board">
<div class="t-board-column">
<div class="t-board-header">PENDING</div>
<div class="t-board-body">
<div class="t-board-card">Data Encryption Task</div>
<div class="t-board-card">Server Patching</div>
</div>
</div>
<div class="t-board-column">
<div class="t-board-header text-danger">URGENT</div>
<div class="t-board-body">
<div class="t-board-card t-flicker">System Breached!</div>
</div>
</div>
</div>B. THREAD CONNECTOR (.t-thread)
Satellite is airborne.
Receiving transmission from Sector 7.
<div class="t-thread">
<div class="t-thread-item">
<span class="text-muted fs-small">10:00 AM</span>
<p class="m-0">Satellite is airborne.</p>
</div>
<div class="t-thread-item">
<span class="text-muted fs-small">10:15 AM</span>
<p class="m-0">Receiving transmission from Sector 7.</p>
</div>
</div>C. MARKDOWN BODY (.t-markdown)
Terminal Heading
Normal text with inline_code in the middle.
Message from commander: Defend the bunker!
<div class="t-markdown">
<h3>Terminal Heading</h3>
<p>Normal text with <code>inline_code</code> in the middle.</p>
<blockquote>Message from commander: Defend the bunker!</blockquote>
</div>> 06. VISUAL FILTERS
Use the .t-retro-filter class on images (img) or iframes to instantly transform them into an old-school monochrome green/sepia style.
<img src="image.jpg" class="t-retro-filter">> 08. CENTER SCREEN (LOGIN/INSTALL)
<div class="t-center-screen">
<div class="t-center-box t-card">
<div class="t-card-header">> SYSTEM_LOGIN</div>
<input type="password" class="t-input text-center" placeholder="PASSCODE">
<button class="t-btn mt-2 w-100">ENTER</button>
</div>
</div>> 09. CONTAINERS & GRID
Choose the main container width for your page and divide it into symmetrical grid columns.
A. CONTAINERS
<!-- Standard width (Focus) -->
<div class="t-container">...</div>
<!-- Full width (Dashboard) -->
<div class="t-container-fluid">...</div>B. SYMMETRICAL GRID
<div class="t-grid t-grid-2">
<div class="p-2 text-center border-dashed">COLUMN 1</div>
<div class="p-2 text-center border-dashed">COLUMN 2</div>
</div>> 10. SIDEBAR LAYOUT (RELAY-STYLE)
<div class="t-grid-layout">
<div class="t-main-panel">MAIN_PANEL (70%)</div>
<div class="t-side-panel">SIDEBAR (30%)</div>
</div>> 11. CONTENT BOXES (CARDS)
Satellite system is running in optimal condition.
Minor warning regarding storage capacity.
Anomaly detected in the firewall. Urgent!
<div class="t-card">
<div class="t-card-header">> SERVER_STATUS</div>
<p>Satellite system is running...</p>
</div>
<div class="t-card warning">
<div class="t-card-header">> ALERT_SYSTEM</div>
<p>Minor warning.</p>
</div>
<div class="t-card danger">
<div class="t-card-header">> CRITICAL_WARNING</div>
<p>Anomaly detected in the firewall.</p>
</div>> 12. TERMINAL WINDOW (CODE BLOCK)
Epic components for displaying scripts or console outputs.
Ping 192.168.1.1...
Reply from 192.168.1.1: bytes=32 time<1ms TTL=64
> CONNECTION STABLE.
<div class="t-window">
<div class="t-window-header">
<span>root@bunker:~#</span>
<span>[ - ] [ X ]</span>
</div>
<pre class="t-window-body"><code>Ping 192.168.1.1...
Reply from 192.168.1.1: bytes=32 time<1ms TTL=64
> CONNECTION STABLE.</code></pre>
</div>> 13. BUTTONS & INPUTS
<label class="t-form-label">Target IP Address</label>
<input type="text" class="t-input mb-3" placeholder="E.g.: 192.168.1.1">
<div class="d-flex gap-2">
<button class="t-btn w-100">NORMAL SCAN</button>
<button class="t-btn danger w-100" disabled>LOCKED</button>
</div>> 14. FORM VALIDATION
Use additional classes to notify users if their input is incorrect or successfully verified.
<!-- Input Error -->
<input type="password" class="t-input error" value="wrong">
<span class="t-feedback text-danger">> SYS_ERR: Password mismatch.</span>
<!-- Input Success -->
<input type="password" class="t-input success" value="correct">
<span class="t-feedback text-success">> PASSWORD STRENGTH: OPTIMAL.</span>> 15. INPUT ACTION
<div class="t-input-group">
<input type="password" id="passToken" class="t-input" placeholder="Passcode...">
<button class="t-input-action-btn" onclick="Terminal.toggleInputAction('passToken', this)">[ SHOW ]</button>
</div>> 16. TEXTAREA & SELECT
<select class="t-select">
<option>PUBLIC_BROADCAST</option>
</select>
<textarea class="t-textarea" rows="3" placeholder="Type encrypted message here..."></textarea>> 17. CHECKBOX & RADIO
<label class="t-checkbox-label">
<input type="checkbox" checked>
<span class="t-checkmark"></span> Route Encryption
</label>
<label class="t-radio-label mt-2">
<input type="radio" name="opt" checked>
<span class="t-radiomark"></span> Active Node
</label>> 19. DATA TABLES
| ID | FILE |
|---|---|
| 01 | data.sql |
<div class="t-table-wrapper">
<table class="t-table">
<thead><tr><th>ID</th><th>FILE</th></tr></thead>
<tbody><tr><td>01</td><td>data.sql</td></tr></tbody>
</table>
</div>> 20. LIST GROUPS (CONTACTS)
<div class="t-list-group">
<a href="#" class="t-list-item active">
<span class="t-led-dot t-led-green"></span>
<span class="t-list-item-title">STATION_BRAVO</span>
<span class="t-list-item-subtitle">Sector 5</span>
</a>
</div>> 21. CHAT BUBBLES
<div class="t-chat-container">
<div class="t-bubble t-bubble-them">Incoming message</div>
<div class="t-bubble t-bubble-me">My message</div>
</div>> 22. BADGES & PROGRESS
<span class="t-badge warning">PENDING</span>
<span class="t-badge danger">CRITICAL</span>
<div class="t-progress-bg">
<div class="t-progress-bar" style="width: 45%;">45%</div>
</div>> 23. LED INDICATORS
<span class="t-led-dot t-led-green"></span> OK
<span class="t-led-dot t-led-yellow"></span> WAIT
<span class="t-led-dot t-led-red"></span> FAIL> 24. ALERTS & SPINNER
<div class="t-alert danger">> SECURITY BREACH!</div>
Status: <span class="t-spinner"></span> PROCESSING> 25. TAB SYSTEM
<div class="t-tabs-wrapper">
<div class="t-tabs-header">
<button class="t-tab-btn active" onclick="Terminal.tab(this, 't1')">MAIN</button>
</div>
<div id="t1" class="t-tab-content active">Main tab content.</div>
</div>> 26. ACCORDION & TOOLTIP
Hover over This Text.
<div class="t-accordion">
<button class="t-accordion-btn" onclick="Terminal.accordion(this)">DIRECTORY</button>
<div class="t-accordion-content">Classified content.</div>
</div>
<p>Hover over <span data-tooltip="Secret coordinates">This Text</span>.</p>> 27. MODAL SYSTEM
<button class="t-btn" onclick="Terminal.modal.open('contohModal')">OPEN MODAL</button>
<!-- Place this structure at the bottom of the body -->
<div id="contohModal" class="t-modal">
<div class="t-modal-content">
<div class="t-card-header">> SYSTEM_ACCESS</div>
<p>System is responding well.</p>
<div class="mt-4 text-right">
<button class="t-btn danger" onclick="Terminal.modal.close('contohModal')">CLOSE [X]</button>
</div>
</div>
</div>> 28. NOTIFICATIONS (TOAST)
<button class="t-btn" onclick="Terminal.toast('Secure connection.', 'normal')">Normal</button>
<button class="t-btn" onclick="Terminal.toast('Process running...', 'warning')">Warning</button>
<button class="t-btn danger" onclick="Terminal.toast('Connection lost!', 'danger')">Danger</button>> 29. BRANDING (ICON)
<!-- How to setup Favicon -->
<link rel="icon" type="image/svg+xml" href="terminal-icon.svg">> 30. NEW EXTENSIONS (V1.3.0)
A. DROPDOWN MENU (.t-dropdown)
<div class="t-dropdown">
<button class="t-btn t-dropdown-btn" onclick="Terminal.dropdown(this)">[ ACTION_MENU v ]</button>
<div class="t-dropdown-menu">
<a class="t-dropdown-item" onclick="Terminal.toast('Scanning...')">> SCAN_NODE</a>
<a class="t-dropdown-item" onclick="Terminal.toast('Extracting...')">> EXTRACT_DATA</a>
<a class="t-dropdown-item text-danger">> PURGE_SYSTEM</a>
</div>
</div>B. TOGGLE SWITCH (.t-switch)
<div class="d-flex align-items-center gap-3">
<label class="t-switch">
<input type="checkbox" checked>
<span class="t-switch-slider"></span>
</label>
<span class="text-muted">> MAIN_RADAR_POWER</span>
</div>C. RANGE SLIDER (.t-range)
<label class="t-form-label">> FREQUENCY_CALIBRATOR (MHz)</label>
<input type="range" min="1" max="100" value="50" class="t-range">D. TREE VIEW (.t-tree)
- sys_root
-
vault_data
- passwords.enc
- archives
<ul class="t-tree">
<li>
<span class="t-tree-folder" onclick="Terminal.treeToggle(this)">sys_root</span>
<ul>
<li><a href="#" class="t-tree-file">kernel.bin</a></li>
<li><a href="#" class="t-tree-file">config.ini</a></li>
</ul>
</li>
<li>
<span class="t-tree-folder" onclick="Terminal.treeToggle(this)">vault_data</span>
<ul>
<li><a href="#" class="t-tree-file">passwords.enc</a></li>
<li>
<span class="t-tree-folder" onclick="Terminal.treeToggle(this)">archives</span>
<ul>
<li><a href="#" class="t-tree-file">log_2026.txt</a></li>
</ul>
</li>
</ul>
</li>
</ul>E. JS TYPEWRITER EFFECT
<div id="tw-demo" class="mb-3 text-warning font-bold" style="min-height: 25px;"></div>
<button class="t-btn t-btn-sm" onclick="Terminal.typewrite('tw-demo', '> INCOMING TRANSMISSION INTERCEPTED...', 50)">[ PLAY_EFFECT ]</button>> 31. MEDIA & STATUS EXTENSIONS
A. CUSTOM FILE UPLOAD (.t-file-wrapper)
<div class="t-file-wrapper">
<span class="t-file-btn" id="file-label">> SELECT_FILE</span>
<input type="file" id="file-input" onchange="Terminal.fileInput('file-input', 'file-label')">
</div>B. IMAGE LIGHTBOX (.t-lightbox)
<img src="image.jpg" onclick="Terminal.lightbox.open(this.src)">C. EMPTY STATE (.t-empty-state)
<div class="t-empty-state">
<span class="t-empty-state-icon">📡</span>
[ EMPTY RADAR. NO SIGNAL. ]
</div>D. SKELETON LOADER (.t-skeleton)
<div class="t-skeleton"></div>
<div class="t-skeleton" style="width: 70%;"></div>