Abdul Studio
CSS Style Library
The shared design system behind every Abdul Studio tool — from the CMS dashboard to proposal generators, quotation builders, and client tools. Use these tokens, components, and patterns to build new tools that look and feel like the rest of the suite.
📦 Add the stylesheet to any new tool
<link rel="stylesheet" href="./style.css"> · Or use design tokens inline from this doc
Copy <link> Tag
Design Principles
🌑
Dark by Default
All tools use dark backgrounds (#1a1a1a → #313131). White is reserved for exported documents only.
💠
Sky Blue Accent
#29aee6 is the single dominant accent. Used for interactive elements, highlights, and brand moments.
🔤
Syne + DM Sans
Syne for all headings and UI labels. DM Sans for body text. JetBrains Mono for code and data.
Foundation
Design Tokens
All values are defined as CSS custom properties on :root. Copy the variables block into any new tool.
Copy /* ── BRAND PALETTE ── */
:root {
--sky : #29aee6 ;
--sky2 : #1a8fc4 ;
--sky3 : #0e5a6e ;
--sky-dim : rgba(41,174,230,0.12) ;
--sky-border : rgba(41,174,230,0.25) ;
/* Backgrounds */
--bg : #1a1a1a ;
--bg2 : #212121 ;
--bg3 : #2a2a2a ;
--bg4 : #313131 ;
--bg5 : #383838 ;
/* Text */
--white : #f0f0f0 ;
--muted : rgba(240,240,240,0.42) ;
--muted2 : rgba(240,240,240,0.2) ;
/* Borders */
--border : rgba(240,240,240,0.07) ;
--border2 : rgba(240,240,240,0.12) ;
/* Status */
--green : #2ecc71 ;
--red : #e74c3c ;
--amber : #f39c12 ;
/* Typography */
--fh : 'Syne', sans-serif ;
--fb : 'DM Sans', sans-serif ;
--fm : 'JetBrains Mono', monospace ;
/* Spacing scale */
--space-xs : .28rem ;
--space-sm : .55rem ;
--space-md : .9rem ;
--space-lg : 1.4rem ;
--space-xl : 2.2rem ;
/* Border radius */
--r-sm : 6px ;
--r-md : 10px ;
--r-lg : 14px ;
--r-xl : 20px ;
--r-pill : 99px ;
/* Shadows */
--shadow-sm : 0 2px 8px rgba(0,0,0,.2) ;
--shadow-md : 0 4px 20px rgba(0,0,0,.3) ;
--shadow-lg : 0 8px 40px rgba(0,0,0,.4) ;
--shadow-sky : 0 0 20px rgba(41,174,230,.25) ;
}
Visual
Colors
The palette is intentionally tight: dark neutrals, one sky blue accent, and semantic status colors. Never add new hues without a strong reason.
Brand Accent
Sky Dim
rgba(41,174,230,0.12)
Backgrounds
Status Colors
Visual
Typography
Three font families, each with a distinct role. Import all three from Google Fonts.
Copy <!-- Add to <head> -->
<link href="https://fonts.googleapis.com/css2?family=Syne:wght@400;600;700;800&family=DM+Sans:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" >
Syne — Headings & UI Labels (--fh)
font-family: var(--fh) Used for: titles, section headers, badge labels, nav items, buttons
700
Project Questionnaire
DM Sans — Body & UI text (--fb)
font-family: var(--fb) Used for: body text, form labels, descriptions, metadata
300
The quick brown fox jumps over the lazy dog. Used for long-form descriptions and subtitles.
400
Body text, form values, standard paragraph copy at regular weight.
500
Form labels, metadata, slightly emphasized UI text.
JetBrains Mono — Code & Data (--fm)
font-family: var(--fm) Used for: code snippets, hex values, reference numbers, API tokens
400
#29aee6 · QT-2026-001 · nfp_QrojAWg5wSFbbJg...
600
@font-face { font-family: 'Syne'; src: url('...') format('woff2'); }
Visual
Gradients
Standard gradients used across document headers, hero sections, and accent elements.
Header Gradient (dark documents)
linear-gradient(135deg, #111 0%, #1e2a32 55%, #0e3a4a 100%)
Sky Glow (radial, hero bg)
radial-gradient(ellipse at 70% 0%, rgba(41,174,230,0.25) 0%, transparent 65%)
Spinning Ring (avatar, cert cards)
conic-gradient(from 180deg, #29aee6, #0e5a6e, #29aee6)
Bottom Fade (project grid)
linear-gradient(to bottom, transparent 0%, var(--bg) 80%)
Progress / Sky Bar
linear-gradient(90deg, #29aee6, #1a8fc4)
Accent Bar (agreement footer)
linear-gradient(90deg, #29aee6, #0e5a6e)
Foundation
Spacing & Border Radius
Spacing Scale
Token Value Use case
--space-xs .28rem Icon gap, tight labels
--space-sm .55rem Field gap, chip spacing
--space-md .9rem Form row gap, card padding
--space-lg 1.4rem Section inner padding
--space-xl 2.2rem Section margin
--space-2xl 3.5rem Page padding
Border Radius
Token Value Use case
--r-sm 6px Buttons (sm), copy btns
--r-md 10px Inputs, small cards
--r-lg 14px Main cards, panels
--r-xl 20px Large feature cards
--r-pill 99px Buttons, badges, chips
Components
Badges & Labels
Current
Live
Error
Deploying
Draft
Copy .badge {
font-size : .58rem ;
font-weight : 700 ;
letter-spacing : .08em ;
text-transform : uppercase ;
padding : .18rem .55rem ;
border-radius : var(--r-pill) ;
border : 1px solid ;
}
.badge-sky { background : var(--sky-dim) ; color : var(--sky) ; border-color : var(--sky-border) ; }
.badge-green { background : rgba(46,204,113,.1) ; color : var(--green) ; border-color : rgba(46,204,113,.25) ; }
.badge-red { background : rgba(231,76,60,.08) ; color : var(--red) ; border-color : rgba(231,76,60,.2) ; }
.badge-amber { background : rgba(243,156,18,.1) ; color : var(--amber) ; border-color : rgba(243,156,18,.25) ; }
Status Dots
Copy .status-dot { width : 8px ; height : 8px ; border-radius : 50% ; }
.dot-live { background : var(--green) ; box-shadow : 0 0 6px rgba(46,204,113,.5) ; }
.dot-pending { background : var(--amber) ; animation : pulse 1s infinite ; }
.dot-error { background : var(--red) ; }
@keyframes pulse { 0%,100% {opacity :1 } 50% {opacity :.3 } }
Components
Chips & Tags
Used for multi-select filters, project type selectors, and tag inputs. Works with hidden checkboxes or JS toggle.
Brand Identity
UI/UX Design
Social Media
Web Development
Motion Design
Art Direction
Copy .chip {
font-size : .7rem ;
font-weight : 500 ;
padding : .28rem .72rem ;
border-radius : var(--r-pill) ;
border : 1.5px solid var(--border2) ;
color : var(--muted) ;
cursor : pointer ;
transition : all .18s ;
user-select : none ;
}
.chip:hover, .chip.on {
background : var(--sky-dim) ;
border-color : var(--sky) ;
color : var(--sky) ;
}
Components
Cards
Default Card
Standard card with bg3 background and subtle border.
Sky Accent Card
Highlighted card for callouts and featured content.
Glow Card
Used for active states or current selection indicators.
Copy .card { background : var(--bg3) ; border : 1px solid var(--border) ; border-radius : var(--r-lg) ; padding : 1.2rem 1.4rem ; }
.card-sky { border-color : var(--sky-border) ; background : rgba(41,174,230,.04) ; }
.card-glow { border-color : var(--sky-border) ; box-shadow : var(--shadow-sky) ; }
Components
Toggles
Copy <!-- HTML -->
<div class="toggle-wrap" onclick="this.classList.toggle('on')" >
<div class="toggle-track" ><div class="toggle-thumb" ></div ></div >
<span class="toggle-label" >Label</span >
</div >
/* CSS */
.toggle-wrap { display : flex ; align-items : center ; gap : .42rem ; cursor : pointer ; user-select : none ; }
.toggle-track { width : 28px ; height : 15px ; background : var(--bg3) ; border-radius : 99px ; position : relative ; border : 1px solid var(--border) ; }
.toggle-thumb { width : 9px ; height : 9px ; background : var(--muted) ; border-radius : 50% ; position : absolute ; top : 2px ; left : 2px ; transition : all .2s ; }
.toggle-wrap.on .toggle-track { background : rgba(41,174,230,.2) ; border-color : var(--sky) ; }
.toggle-wrap.on .toggle-thumb { background : var(--sky) ; transform : translateX(13px) ; }
Components
Toasts
✓ Deployed successfully!
✕ Export failed
ℹ Building PDF...
Copy .toast {
position : fixed ;
bottom : 2rem ; left : 50% ;
transform : translateX(-50%) translateY(20px) ;
background : var(--bg3) ;
border : 1px solid var(--border2) ;
border-radius : var(--r-md) ;
padding : .65rem 1.1rem ;
font-family : var(--fh) ; font-size : .72rem ; font-weight : 600 ;
opacity : 0 ; transition : all .3s ; z-index : 9999 ;
}
.toast.show { opacity : 1 ; transform : translateX(-50%) translateY(0) ; }
.toast.success { border-color : rgba(46,204,113,.3) ; color : var(--green) ; }
.toast.error { border-color : rgba(231,76,60,.3) ; color : var(--red) ; }
.toast.info { border-color : var(--sky-border) ; color : var(--sky) ; }
/* JS */
function showToast (msg, type='info' ) {
const t = document.getElementById('toast' );
t.textContent = msg; t.className = `toast show ${type}` ;
clearTimeout(t._t);
t._t = setTimeout(() => t.classList.remove('show' ), 3000 );
}
Components
Progress Bars
Copy .prog-bar { height : 4px ; background : var(--bg4) ; border-radius : 99px ; overflow : hidden ; }
.prog-fill { height : 100% ; border-radius : 99px ; background : var(--sky) ; transition : width .35s ; }
Patterns
Layout / Sidebar Pattern
The standard two-panel layout used in every Abdul Studio tool: sticky 56px topbar + fixed sidebar + scrollable main area.
Copy /* ── TWO-PANEL LAYOUT ── */
body {
display : grid ;
grid-template-columns : var(--sidebar, 260px) 1fr ;
grid-template-rows : 56px 1fr ;
height : 100vh ;
overflow : hidden ;
}
.topbar { grid-column : 1 / -1 ; background : var(--bg2) ; border-bottom : 1px solid var(--border) ; }
.sidebar { background : var(--bg2) ; border-right : 1px solid var(--border) ; overflow-y : auto ; }
.main { overflow-y : auto ; padding : 1.5rem 2rem ; background : var(--bg) ; }
/* ── SIDEBAR NAV ITEM ── */
.nav-item {
display : flex ; align-items : center ; gap : .6rem ;
padding : .5rem .65rem ; border-radius : var(--r-sm) ;
font-size : .78rem ; color : var(--muted) ;
cursor : pointer ; transition : all .15s ;
}
.nav-item:hover { background : var(--bg3) ; color : var(--white) ; }
.nav-item.active { background : var(--sky-dim) ; color : var(--sky) ; font-weight : 500 ; }
Patterns
Timeline
Aug 2025 — Present
Art Director
Masar Real Estate
Mar 2025 — Jul 2025
Art Director
MarkUP Marketing Agency
Copy .tl { position : relative ; padding-left : 1.8rem ; }
.tl::before { content : '' ; position : absolute ; left : 0 ; top : 0 ; bottom : 0 ; width : 1.5px ; background : linear-gradient(to bottom, var(--sky), var(--sky3), transparent) ; }
.tl-item { position : relative ; padding-left : 1.8rem ; margin-bottom : 2.4rem ; }
.tl-dot { position : absolute ; left : -2.2rem ; top : .3rem ; width : 12px ; height : 12px ; border-radius : 50% ; background : var(--bg) ; border : 2px solid var(--sky) ; }
.tl-period { font-size : .65rem ; color : var(--sky) ; letter-spacing : .1em ; text-transform : uppercase ; }
.tl-role { font-family : var(--fh) ; font-weight : 700 ; font-size : .95rem ; }
.tl-company { font-size : .8rem ; color : var(--muted) ; }
Patterns
Section Labels
About me
Selected work
What I do
Copy .section-label {
font-size : .68rem ;
font-weight : 500 ;
letter-spacing : .18em ;
text-transform : uppercase ;
color : var(--sky) ;
display : flex ; align-items : center ; gap : .7rem ;
}
.section-label::before { content : '' ; width : 24px ; height : 1.5px ; background : var(--sky) ; }
Patterns
Deploy Log
[14:23:01] Starting deployment...
[14:23:02] Generating data.js (18.4 KB)
[14:23:02] data.js generated ✓
[14:23:04] Uploading to Netlify CDN...
[14:23:07] Deploy successful! data.js is now live.
[14:23:01] ERROR: Auth token expired
Copy .deploy-log {
background : var(--bg) ;
border : 1px solid var(--border) ;
border-radius : var(--r-sm) ;
padding : .9rem 1rem ;
font-family : var(--fm) ;
font-size : .72rem ;
max-height : 180px ;
overflow-y : auto ;
line-height : 1.7 ;
}
.log-ok { color : var(--green) ; }
.log-err { color : var(--red) ; }
.log-info { color : var(--sky) ; }
.log-muted { color : var(--muted) ; }