2026-02-24 19:02:48 -03:00
|
|
|
<style>
|
|
|
|
|
/* CRITICAL: Overriding default Tailwind resets that break the layout */
|
2026-02-26 12:40:44 -03:00
|
|
|
* {
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-24 19:02:48 -03:00
|
|
|
body {
|
2026-02-28 10:05:36 -03:00
|
|
|
margin: 0 !important;
|
|
|
|
|
padding: 0 !important;
|
2026-02-24 19:02:48 -03:00
|
|
|
font-family: 'Fira Code', 'Fira Sans', Arial, sans-serif !important;
|
2026-02-28 11:06:40 -03:00
|
|
|
background: var(--bg) !important;
|
2026-02-24 19:02:48 -03:00
|
|
|
overflow: hidden !important;
|
2026-02-28 10:05:36 -03:00
|
|
|
height: 100% !important;
|
|
|
|
|
width: 100% !important;
|
2026-02-24 19:02:48 -03:00
|
|
|
display: flex !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Core Layout replicating BUILD V3 screenshot styling */
|
2026-02-26 12:40:44 -03:00
|
|
|
.build-container {
|
|
|
|
|
width: 100%;
|
2026-02-28 10:05:36 -03:00
|
|
|
height: 100%;
|
2026-02-26 12:40:44 -03:00
|
|
|
display: flex;
|
|
|
|
|
position: absolute;
|
|
|
|
|
inset: 0;
|
|
|
|
|
z-index: 1000;
|
2026-02-28 11:06:40 -03:00
|
|
|
background: var(--bg);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
2026-02-24 19:02:48 -03:00
|
|
|
/* Left Sidebar */
|
2026-02-26 12:40:44 -03:00
|
|
|
.sidebar {
|
|
|
|
|
width: 51px;
|
2026-02-28 10:05:36 -03:00
|
|
|
height: 100%;
|
2026-02-28 11:08:54 -03:00
|
|
|
background: var(--surface);
|
|
|
|
|
border-right: 1px solid var(--border);
|
2026-02-26 12:40:44 -03:00
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
z-index: 100;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.sidebar-item {
|
|
|
|
|
width: 51px;
|
|
|
|
|
height: 50px;
|
2026-02-28 11:08:54 -03:00
|
|
|
border-bottom: 1px solid var(--border);
|
2026-02-26 12:40:44 -03:00
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
transition: all 0.15s ease;
|
|
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.sidebar-item:hover {
|
2026-02-28 10:05:36 -03:00
|
|
|
background: var(--surface-hover, #ffffff);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.sidebar-item.active {
|
2026-02-28 10:05:36 -03:00
|
|
|
background: var(--surface-hover, #ffffff);
|
2026-02-28 11:08:54 -03:00
|
|
|
border-left: 3px solid var(--accent);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.sidebar-icon {
|
|
|
|
|
width: 30px;
|
|
|
|
|
height: 30px;
|
|
|
|
|
opacity: 0.6;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.sidebar-item:hover .sidebar-icon {
|
|
|
|
|
opacity: 1;
|
|
|
|
|
}
|
2026-02-24 19:02:48 -03:00
|
|
|
|
|
|
|
|
/* Main Content wrapper */
|
2026-02-26 12:40:44 -03:00
|
|
|
.main-wrapper {
|
|
|
|
|
flex: 1;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-24 19:02:48 -03:00
|
|
|
/* Top Navigation Tabs */
|
2026-02-26 12:40:44 -03:00
|
|
|
.tabs-container {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
2026-02-28 11:08:54 -03:00
|
|
|
background: var(--surface);
|
|
|
|
|
border-bottom: 1px solid var(--border);
|
2026-02-26 12:40:44 -03:00
|
|
|
z-index: 100;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.tabs-row {
|
|
|
|
|
display: flex;
|
|
|
|
|
height: 34px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.main-tab {
|
|
|
|
|
height: 34px;
|
|
|
|
|
min-width: 169px;
|
|
|
|
|
flex: 1;
|
2026-02-28 11:08:54 -03:00
|
|
|
border-right: 1px solid var(--border);
|
2026-02-26 12:40:44 -03:00
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
padding: 0 18px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.main-tab:hover {
|
2026-02-28 10:05:36 -03:00
|
|
|
background: var(--surface-hover, #ffffff);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.main-tab.active {
|
2026-02-28 11:08:54 -03:00
|
|
|
background: var(--accent);
|
|
|
|
|
border-color: var(--accent);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.main-tab.active .main-tab-content {
|
2026-02-28 11:08:54 -03:00
|
|
|
color: var(--bg);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.main-tab-content {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
gap: 4px;
|
|
|
|
|
font-family: 'Fira Code', monospace;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
font-weight: 500;
|
2026-02-28 11:08:54 -03:00
|
|
|
color: var(--text);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
2026-02-24 19:02:48 -03:00
|
|
|
/* Workspace (Where windows float) */
|
2026-02-26 12:40:44 -03:00
|
|
|
.workspace {
|
|
|
|
|
flex: 1;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
overflow: hidden;
|
2026-02-28 11:06:40 -03:00
|
|
|
background: var(--bg);
|
2026-02-26 12:40:44 -03:00
|
|
|
position: relative;
|
|
|
|
|
z-index: 10;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-24 19:02:48 -03:00
|
|
|
/* The Panel Grid (Desktop Icons) */
|
2026-02-26 12:40:44 -03:00
|
|
|
.panel-section {
|
|
|
|
|
flex: 1;
|
|
|
|
|
padding: 26px 33px;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
z-index: 10;
|
|
|
|
|
position: absolute;
|
|
|
|
|
inset: 0;
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.panel-grid {
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-columns: repeat(3, 1fr);
|
|
|
|
|
gap: 20px;
|
|
|
|
|
max-width: 1200px;
|
|
|
|
|
pointer-events: auto;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-24 19:02:48 -03:00
|
|
|
/* Interactive Desktop Icons triggering HTMX */
|
|
|
|
|
.desktop-icon {
|
2026-02-28 11:06:40 -03:00
|
|
|
background: var(--bg);
|
2026-02-28 11:08:54 -03:00
|
|
|
border: 1px solid var(--border);
|
2026-02-26 12:40:44 -03:00
|
|
|
border-radius: 8px;
|
|
|
|
|
height: 67px;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
justify-content: flex-end;
|
|
|
|
|
align-items: flex-start;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
transition: all 0.2s ease;
|
|
|
|
|
position: relative;
|
|
|
|
|
width: 100%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.desktop-icon:hover {
|
|
|
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
|
|
|
transform: translateY(-2px);
|
2026-02-28 11:08:54 -03:00
|
|
|
border-color: var(--accent);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.panel-card-icon {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: -20px;
|
|
|
|
|
left: 10px;
|
|
|
|
|
width: 42px;
|
|
|
|
|
height: 42px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.panel-card-label {
|
|
|
|
|
font-family: 'Fira Code', monospace;
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
font-weight: 500;
|
2026-02-28 11:08:54 -03:00
|
|
|
color: var(--text);
|
2026-02-26 12:40:44 -03:00
|
|
|
margin-top: auto;
|
2026-02-24 19:02:48 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* The background abstract pattern from BUILD V3 */
|
2026-02-26 12:40:44 -03:00
|
|
|
.bg-grid {
|
|
|
|
|
position: absolute;
|
|
|
|
|
inset: 0;
|
2026-02-28 11:06:40 -03:00
|
|
|
background-image: linear-gradient(to right, var(--border) 1px, transparent 1px), linear-gradient(to bottom, var(--border) 1px, transparent 1px);
|
2026-02-26 12:40:44 -03:00
|
|
|
background-size: 40px 40px;
|
|
|
|
|
z-index: 0;
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bg-svg {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: -10%;
|
|
|
|
|
left: -10%;
|
|
|
|
|
width: 120%;
|
|
|
|
|
height: 120%;
|
|
|
|
|
z-index: 0;
|
|
|
|
|
opacity: 0.6;
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
display: block !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bg-svg path {
|
|
|
|
|
fill: none;
|
2026-02-28 10:58:17 -03:00
|
|
|
stroke: var(--surface-hover, #e6f2eb);
|
2026-02-26 12:40:44 -03:00
|
|
|
stroke-width: 45;
|
|
|
|
|
stroke-linecap: round;
|
|
|
|
|
stroke-linejoin: round;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.bg-svg path.inner {
|
2026-02-28 10:05:36 -03:00
|
|
|
stroke: var(--surface, #f7faf9);
|
2026-02-26 12:40:44 -03:00
|
|
|
stroke-width: 41;
|
|
|
|
|
}
|
2026-02-24 19:02:48 -03:00
|
|
|
|
|
|
|
|
/* Bottom Taskbar */
|
2026-02-26 12:40:44 -03:00
|
|
|
.toolbar {
|
|
|
|
|
height: 50px;
|
2026-02-28 11:06:40 -03:00
|
|
|
background: var(--bg);
|
2026-02-28 11:08:54 -03:00
|
|
|
border-top: 1px solid var(--border);
|
2026-02-26 12:40:44 -03:00
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
padding: 0 8px;
|
|
|
|
|
z-index: 100;
|
|
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#taskbar-apps {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex: 1;
|
|
|
|
|
height: 100%;
|
|
|
|
|
align-items: center;
|
|
|
|
|
gap: 0px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.toolbar-time {
|
|
|
|
|
font-family: 'Fira Code', monospace;
|
|
|
|
|
font-size: 14px;
|
2026-02-28 11:08:54 -03:00
|
|
|
color: var(--text);
|
2026-02-26 12:40:44 -03:00
|
|
|
text-align: right;
|
|
|
|
|
line-height: 1.4;
|
|
|
|
|
padding: 0 10px;
|
|
|
|
|
margin-left: auto;
|
|
|
|
|
}
|
2026-02-24 19:02:48 -03:00
|
|
|
|
|
|
|
|
/* Taskbar Items generated by WindowManager */
|
2026-02-26 12:40:44 -03:00
|
|
|
.taskbar-item {
|
|
|
|
|
width: 40px;
|
|
|
|
|
height: 40px;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
transition: all 0.15s ease;
|
|
|
|
|
border-bottom: 2px solid transparent;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.taskbar-item:hover {
|
2026-02-28 11:08:54 -03:00
|
|
|
background: var(--surface);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.taskbar-item.active {
|
2026-02-28 11:08:54 -03:00
|
|
|
border-bottom-color: var(--accent);
|
2026-02-28 10:05:36 -03:00
|
|
|
background: linear-gradient(to bottom, transparent 50%, var(--accent-light, rgba(132, 214, 105, 0.1)) 100%);
|
2026-02-26 12:40:44 -03:00
|
|
|
}
|
|
|
|
|
|
2026-02-24 19:02:48 -03:00
|
|
|
/* Utility */
|
2026-02-26 12:40:44 -03:00
|
|
|
svg {
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
2026-02-24 19:02:48 -03:00
|
|
|
</style>
|
|
|
|
|
|
|
|
|
|
<div class="build-container">
|
|
|
|
|
<!-- Left Sidebar -->
|
|
|
|
|
<aside class="sidebar">
|
|
|
|
|
<div class="sidebar-item active" title="Home">
|
2026-02-28 11:08:54 -03:00
|
|
|
<svg class="sidebar-icon" viewBox="0 0 24 24" fill="none" stroke="var(--text)" stroke-width="2">
|
2026-02-26 12:40:44 -03:00
|
|
|
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
|
|
|
|
|
<polyline points="9 22 9 12 15 12 15 22"></polyline>
|
|
|
|
|
</svg>
|
2026-02-24 19:02:48 -03:00
|
|
|
</div>
|
|
|
|
|
<div class="sidebar-item" title="Terminal">
|
2026-02-28 11:08:54 -03:00
|
|
|
<svg class="sidebar-icon" viewBox="0 0 24 24" fill="none" stroke="var(--text)" stroke-width="2">
|
2026-02-26 12:40:44 -03:00
|
|
|
<polyline points="4 17 10 11 4 5"></polyline>
|
|
|
|
|
<line x1="12" y1="19" x2="20" y2="19"></line>
|
|
|
|
|
</svg>
|
2026-02-24 19:02:48 -03:00
|
|
|
</div>
|
|
|
|
|
</aside>
|
|
|
|
|
|
|
|
|
|
<!-- Main Wrapper -->
|
|
|
|
|
<div class="main-wrapper">
|
|
|
|
|
<!-- Top Navigation Tabs -->
|
|
|
|
|
<div class="tabs-container">
|
|
|
|
|
<div class="tabs-row">
|
2026-02-26 12:40:44 -03:00
|
|
|
<div class="main-tab active">
|
|
|
|
|
<div class="main-tab-content"><span>//</span><span>BUILD</span></div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="main-tab">
|
|
|
|
|
<div class="main-tab-content"><span>//</span><span>REVIEW</span></div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="main-tab">
|
|
|
|
|
<div class="main-tab-content"><span>//</span><span>DEPLOY</span></div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="main-tab">
|
|
|
|
|
<div class="main-tab-content"><span>//</span><span>MONITOR</span></div>
|
|
|
|
|
</div>
|
2026-02-24 19:02:48 -03:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Workspace container where WindowManager operates -->
|
|
|
|
|
<div class="workspace" id="desktop-content-inner">
|
2026-02-26 12:40:44 -03:00
|
|
|
|
2026-02-24 19:02:48 -03:00
|
|
|
<!-- Background Pattern -->
|
|
|
|
|
<div class="bg-grid"></div>
|
|
|
|
|
<svg class="bg-svg" preserveAspectRatio="xMidYMid slice" viewBox="0 0 1000 600">
|
|
|
|
|
<path d="M-50,200 Q200,100 400,250 T800,50 T1100,250" />
|
|
|
|
|
<path d="M100,-50 Q250,200 150,450 T400,650" />
|
|
|
|
|
<path d="M500,-50 Q450,250 800,350 T750,700" />
|
|
|
|
|
<path class="inner" d="M-50,200 Q200,100 400,250 T800,50 T1100,250" />
|
|
|
|
|
<path class="inner" d="M100,-50 Q250,200 150,450 T400,650" />
|
|
|
|
|
<path class="inner" d="M500,-50 Q450,250 800,350 T750,700" />
|
|
|
|
|
</svg>
|
|
|
|
|
|
|
|
|
|
<div class="panel-section">
|
|
|
|
|
<div class="panel-grid">
|
2026-02-26 12:40:44 -03:00
|
|
|
|
2026-02-24 19:02:48 -03:00
|
|
|
<!-- HTMX Enabled Desktop Icons that WindowManager catches -->
|
2026-02-26 12:40:44 -03:00
|
|
|
<div class="desktop-icon" data-app-id="chat" data-app-title="Chat"
|
|
|
|
|
hx-get="/suite/partials/chat.html" hx-swap="none">
|
|
|
|
|
<svg class="panel-card-icon" viewBox="0 0 42 42" fill="none">
|
2026-02-28 11:08:54 -03:00
|
|
|
<circle cx="21" cy="21" r="20" stroke="var(--accent)" stroke-width="2" />
|
|
|
|
|
<path d="M14 21h14M21 14v14" stroke="var(--accent)" stroke-width="2" />
|
2026-02-26 12:40:44 -03:00
|
|
|
</svg>
|
|
|
|
|
<div class="panel-card-label">Chat</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="desktop-icon" data-app-id="vibe" data-app-title="Vibe"
|
|
|
|
|
hx-get="/suite/partials/vibe.html" hx-swap="none">
|
2026-02-24 19:02:48 -03:00
|
|
|
<svg class="panel-card-icon" viewBox="0 0 42 42" fill="none">
|
2026-02-28 11:08:54 -03:00
|
|
|
<circle cx="21" cy="21" r="20" stroke="var(--accent)" stroke-width="2" />
|
|
|
|
|
<path d="M12 14l8 7-8 7" stroke="var(--accent)" stroke-width="2" stroke-linecap="round"
|
2026-02-26 12:40:44 -03:00
|
|
|
stroke-linejoin="round" />
|
2026-02-28 11:08:54 -03:00
|
|
|
<line x1="22" y1="28" x2="32" y2="28" stroke="var(--accent)" stroke-width="2"
|
2026-02-26 12:40:44 -03:00
|
|
|
stroke-linecap="round" />
|
2026-02-24 19:02:48 -03:00
|
|
|
</svg>
|
2026-02-26 12:40:44 -03:00
|
|
|
<div class="panel-card-label">Vibe</div>
|
2026-02-24 19:02:48 -03:00
|
|
|
</div>
|
|
|
|
|
|
2026-02-26 12:40:44 -03:00
|
|
|
<div class="desktop-icon" data-app-id="tasks" data-app-title="Tasks"
|
|
|
|
|
hx-get="/suite/tasks/task-window.html" hx-swap="none">
|
2026-02-24 19:02:48 -03:00
|
|
|
<svg class="panel-card-icon" viewBox="0 0 42 42" fill="none">
|
2026-02-28 11:08:54 -03:00
|
|
|
<rect x="2" y="2" width="38" height="38" rx="4" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="12" y1="12" x2="30" y2="12" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="12" y1="21" x2="30" y2="21" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="12" y1="30" x2="24" y2="30" stroke="var(--text)" stroke-width="2" />
|
2026-02-24 19:02:48 -03:00
|
|
|
</svg>
|
|
|
|
|
<div class="panel-card-label">Tasks</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-02-26 12:40:44 -03:00
|
|
|
<div class="desktop-icon" data-app-id="terminal" data-app-title="Terminal"
|
|
|
|
|
hx-get="/suite/partials/terminal.html" hx-swap="none">
|
2026-02-24 19:02:48 -03:00
|
|
|
<svg class="panel-card-icon" viewBox="0 0 42 42" fill="none">
|
2026-02-28 11:08:54 -03:00
|
|
|
<rect x="2" y="4" width="38" height="34" rx="4" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="10" y1="14" x2="32" y2="14" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="10" y1="22" x2="28" y2="22" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="10" y1="30" x2="24" y2="30" stroke="var(--text)" stroke-width="2" />
|
2026-02-24 19:02:48 -03:00
|
|
|
</svg>
|
|
|
|
|
<div class="panel-card-label">Terminal</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-02-26 12:40:44 -03:00
|
|
|
<div class="desktop-icon" data-app-id="explorer" data-app-title="Explorer"
|
|
|
|
|
hx-get="/suite/partials/explorer.html" hx-swap="none">
|
2026-02-24 19:02:48 -03:00
|
|
|
<svg class="panel-card-icon" viewBox="0 0 42 42" fill="none">
|
2026-02-28 11:08:54 -03:00
|
|
|
<rect x="2" y="2" width="38" height="38" rx="4" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="10" y1="10" x2="32" y2="10" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="10" y1="18" x2="28" y2="18" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="10" y1="26" x2="32" y2="26" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="10" y1="34" x2="24" y2="34" stroke="var(--text)" stroke-width="2" />
|
2026-02-24 19:02:48 -03:00
|
|
|
</svg>
|
|
|
|
|
<div class="panel-card-label">Explorer</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-02-26 12:40:44 -03:00
|
|
|
<div class="desktop-icon" data-app-id="editor" data-app-title="Editor"
|
|
|
|
|
hx-get="/suite/partials/editor.html" hx-swap="none">
|
2026-02-24 19:02:48 -03:00
|
|
|
<svg class="panel-card-icon" viewBox="0 0 42 42" fill="none">
|
2026-02-28 11:08:54 -03:00
|
|
|
<polyline points="4 8 12 2 20 8" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="12" y1="2" x2="12" y2="24" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<polyline points="22 16 30 10 38 16" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<line x1="30" y1="10" x2="30" y2="32" stroke="var(--text)" stroke-width="2" />
|
2026-02-24 19:02:48 -03:00
|
|
|
</svg>
|
|
|
|
|
<div class="panel-card-label">Editor</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-02-26 12:40:44 -03:00
|
|
|
<div class="desktop-icon" data-app-id="browser" data-app-title="Browser"
|
|
|
|
|
hx-get="/suite/partials/browser.html" hx-swap="none">
|
2026-02-24 19:02:48 -03:00
|
|
|
<svg class="panel-card-icon" viewBox="0 0 42 42" fill="none">
|
2026-02-28 11:08:54 -03:00
|
|
|
<rect x="2" y="4" width="38" height="34" rx="4" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<circle cx="14" cy="16" r="4" stroke="var(--text)" stroke-width="2" />
|
|
|
|
|
<path d="M6 34a6 6 0 0 1 6-6h10a6 6 0 0 1 6 6v2H6v-2z" stroke="var(--text)" stroke-width="2" />
|
2026-02-24 19:02:48 -03:00
|
|
|
</svg>
|
|
|
|
|
<div class="panel-card-label">Browser</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Bottom Taskbar -->
|
|
|
|
|
<footer class="toolbar" id="taskbar">
|
|
|
|
|
<div id="taskbar-apps">
|
|
|
|
|
<!-- Taskbar items populated automatically by window-manager.js -->
|
|
|
|
|
</div>
|
2026-02-25 10:15:47 -03:00
|
|
|
<div class="toolbar-time" style="display: flex; align-items: center; gap: 15px;">
|
|
|
|
|
<div id="themeSelectorContainer"></div>
|
|
|
|
|
<div style="text-align: right;">
|
|
|
|
|
<div id="clock-time">00:00</div>
|
|
|
|
|
<div id="clock-date">01/01/2026</div>
|
|
|
|
|
</div>
|
2026-02-24 19:02:48 -03:00
|
|
|
</div>
|
|
|
|
|
</footer>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- HTMX Intercepts and WindowManager Init as described in UI.md Phase 3 -->
|
|
|
|
|
<script>
|
|
|
|
|
// Simple Clock implementation matching the screenshot bottom right corner
|
|
|
|
|
setInterval(() => {
|
|
|
|
|
const now = new Date();
|
|
|
|
|
const timeEl = document.getElementById('clock-time');
|
|
|
|
|
const dateEl = document.getElementById('clock-date');
|
2026-02-26 12:40:44 -03:00
|
|
|
if (timeEl) timeEl.textContent = now.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
|
|
|
|
|
if (dateEl) dateEl.textContent = now.toLocaleDateString();
|
2026-02-24 19:02:48 -03:00
|
|
|
}, 1000);
|
|
|
|
|
</script>
|