<div class="dashboard-container">
<!-- Sidebar 1 (Left) -->
<aside class="sidebar-main">
<div class="sidebar-header">
<div class="logo-wrap">
<div class="logo-icon">
<i class="fas fa-sun">
</i>
</div>
AI Hero
</div>
<i class="fas fa-bars menu-burger-icon">
</i>
</div>
<div class="search-box">
<i class="fas fa-search">
</i>
<input placeholder="Search.." type="text"/>
<div class="search-shortcut">
<kbd>
⌘
</kbd>
<kbd>
K
</kbd>
</div>
</div>
<div class="top-cards">
<div class="top-card">
<i class="far fa-image">
</i>
<span>
Gallery
</span>
</div>
<div class="top-card">
<i class="fas fa-book">
</i>
<span>
Library
</span>
</div>
</div>
<div class="sidebar-scroll">
<div class="nav-section">
<div class="nav-section-title">
Main Menu
</div>
<a class="nav-item active" href="#">
<i class="fas fa-home main-icon">
</i>
<span>
Home
</span>
</a>
<a class="nav-item" href="#">
<i class="far fa-bell main-icon">
</i>
<span>
Notifications
</span>
<span class="badge">
4
</span>
</a>
<a class="nav-item" href="#">
<i class="fas fa-cog main-icon">
</i>
<span>
Settings
</span>
</a>
</div>
<div class="nav-section">
<div class="nav-section-title">
<span>
Folder
</span>
</div>
<div class="nav-item folder-header">
<i class="fas fa-folder main-icon folder-icon">
</i>
<span>
For Office
</span>
<i class="fas fa-chevron-up chevron-icon">
</i>
</div>
<div class="sub-menu">
<a class="sub-item" href="#">
Daily Stand Up
</a>
<a class="sub-item" href="#">
Report Analytics
</a>
</div>
</div>
<div class="nav-section">
<div class="nav-section-title">
<span>
Integrations
</span>
<div class="action-icons">
<i class="fas fa-plus">
</i>
<i class="fas fa-chevron-down">
</i>
</div>
</div>
<a class="nav-item" href="#">
<img alt="Slack" class="integration-icon" src="https://cdn-icons-png.flaticon.com/512/3800/3800024.png"/>
<span>
Slack
</span>
</a>
<a class="nav-item" href="#">
<img alt="Google Drive" class="integration-icon" src="https://upload.wikimedia.org/wikipedia/commons/d/da/Google_Drive_logo.png"/>
<span>
Google Drive
</span>
</a>
<a class="nav-item" href="#">
<img alt="Github" class="integration-icon" src="https://cdn-icons-png.flaticon.com/512/25/25231.png"/>
<span>
Github
</span>
</a>
</div>
</div>
<div class="sidebar-footer">
<div class="trial-box">
<div class="trial-header">
<div class="trial-title">
<i class="fas fa-crown">
</i>
Free Trial
</div>
<div class="trial-days">
15/30 Days
</div>
</div>
<div class="progress-bar">
<div class="progress-fill">
</div>
</div>
<button class="btn-upgrade">
Upgrade Plan
</button>
</div>
<div class="user-profile">
<img alt="User Avatar" class="user-avatar" src="https://i.pravatar.cc/100?img=33"/>
<div class="user-info">
<div class="user-name">
Test User
</div>
<div class="user-email">
[email protected]
</div>
</div>
<i class="fas fa-chevron-down profile-chevron">
</i>
</div>
</div>
</aside>
<!-- Sidebar 2 (Middle) -->
<aside class="sidebar-chat">
<div class="chat-header">
<i class="fas fa-home">
</i>
Home
</div>
<button class="btn-new-chat">
New Chat
</button>
<div class="chat-list-section">
<div class="chat-group-title">
<span>
Favorites
</span>
<div class="action-icons">
<i class="fas fa-plus">
</i>
<i class="fas fa-chevron-down">
</i>
</div>
</div>
<div class="chat-item">
<div class="chat-item-header">
<i class="fas fa-route chat-item-icon">
</i>
<span class="chat-item-time">
12:03
</span>
</div>
<div class="chat-item-title">
<i class="fas fa-star fav fav-icon">
</i>
Write Userflow for Yengen-Jaya St...
</div>
</div>
<div class="chat-item">
<div class="chat-item-header">
<i class="fas fa-image chat-item-icon">
</i>
<span class="chat-item-time">
10:31
</span>
</div>
<div class="chat-item-title">
<i class="fas fa-star fav fav-icon">
</i>
Generate image for Linkedin banner
</div>
</div>
<div class="chat-group-title mt-20">
<span>
Recent Chats
</span>
<i class="fas fa-chevron-down">
</i>
</div>
<div class="chat-item">
<div class="chat-item-header">
<i class="fas fa-file-alt chat-item-icon">
</i>
<span class="chat-item-time">
10:32
</span>
</div>
<div class="chat-item-title">
Create infographic for social media ma...
</div>
</div>
<div class="chat-item">
<div class="chat-item-header">
<i class="fas fa-magic chat-item-icon">
</i>
<span class="chat-item-time">
08:21
</span>
</div>
<div class="chat-item-title">
Generate image for Linkedin banner
</div>
</div>
<div class="chat-item">
<div class="chat-item-header">
<i class="fas fa-palette chat-item-icon">
</i>
<span class="chat-item-time">
07:51
</span>
</div>
<div class="chat-item-title">
Design a flyer for the upcoming event
</div>
</div>
<div class="chat-item">
<div class="chat-item-header">
<i class="fas fa-chart-bar chat-item-icon">
</i>
<span class="chat-item-time">
06:53
</span>
</div>
<div class="chat-item-title">
Generate a script for a YouTube video
</div>
</div>
<div class="chat-item">
<div class="chat-item-header">
<i class="fas fa-envelope chat-item-icon">
</i>
<span class="chat-item-time">
Mon, 12 Jul, 15:23
</span>
</div>
<div class="chat-item-title">
Create Cold Email for Nintendo at wed...
</div>
</div>
<div class="chat-item">
<div class="chat-item-header">
<i class="fas fa-desktop chat-item-icon">
</i>
<span class="chat-item-time">
Mon, 12 Jul, 14:23
</span>
</div>
<div class="chat-item-title">
Create presentation slides for the mark...
</div>
</div>
<div class="chat-item">
<div class="chat-item-header">
<i class="fas fa-share-alt chat-item-icon">
</i>
<span class="chat-item-time">
Mon, 12 Jul, 13:21
</span>
</div>
<div class="chat-item-title">
Create social media posts for product l...
</div>
</div>
</div>
<div class="chat-footer">
Learn more to generate your agent
<i class="fas fa-info-circle">
</i>
</div>
</aside>
<!-- Main Content Area -->
<main class="main-content">
<div class="top-bar">
<div class="model-selector">
<div class="model-icon">
</div>
eavinti
<i class="fas fa-chevron-down selector-chevron">
</i>
</div>
<div class="top-actions">
<button class="btn-icon">
<i class="fas fa-plus">
</i>
</button>
<button class="btn-outline">
Share Desk
</button>
</div>
</div>
<div class="hero-section">
<div class="hero-orb">
</div>
<div class="hero-date">
3 January, 2025
</div>
<h1 class="hero-title">
What's on your mind today?
</h1>
<div class="search-large">
<div class="search-input-wrap">
<i class="fas fa-search">
</i>
<input placeholder="Ask anything" type="text"/>
</div>
<div class="search-actions">
<div class="search-tools">
<div class="chip">
Add Tools
</div>
<i class="fas fa-paperclip btn-icon-sm">
</i>
</div>
<div class="search-tools">
<i class="fas fa-microphone btn-icon-sm">
</i>
<button class="btn-submit">
<i class="fas fa-arrow-right">
</i>
</button>
</div>
</div>
</div>
<div class="dashboard-sections">
<!-- Quick Generate -->
<div>
<div class="section-header">
<div class="section-title">
Quick generate
</div>
</div>
<div class="cards-grid">
<div class="generate-card">
<div class="card-img-wrap">
<img alt="Cold Email" class="card-img img-faded" src="https://images.unsplash.com/photo-1596526131083-e8c633c948d2?ixlib=rb-4.0.3&auto=format&fit=crop&w=600&q=80"/>
</div>
<div class="card-content">
<div class="card-title">
Cold Email
</div>
<div class="card-desc">
Created cold email templates for various purposes.
</div>
</div>
</div>
<div class="generate-card">
<div class="card-img-wrap bg-purple">
<div class="code-preview">
query GetIssues($owner: String!, $name: String!) {
<br/>
repository(owner: $owner, name: $name)
</div>
</div>
<div class="card-content">
<div class="card-title">
Pro Coder
</div>
<div class="card-desc">
Create snippets and queries to improve workflow.
</div>
</div>
</div>
<div class="generate-card">
<div class="card-img-wrap">
<img alt="Blog Image Generator" class="card-img" src="https://images.unsplash.com/photo-1534528741775-53994a69daeb?ixlib=rb-4.0.3&auto=format&fit=crop&w=600&q=80"/>
</div>
<div class="card-content">
<div class="card-title">
Blog Image Generator
</div>
<div class="card-desc">
Make custom images to boost your blog and engage readers.
</div>
</div>
</div>
</div>
</div>
<!-- Your Models -->
<div class="mt-10">
<div class="section-header">
<div class="section-title">
Your Models
</div>
<div class="section-badge">
Modelling Trial - 15 days
</div>
</div>
<div class="cards-grid">
<div class="model-card">
<div class="model-info">
<div class="model-name">
Slack MRR Report
</div>
<div class="model-time">
2 min ago
</div>
</div>
<div class="model-icon-box">
<i class="fas fa-chart-line">
</i>
</div>
</div>
<div class="model-card">
<div class="model-info">
<div class="model-name">
Slack
</div>
<div class="model-time">
2 min ago
</div>
</div>
<div class="model-icon-box">
<i class="fas fa-hashtag">
</i>
</div>
</div>
<div class="model-card">
<div class="model-info">
<div class="model-name">
Tartarus
</div>
<div class="model-time">
2 min ago
</div>
</div>
<div class="model-icon-box">
<i class="fas fa-cube">
</i>
</div>
</div>
</div>
</div>
</div>
</div>
<button class="btn-outline help-btn">
<i class="fas fa-question-circle help-icon">
</i>
Help
</button>
</main>
</div>
/* BIT_CSS_START */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap');
:root {
--primary: #ff4a11;
--primary-hover: #e03f0b;
--bg-light: #f7f7f8;
--bg-white: #ffffff;
--text-main: #1e1e1e;
--text-muted: #8b8b8b;
--border-color: #e5e7eb;
--border-radius-lg: 16px;
--border-radius-md: 12px;
--border-radius-sm: 8px;
--shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.02);
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.05);
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Inter', sans-serif;
font-weight: 300;
color: var(--text-main);
background-color: var(--bg-light);
height: 100vh;
overflow: hidden;
}
/* Layout */
.dashboard-container {
display: flex;
height: 100vh;
width: 100vw;
overflow: hidden;
}
/* Sidebar 1 (Left) */
.sidebar-main {
width: 260px;
background-color: var(--bg-light);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100%;
flex-shrink: 0;
}
.sidebar-header {
padding: 20px;
display: flex;
align-items: center;
justify-content: space-between;
}
.logo-wrap {
display: flex;
align-items: center;
gap: 10px;
font-weight: 500;
font-size: 1.1rem;
}
.logo-icon {
width: 24px;
height: 24px;
background: var(--primary);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
color: white;
}
.search-box {
margin: 0 20px 20px;
position: relative;
}
.search-box input {
width: 100%;
padding: 10px 10px 10px 36px;
border-radius: var(--border-radius-sm);
border: 1px solid var(--border-color);
background: var(--bg-white);
font-family: inherit;
font-size: 0.9rem;
outline: none;
}
.search-box i.fa-search {
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
color: var(--text-muted);
font-size: 0.9rem;
}
.search-shortcut {
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
display: flex;
gap: 4px;
}
.search-shortcut kbd {
background: var(--bg-light);
border: 1px solid var(--border-color);
border-radius: 4px;
padding: 2px 6px;
font-size: 0.7rem;
font-family: monospace;
color: var(--text-muted);
}
.top-cards {
display: flex;
gap: 10px;
padding: 0 20px 20px;
}
.top-card {
flex: 1;
background: var(--bg-white);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-md);
padding: 12px;
display: flex;
flex-direction: column;
gap: 8px;
cursor: pointer;
transition: box-shadow 0.2s;
}
.top-card:hover {
box-shadow: var(--shadow-sm);
}
.top-card i {
font-size: 1.2rem;
color: var(--text-main);
}
.top-card span {
font-size: 0.85rem;
font-weight: 400;
}
.nav-section {
padding: 10px 20px;
}
.nav-section-title {
font-size: 0.75rem;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 10px;
font-weight: 500;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-item {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 12px;
border-radius: var(--border-radius-sm);
color: var(--text-main);
text-decoration: none;
font-size: 0.9rem;
font-weight: 400;
margin-bottom: 2px;
cursor: pointer;
transition: background 0.2s;
}
.nav-item:hover,
.nav-item.active {
background: var(--bg-white);
box-shadow: var(--shadow-sm);
}
.nav-item i.main-icon {
width: 20px;
text-align: center;
color: var(--text-muted);
}
.nav-item.active i.main-icon {
color: var(--text-main);
}
.badge {
margin-left: auto;
background: var(--primary);
color: white;
font-size: 0.7rem;
padding: 2px 6px;
border-radius: 10px;
font-weight: 500;
}
.sidebar-scroll {
flex: 1;
overflow-y: auto;
}
.sidebar-scroll::-webkit-scrollbar {
width: 4px;
}
.sidebar-scroll::-webkit-scrollbar-thumb {
background: var(--border-color);
border-radius: 4px;
}
.sub-menu {
padding-left: 44px;
display: flex;
flex-direction: column;
gap: 12px;
margin-top: 8px;
margin-bottom: 16px;
}
.sub-item {
font-size: 0.85rem;
color: var(--text-muted);
text-decoration: none;
transition: color 0.2s;
}
.sub-item:hover {
color: var(--text-main);
}
.integration-icon {
width: 16px;
height: 16px;
object-fit: contain;
}
.sidebar-footer {
padding: 20px;
border-top: 1px solid var(--border-color);
}
.trial-box {
background: var(--bg-white);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-md);
padding: 16px;
margin-bottom: 16px;
}
.trial-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
}
.trial-title {
font-size: 0.85rem;
font-weight: 500;
display: flex;
align-items: center;
gap: 6px;
}
.trial-title i {
color: var(--primary);
}
.trial-days {
font-size: 0.75rem;
color: var(--text-muted);
}
.progress-bar {
height: 4px;
background: var(--bg-light);
border-radius: 2px;
margin-bottom: 16px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: var(--primary);
width: 50%;
}
.btn-upgrade {
width: 100%;
padding: 10px;
background: var(--primary);
color: white;
border: none;
border-radius: var(--border-radius-sm);
font-weight: 400;
font-size: 0.85rem;
cursor: pointer;
transition: background 0.2s;
}
.btn-upgrade:hover {
background: var(--primary-hover);
}
.user-profile {
display: flex;
align-items: center;
gap: 12px;
cursor: pointer;
}
.user-avatar {
width: 36px;
height: 36px;
border-radius: 50%;
object-fit: cover;
}
.user-info {
flex: 1;
}
.user-name {
font-size: 0.9rem;
font-weight: 500;
}
.user-email {
font-size: 0.75rem;
color: var(--text-muted);
}
/* Sidebar 2 (Middle) */
.sidebar-chat {
width: 320px;
background: var(--bg-white);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100%;
flex-shrink: 0;
}
.chat-header {
padding: 20px;
display: flex;
align-items: center;
gap: 10px;
font-weight: 500;
font-size: 1.1rem;
border-bottom: 1px solid transparent;
}
.btn-new-chat {
margin: 0 20px 20px;
padding: 12px;
background: var(--primary);
color: white;
border: none;
border-radius: var(--border-radius-sm);
font-weight: 400;
font-size: 0.9rem;
cursor: pointer;
transition: background 0.2s;
text-align: center;
}
.btn-new-chat:hover {
background: var(--primary-hover);
}
.chat-list-section {
flex: 1;
overflow-y: auto;
}
.chat-list-section::-webkit-scrollbar {
width: 4px;
}
.chat-list-section::-webkit-scrollbar-thumb {
background: var(--border-color);
border-radius: 4px;
}
.chat-group-title {
font-size: 0.75rem;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.5px;
padding: 0 20px;
margin-bottom: 10px;
font-weight: 500;
display: flex;
justify-content: space-between;
align-items: center;
}
.chat-item {
padding: 12px 20px;
border-bottom: 1px solid var(--border-color);
cursor: pointer;
transition: background 0.2s;
}
.chat-item:hover {
background: var(--bg-light);
}
.chat-item-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.chat-item-icon {
color: var(--text-muted);
font-size: 0.85rem;
}
.chat-item-icon.fav {
color: #f59e0b;
}
.chat-item-time {
font-size: 0.7rem;
color: var(--text-muted);
}
.chat-item-title {
font-size: 0.85rem;
font-weight: 400;
color: var(--text-main);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.chat-footer {
padding: 20px;
border-top: 1px solid var(--border-color);
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.75rem;
color: var(--text-muted);
}
/* Main Content Area */
.main-content {
flex: 1;
background: var(--bg-white);
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
}
.top-bar {
position: absolute;
top: 0;
left: 0;
right: 0;
padding: 20px;
display: flex;
justify-content: space-between;
align-items: center;
z-index: 10;
}
.model-selector {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
border: 1px solid var(--border-color);
border-radius: var(--border-radius-sm);
background: var(--bg-white);
font-size: 0.85rem;
font-weight: 400;
cursor: pointer;
box-shadow: var(--shadow-sm);
}
.model-icon {
width: 16px;
height: 16px;
border-radius: 50%;
background: linear-gradient(135deg, #ff4a11, #8b5cf6);
}
.top-actions {
display: flex;
gap: 10px;
}
.btn-icon,
.btn-outline {
padding: 8px 16px;
border: 1px solid var(--border-color);
border-radius: var(--border-radius-sm);
background: var(--bg-white);
font-size: 0.85rem;
font-weight: 400;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: background 0.2s;
box-shadow: var(--shadow-sm);
}
.btn-icon {
padding: 8px;
width: 36px;
height: 36px;
}
.btn-outline:hover,
.btn-icon:hover {
background: var(--bg-light);
}
.hero-section {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
padding-top: 15vh;
background: radial-gradient(circle at center 0%, #fff0e6 0%, #ffffff 40%);
overflow-y: auto;
padding-bottom: 60px;
}
.hero-orb {
width: 48px;
height: 48px;
flex-shrink: 0;
border-radius: 50%;
/* Triple gradient 3D effect */
background:
radial-gradient(circle at 30% 30%, #ffdfec, transparent 50%),
radial-gradient(circle at 70% 30%, #8ca6f9, transparent 50%),
radial-gradient(circle at 50% 80%, #ff4a11, transparent 60%),
#fecfef;
background-size: 200% 200%;
box-shadow:
inset -5px -5px 10px rgba(0, 0, 0, 0.1),
inset 5px 5px 10px rgba(255, 255, 255, 0.8),
0 10px 25px rgba(255, 74, 17, 0.3);
margin-bottom: 24px;
position: relative;
animation: floatOrb 4s ease-in-out infinite, pulseOrb 6s alternate infinite;
}
@keyframes pulseOrb {
0% {
background-position: 0% 0%;
}
100% {
background-position: 100% 100%;
}
}
@keyframes floatOrb {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(-12px);
}
}
.hero-orb::after {
content: '';
position: absolute;
bottom: -10px;
left: 50%;
transform: translateX(-50%);
width: 30px;
height: 4px;
background: rgba(0, 0, 0, 0.1);
border-radius: 50%;
filter: blur(2px);
animation: floatShadow 4s ease-in-out infinite;
}
@keyframes floatShadow {
0%,
100% {
transform: translateX(-50%) scale(1);
opacity: 1;
}
50% {
transform: translateX(-50%) scale(0.7);
opacity: 0.6;
}
}
.hero-date {
font-size: 0.75rem;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 500;
margin-bottom: 12px;
}
.hero-title {
font-size: 2.5rem;
font-weight: 500;
color: var(--text-main);
margin-bottom: 40px;
text-align: center;
}
.search-large {
width: 100%;
max-width: 700px;
background: var(--bg-white);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-md);
padding: 16px 20px;
box-shadow: var(--shadow-md);
margin-bottom: 60px;
}
.search-input-wrap {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 16px;
}
.search-input-wrap i.fa-search {
color: var(--text-main);
font-size: 1.1rem;
}
.search-input-wrap input {
flex: 1;
border: none;
outline: none;
font-size: 1.1rem;
font-family: inherit;
color: var(--text-main);
}
.search-input-wrap input::placeholder {
color: var(--text-muted);
}
.search-actions {
display: flex;
justify-content: space-between;
align-items: center;
}
.search-tools {
display: flex;
gap: 12px;
align-items: center;
}
.chip {
padding: 6px 12px;
border: 1px solid var(--border-color);
border-radius: 20px;
font-size: 0.8rem;
font-weight: 400;
color: var(--text-main);
background: var(--bg-white);
cursor: pointer;
transition: background 0.2s;
}
.chip:hover {
background: var(--bg-light);
}
.btn-icon-sm {
color: var(--text-muted);
cursor: pointer;
font-size: 1.1rem;
transition: color 0.2s;
}
.btn-icon-sm:hover {
color: var(--text-main);
}
.btn-submit {
width: 36px;
height: 36px;
border-radius: 8px;
background: var(--primary);
color: white;
border: none;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: background 0.2s;
}
.btn-submit:hover {
background: var(--primary-hover);
}
.dashboard-sections {
width: 100%;
max-width: 800px;
padding: 0 20px;
display: flex;
flex-direction: column;
gap: 40px;
}
.section-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 20px;
}
.section-title {
font-size: 1.1rem;
font-weight: 500;
color: var(--text-main);
}
.section-badge {
padding: 4px 10px;
background: rgba(255, 74, 17, 0.1);
color: var(--primary);
border-radius: 4px;
font-size: 0.75rem;
font-weight: 500;
}
.cards-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
.generate-card {
background: var(--bg-white);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-md);
overflow: hidden;
cursor: pointer;
transition: box-shadow 0.2s, transform 0.2s;
}
.generate-card:hover {
box-shadow: var(--shadow-md);
transform: translateY(-2px);
}
.card-img-wrap {
height: 120px;
background: var(--bg-light);
display: flex;
align-items: center;
justify-content: center;
border-bottom: 1px solid var(--border-color);
padding: 12px;
}
.card-img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 6px;
box-shadow: var(--shadow-sm);
}
.card-content {
padding: 16px;
}
.card-title {
font-size: 0.95rem;
font-weight: 500;
margin-bottom: 6px;
}
.card-desc {
font-size: 0.8rem;
color: var(--text-muted);
line-height: 1.4;
}
.model-card {
background: var(--bg-white);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-md);
padding: 16px;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
transition: box-shadow 0.2s;
}
.model-card:hover {
box-shadow: var(--shadow-md);
}
.model-info {
display: flex;
flex-direction: column;
gap: 4px;
}
.model-name {
font-size: 0.9rem;
font-weight: 500;
}
.model-time {
font-size: 0.75rem;
color: var(--text-muted);
}
.model-icon-box {
width: 32px;
height: 32px;
background: var(--bg-light);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
color: var(--text-main);
}
.help-btn {
position: absolute;
bottom: 20px;
right: 20px;
}
/* Responsive */
@media (max-width: 1024px) {
.sidebar-chat {
display: none;
/* Hide middle column on smaller screens */
}
}
@media (max-width: 768px) {
.sidebar-main {
position: absolute;
left: -260px;
z-index: 100;
transition: left 0.3s ease;
box-shadow: var(--shadow-md);
}
.sidebar-main.open {
left: 0;
}
.hero-title {
font-size: 2rem;
}
.cards-grid {
grid-template-columns: 1fr;
}
.mobile-menu-btn {
display: block;
}
}
.mobile-menu-btn {
display: none;
position: absolute;
top: 20px;
left: 20px;
z-index: 101;
background: var(--bg-white);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-sm);
padding: 8px;
cursor: pointer;
}
@media (max-width: 768px) {
.mobile-menu-btn {
display: block;
}
.top-bar {
padding-left: 70px;
}
}
/* Extracted Inline Styles */
.menu-burger-icon {
color: var(--text-muted);
cursor: pointer;
}
.folder-header {
padding-bottom: 0;
}
.folder-icon {
color: var(--primary);
}
.chevron-icon {
margin-left: auto;
font-size: 0.7rem;
color: var(--text-muted);
}
.action-icons {
display: flex;
gap: 8px;
}
.profile-chevron {
font-size: 0.7rem;
color: var(--text-muted);
}
.fav-icon {
margin-right: 6px;
}
.mt-20 {
margin-top: 20px;
}
.mt-10 {
margin-top: 10px;
}
.selector-chevron {
font-size: 0.7rem;
color: var(--text-muted);
margin-left: 4px;
}
.img-faded {
opacity: 0.8;
}
.bg-purple {
background: #f3e8ff;
}
.code-preview {
font-family: monospace;
color: #8b5cf6;
font-size: 0.7rem;
padding: 10px;
line-height: 1.4;
}
.help-icon {
margin-right: 8px;
}
/* BIT_CSS_END */
// BIT_JS_START
document.addEventListener('DOMContentLoaded', () => {
// Add mobile menu toggle functionality if needed in the future
// Currently relying on standard flex layout, but we can wire a button
const body = document.querySelector('body');
const mobileBtn = document.createElement('button');
mobileBtn.className = 'mobile-menu-btn';
mobileBtn.innerHTML = '<i class="fas fa-bars"></i>';
const sidebar = document.querySelector('.sidebar-main');
// Only add logic if mobile button exists
if (window.innerWidth <= 768) {
document.querySelector('.main-content').appendChild(mobileBtn);
mobileBtn.addEventListener('click', () => {
sidebar.classList.toggle('open');
});
// Close when clicking outside
document.querySelector('.main-content').addEventListener('click', (e) => {
if (!e.target.closest('.mobile-menu-btn') && sidebar.classList.contains('open')) {
sidebar.classList.remove('open');
}
});
}
});
// BIT_JS_END
Skills & Techniques Used
This component was built utilizing modern, Vanilla web development techniques, specifically tailored for maintainability and performance without relying on external CSS frameworks.
Modern CSS Architecture
- CSS Custom Properties (Variables): Extensive use of
:root variables for colors, border radii, and shadows, ensuring a consistent design system that is easy to theme or modify.
- CSS Flexbox: Used heavily for aligning icons, text, and flexible sidebar contents (
display: flex; align-items: center; justify-content: space-between;).
- CSS Grid: Implemented in the
.cards-grid for a clean, responsive 3-column layout (grid-template-columns: repeat(3, 1fr);) that automatically stacks on mobile via media queries.
Animations & Transitions
- CSS Keyframes (
@keyframes):
floatOrb: Translates the main orb vertically on the Y-axis.
floatShadow: Scales and changes the opacity of the orb's pseudo-element shadow simultaneously to simulate distance and depth.
- Hover Micro-interactions: Smooth transitions (
transition: box-shadow 0.2s, transform 0.2s;) applied to cards and buttons to enhance the premium feel of the interface.
Advanced Styling
- Radial Gradients: Used for the hero background to create a soft, glowing illumination effect (
radial-gradient(circle at center 0%, #fff0e6 0%, #ffffff 40%)).
- Linear Gradients: Used for the hero orb (
linear-gradient(135deg, #ff9a9e 0%, #fecfef 99%, #fecfef 100%)) to give it a multi-dimensional, vibrant look.
- Pseudo-elements (
::after): Utilized to create the blur-filtered drop shadow underneath the hero orb without needing extra HTML markup.
JavaScript API
- Vanilla DOM Manipulation: Simple event listeners (
addEventListener) and class toggling (classList.toggle) to handle the mobile sidebar drawer interaction and click-outside-to-close logic.
AI Hero Dashboard
Overview
The AI Hero Dashboard is a complex, modern, three-column web interface designed for an advanced AI chat application. It provides a comprehensive layout including main navigation, user integration management, recent chat history, and a rich main content area tailored for quick generation and model selection.
Purpose
This component serves as a foundational scaffold for any robust AI SaaS application that requires managing complex states, multiple models, and extensive user history while keeping the interface clean and organized.
Structure
- Left Sidebar: Handles primary app navigation, folders (e.g., "For Office"), integrations (Slack, Google Drive, Github), and user account/trial status.
- Middle Sidebar: Functions as a chat history drawer, separating "Favorites" and "Recent Chats" for quick access.
- Main Area: The core workspace featuring a dynamic, floating "Hero Orb", a prominent search/input bar for prompts, and quick-action cards for templates and AI models.
How it Works
The component relies entirely on vanilla HTML and CSS without dependencies on external frameworks like Tailwind. It utilizes a combination of CSS Flexbox and Grid to achieve a responsive layout that gracefully degrades to a mobile-friendly view, utilizing a hamburger menu to toggle sidebars on smaller screens.
Design System: AI Hero Dashboard
Visual Aesthetics
The AI Hero Dashboard employs a modern, "clean and light" aesthetic characterized by expansive white space, subtle borders, and smooth radial gradients. The design emphasizes content hierarchy and usability.
Typography
- Primary Font:
Inter (Google Fonts).
- Weights Used:
300 (Light) for body text and general interface readability, 400 (Regular) and 500 (Medium) for headings and important labels to provide a refined, elegant look without heavy, overwhelming text.
Color Palette
- Backgrounds:
--bg-light (#f7f7f8) for sidebars to create depth, and --bg-white (#ffffff) for active panels and cards.
- Primary Brand:
--primary (#ff4a11) an energetic, warm orange used for call-to-actions, active states, and icons.
- Text:
--text-main (#1e1e1e) for maximum contrast and readability, with --text-muted (#8b8b8b) for secondary information, timestamps, and icons.
- Accents: Subtle gradients in the hero background (
#fff0e6 to #ffffff) and a vibrant pink/orange blend for the floating hero orb.
UX/UI Decisions
- Three-Column Layout: Maximizes screen real estate for desktop users, segregating system navigation from contextual chat history and the main workspace.
- Subtle Shadows & Hover States: Cards and list items elevate gently (
transform: translateY(-2px)) with enhanced box shadows upon hover, reinforcing interactivity.
- Floating Animation: The
hero-orb features an infinite vertical float (@keyframes) coupled with a dynamic shadow that scales, adding a sense of magic and depth to the AI interface.
- Mobile Responsiveness: On viewports smaller than 768px, the sidebars transition to absolute positioning and hide off-canvas, summoned only via a dedicated hamburger icon to prioritize the chat interface.