1
0

now with setup.exe files

This commit is contained in:
Creat0r
2026-05-11 18:21:51 +02:00
parent 18494db41e
commit 57b5a582f6
3 changed files with 160 additions and 266 deletions

View File

@@ -17,14 +17,14 @@
--void: #02040c; --void: #02040c;
--deep: #050813; --deep: #050813;
--card: rgba(8,12,26,0.92); --card: rgba(8,12,26,0.92);
--cb: rgba(255,148,32,0.11); /* card border */ --cb: rgba(255,148,32,0.11);
--cbh: rgba(255,148,32,0.30); /* card border hover */ --cbh: rgba(255,148,32,0.30);
--sol: #ff9820; --sol: #ff9820;
--sol2: #ff6100; --sol2: #ff6100;
--sg: rgba(255,148,32,0.18); /* solar glow */ --sg: rgba(255,148,32,0.18);
--sr: rgba(255,148,32,0.38); /* solar rim */ --sr: rgba(255,148,32,0.38);
--sp: rgba(255,148,32,0.10); /* solar pale */ --sp: rgba(255,148,32,0.10);
--ice: #4ddeff; --ice: #4ddeff;
--ig: rgba(77,222,255,0.10); --ig: rgba(77,222,255,0.10);
@@ -53,9 +53,6 @@
--ts: .22s; --ts: .22s;
} }
/* ═══════════════════════════════════════════════
RESET
═══════════════════════════════════════════════ */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;} *,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
html{scroll-behavior:smooth;} html{scroll-behavior:smooth;}
body{background:var(--void);color:var(--t1);font-family:var(--fb);font-size:16px;line-height:1.65;overflow-x:hidden;} body{background:var(--void);color:var(--t1);font-family:var(--fb);font-size:16px;line-height:1.65;overflow-x:hidden;}
@@ -65,20 +62,11 @@
::-webkit-scrollbar-track{background:var(--void);} ::-webkit-scrollbar-track{background:var(--void);}
::-webkit-scrollbar-thumb{background:rgba(255,148,32,.2);border-radius:2px;} ::-webkit-scrollbar-thumb{background:rgba(255,148,32,.2);border-radius:2px;}
/* ═══════════════════════════════════════════════
BACKGROUND CANVAS
═══════════════════════════════════════════════ */
#bg{position:fixed;inset:0;z-index:0;pointer-events:none;} #bg{position:fixed;inset:0;z-index:0;pointer-events:none;}
/* ═══════════════════════════════════════════════
LAYOUT
═══════════════════════════════════════════════ */
.wrap{max-width:1140px;margin:0 auto;padding:0 5vw;} .wrap{max-width:1140px;margin:0 auto;padding:0 5vw;}
section{position:relative;z-index:2;} section{position:relative;z-index:2;}
/* ═══════════════════════════════════════════════
NAV
═══════════════════════════════════════════════ */
nav{ nav{
position:fixed;inset:0 0 auto 0;height:var(--nh);z-index:300; position:fixed;inset:0 0 auto 0;height:var(--nh);z-index:300;
display:flex;align-items:center;justify-content:space-between;padding:0 5vw; display:flex;align-items:center;justify-content:space-between;padding:0 5vw;
@@ -127,9 +115,6 @@
.mob a{font-family:var(--fm);font-size:.85rem;letter-spacing:.12em;text-transform:uppercase;color:var(--t2);transition:color var(--ts);} .mob a{font-family:var(--fm);font-size:.85rem;letter-spacing:.12em;text-transform:uppercase;color:var(--t2);transition:color var(--ts);}
.mob a:hover{color:var(--sol);} .mob a:hover{color:var(--sol);}
/* ═══════════════════════════════════════════════
BUTTONS
═══════════════════════════════════════════════ */
.btn{ .btn{
display:inline-flex;align-items:center;gap:8px; display:inline-flex;align-items:center;gap:8px;
padding:.78rem 1.8rem;border-radius:var(--rb); padding:.78rem 1.8rem;border-radius:var(--rb);
@@ -145,46 +130,34 @@
.btn-wire{background:transparent;color:var(--t2);border:1px solid var(--t4);} .btn-wire{background:transparent;color:var(--t2);border:1px solid var(--t4);}
.btn-wire:hover{border-color:var(--ir);color:var(--ice);box-shadow:0 0 18px var(--ig),inset 0 0 10px var(--ig);transform:translateY(-2px);} .btn-wire:hover{border-color:var(--ir);color:var(--ice);box-shadow:0 0 18px var(--ig),inset 0 0 10px var(--ig);transform:translateY(-2px);}
/* ═══════════════════════════════════════════════
SHARED SECTION TYPOGRAPHY
═══════════════════════════════════════════════ */
.lbl{font-family:var(--fm);font-size:.62rem;letter-spacing:.28em;text-transform:uppercase;color:var(--sol);margin-bottom:.55rem;} .lbl{font-family:var(--fm);font-size:.62rem;letter-spacing:.28em;text-transform:uppercase;color:var(--sol);margin-bottom:.55rem;}
.sh{font-family:var(--fd);font-weight:700;font-size:clamp(1.65rem,3.4vw,2.5rem);letter-spacing:.06em;color:var(--t1);margin-bottom:.85rem;} .sh{font-family:var(--fd);font-weight:700;font-size:clamp(1.65rem,3.4vw,2.5rem);letter-spacing:.06em;color:var(--t1);margin-bottom:.85rem;}
.sh span{color:var(--sol);} .sh span{color:var(--sol);}
.sb{font-size:.96rem;color:var(--t2);max-width:500px;line-height:1.82;} .sb{font-size:.96rem;color:var(--t2);max-width:500px;line-height:1.82;}
/* ═══════════════════════════════════════════════
REVEAL
═══════════════════════════════════════════════ */
.rev{opacity:0;transform:translateY(26px);transition:opacity .65s var(--ease),transform .65s var(--ease);} .rev{opacity:0;transform:translateY(26px);transition:opacity .65s var(--ease),transform .65s var(--ease);}
.rev.in{opacity:1;transform:translateY(0);} .rev.in{opacity:1;transform:translateY(0);}
.d1{transition-delay:.08s;}.d2{transition-delay:.16s;}.d3{transition-delay:.24s;}.d4{transition-delay:.32s;} .d1{transition-delay:.08s;}.d2{transition-delay:.16s;}.d3{transition-delay:.24s;}.d4{transition-delay:.32s;}
/* ═══════════════════════════════════════════════ /* ═══ HERO ═══ */
HERO
═══════════════════════════════════════════════ */
#home{ #home{
min-height:100vh;display:flex;align-items:center;justify-content:center; min-height:100vh;display:flex;align-items:center;justify-content:center;
padding:calc(var(--nh) + 90px) 5vw 130px;text-align:center; padding:calc(var(--nh) + 90px) 5vw 130px;text-align:center;
position:relative;overflow:hidden; position:relative;overflow:hidden;
} }
/* dot grid */
#home::before{ #home::before{
content:'';position:absolute;inset:0; content:'';position:absolute;inset:0;
background-image:radial-gradient(rgba(255,148,32,.14) 1px,transparent 1px); background-image:radial-gradient(rgba(255,148,32,.14) 1px,transparent 1px);
background-size:42px 42px;z-index:1;pointer-events:none; background-size:42px 42px;z-index:1;pointer-events:none;
mask-image:radial-gradient(ellipse 80% 80% at 50% 50%,black 30%,transparent 100%); mask-image:radial-gradient(ellipse 80% 80% at 50% 50%,black 30%,transparent 100%);
} }
/* bottom fade */
#home::after{content:'';position:absolute;bottom:0;left:0;right:0;height:220px;background:linear-gradient(transparent,var(--void));z-index:2;pointer-events:none;} #home::after{content:'';position:absolute;bottom:0;left:0;right:0;height:220px;background:linear-gradient(transparent,var(--void));z-index:2;pointer-events:none;}
/* concentric rings */
.rings{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:1;} .rings{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:1;}
.ring{position:absolute;border-radius:50%;border:1px solid rgba(255,148,32,.06);top:50%;left:50%;transform:translate(-50%,-50%);animation:pulse-ring 8s ease-in-out infinite;} .ring{position:absolute;border-radius:50%;border:1px solid rgba(255,148,32,.06);top:50%;left:50%;transform:translate(-50%,-50%);animation:pulse-ring 8s ease-in-out infinite;}
.ring:nth-child(1){width:340px;height:340px;animation-delay:0s;} .ring:nth-child(1){width:340px;height:340px;animation-delay:0s;}
.ring:nth-child(2){width:540px;height:540px;animation-delay:1.5s;border-color:rgba(255,148,32,.04);} .ring:nth-child(2){width:540px;height:540px;animation-delay:1.5s;border-color:rgba(255,148,32,.04);}
.ring:nth-child(3){width:740px;height:740px;animation-delay:3s;border-color:rgba(255,148,32,.025);} .ring:nth-child(3){width:740px;height:740px;animation-delay:3s;border-color:rgba(255,148,32,.025);}
/* glow blob */
.glow{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:320px;height:320px;border-radius:50%;background:radial-gradient(circle,rgba(255,160,40,.11) 0%,rgba(255,90,10,.04) 40%,transparent 70%);filter:blur(8px);animation:pulse-ring 6s ease-in-out infinite;} .glow{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:320px;height:320px;border-radius:50%;background:radial-gradient(circle,rgba(255,160,40,.11) 0%,rgba(255,90,10,.04) 40%,transparent 70%);filter:blur(8px);animation:pulse-ring 6s ease-in-out infinite;}
@keyframes pulse-ring{0%,100%{opacity:.7;transform:translate(-50%,-50%) scale(1);}50%{opacity:1;transform:translate(-50%,-50%) scale(1.06);}} @keyframes pulse-ring{0%,100%{opacity:.7;transform:translate(-50%,-50%) scale(1);}50%{opacity:1;transform:translate(-50%,-50%) scale(1.06);}}
@@ -206,154 +179,79 @@
margin-bottom:1rem;animation:fadeup .8s .15s both; margin-bottom:1rem;animation:fadeup .8s .15s both;
} }
.hero-ascii{ .hero-ascii{
font-family:var(--fm); font-family:var(--fm);font-size:clamp(0.52rem,1.8vw,1.35rem);line-height:1.25;letter-spacing:0;white-space:pre;display:inline-block;text-align:left;color:var(--sol);
font-size:clamp(0.52rem,1.8vw,1.35rem); text-shadow:0 0 40px rgba(255,148,32,0.5),0 0 80px rgba(255,90,10,0.18);margin-bottom:1rem;animation:fadeup 0.8s 0.15s both;
line-height:1.25;
letter-spacing:0;
white-space:pre;
display:inline-block;
text-align:left;
color:var(--sol);
text-shadow:0 0 40px rgba(255,148,32,0.5),0 0 80px rgba(255,90,10,0.18);
margin-bottom:1rem;
animation:fadeup 0.8s 0.15s both;
} }
.flk{color:var(--sol);animation:flicker 9s ease-in-out infinite;} .flk{color:var(--sol);animation:flicker 9s ease-in-out infinite;}
@keyframes flicker{0%,93%,95.5%,98%,100%{opacity:1;}94%{opacity:.35;}96%{opacity:.85;}99%{opacity:.25;}} @keyframes flicker{0%,93%,95.5%,98%,100%{opacity:1;}94%{opacity:.35;}96%{opacity:.85;}99%{opacity:.25;}}
.hero-tagline{ .hero-tagline{
font-family:var(--fm);font-size:clamp(.58rem,1.8vw,.85rem);letter-spacing:clamp(.1em,.22em,.22em);text-transform:uppercase; font-family:var(--fm);font-size:clamp(.58rem,1.8vw,.85rem);letter-spacing:clamp(.1em,.22em,.22em);text-transform:uppercase;
color:var(--t3);margin-bottom:1.6rem;animation:fadeup .8s .25s both; color:var(--t3);margin-bottom:1.6rem;animation:fadeup .8s .25s both;padding:0 1rem;
padding:0 1rem;
} }
.hero-tagline em{color:var(--sol);font-style:normal;} .hero-tagline em{color:var(--sol);font-style:normal;}
.hero-desc{ .hero-desc{font-size:1.05rem;color:var(--t2);max-width:580px;margin:0 auto 2.8rem;line-height:1.88;animation:fadeup .8s .35s both;}
font-size:1.05rem;color:var(--t2);max-width:580px;margin:0 auto 2.8rem;
line-height:1.88;animation:fadeup .8s .35s both;
}
.hero-desc strong{color:var(--t1);font-weight:500;} .hero-desc strong{color:var(--t1);font-weight:500;}
.hero-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap;animation:fadeup .8s .45s both;} .hero-cta{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap;animation:fadeup .8s .45s both;}
/* voice waveform — scaleY() only, no height changes → zero layout reflow/wobble */
.wave{display:flex;align-items:center;gap:3px;margin:3.2rem auto 0;width:fit-content;height:44px;animation:fadeup .8s .55s both;} .wave{display:flex;align-items:center;gap:3px;margin:3.2rem auto 0;width:fit-content;height:44px;animation:fadeup .8s .55s both;}
.wb{width:3px;height:100%;background:var(--sol);border-radius:2px;opacity:.45;transform-origin:center;transform:scaleY(.08);animation:wa var(--d,1s) ease-in-out infinite var(--dl,0s);will-change:transform,opacity;} .wb{width:3px;height:100%;background:var(--sol);border-radius:2px;opacity:.45;transform-origin:center;transform:scaleY(.08);animation:wa var(--d,1s) ease-in-out infinite var(--dl,0s);will-change:transform,opacity;}
@keyframes wa{0%,100%{transform:scaleY(.08);opacity:.2;}50%{transform:scaleY(var(--s,.55));opacity:.75;}} @keyframes wa{0%,100%{transform:scaleY(.08);opacity:.2;}50%{transform:scaleY(var(--s,.55));opacity:.75;}}
/* ─ SCROLL CUE ─ .scroll-cue{position:absolute;bottom:40px;left:50%;margin-left:-24px;z-index:3;display:flex;flex-direction:column;align-items:center;gap:6px;font-family:var(--fm);font-size:.58rem;letter-spacing:.22em;text-transform:uppercase;color:var(--t3);width:48px;animation:fadeup 1s 1.1s both;}
Fix: no transform on parent use margin-left trick to centre .scroll-arr{width:16px;height:16px;border-right:1px solid var(--t3);border-bottom:1px solid var(--t3);transform:rotate(45deg);animation:arr-bob 2s ease-in-out infinite;will-change:transform;}
so child transform animation doesn't cause layout wobble */ @keyframes arr-bob{0%,100%{transform:rotate(45deg) translate(0,0);}50%{transform:rotate(45deg) translate(3px,3px);}}
.scroll-cue{
position:absolute;
bottom:40px;
left:50%;
margin-left:-24px; /* half of its natural width so it centres without transform */
z-index:3;
display:flex;flex-direction:column;align-items:center;gap:6px;
font-family:var(--fm);font-size:.58rem;letter-spacing:.22em;text-transform:uppercase;color:var(--t3);
width:48px; /* fixed width so margin-left works */
animation:fadeup 1s 1.1s both;
}
.scroll-arr{
width:16px;height:16px;
border-right:1px solid var(--t3);
border-bottom:1px solid var(--t3);
transform:rotate(45deg);
/* Only animates within its own stacking context no parent transform interference */
animation:arr-bob 2s ease-in-out infinite;
will-change:transform;
}
@keyframes arr-bob{
0%,100%{transform:rotate(45deg) translate(0,0);}
50% {transform:rotate(45deg) translate(3px,3px);}
}
@keyframes fadeup{from{opacity:0;transform:translateY(22px);}to{opacity:1;transform:translateY(0);}} @keyframes fadeup{from{opacity:0;transform:translateY(22px);}to{opacity:1;transform:translateY(0);}}
/* ═══════════════════════════════════════════════ /* ═══ MARQUEE ═══ */
MARQUEE — scrolling voice commands / social proof #proof{padding:70px 0;background:linear-gradient(to bottom,var(--void),var(--deep) 30%,var(--deep) 70%,var(--void));overflow:hidden;position:relative;z-index:2;}
═══════════════════════════════════════════════ */
#proof{
padding:70px 0;
background:linear-gradient(to bottom,var(--void),var(--deep) 30%,var(--deep) 70%,var(--void));
overflow:hidden;position:relative;z-index:2;
}
.proof-label{text-align:center;margin-bottom:2rem;} .proof-label{text-align:center;margin-bottom:2rem;}
.marquee-wrap{display:flex;flex-direction:column;gap:1rem;overflow:hidden;} .marquee-wrap{display:flex;flex-direction:column;gap:1rem;overflow:hidden;}
.marquee-track{display:flex;gap:1rem;width:max-content;animation:marquee-l var(--spd,38s) linear infinite;} .marquee-track{display:flex;gap:1rem;width:max-content;animation:marquee-l var(--spd,38s) linear infinite;}
.marquee-track.rev-dir{animation-direction:reverse;} .marquee-track.rev-dir{animation-direction:reverse;}
.marquee-wrap:hover .marquee-track{animation-play-state:paused;} .marquee-wrap:hover .marquee-track{animation-play-state:paused;}
@keyframes marquee-l{from{transform:translateX(0);}to{transform:translateX(-50%);}} @keyframes marquee-l{from{transform:translateX(0);}to{transform:translateX(-50%);}}
.mq-card{display:flex;align-items:center;gap:12px;padding:12px 18px;border-radius:10px;background:var(--card);border:1px solid var(--cb);white-space:nowrap;flex-shrink:0;transition:border-color .2s;}
.mq-card{
display:flex;align-items:center;gap:12px;
padding:12px 18px;border-radius:10px;
background:var(--card);border:1px solid var(--cb);
white-space:nowrap;flex-shrink:0;
transition:border-color .2s;
}
.mq-card:hover{border-color:var(--sr);} .mq-card:hover{border-color:var(--sr);}
.mq-icon{font-size:1rem;flex-shrink:0;} .mq-icon{font-size:1rem;flex-shrink:0;}
.mq-cmd{font-family:var(--fm);font-size:.74rem;color:var(--tc);} .mq-cmd{font-family:var(--fm);font-size:.74rem;color:var(--tc);}
.mq-cmd .p{color:var(--sol);margin-right:6px;} .mq-cmd .p{color:var(--sol);margin-right:6px;}
.mq-result{font-family:var(--fm);font-size:.68rem;color:var(--t3);margin-left:4px;} .mq-result{font-family:var(--fm);font-size:.68rem;color:var(--t3);margin-left:4px;}
/* ═══════════════════════════════════════════════ /* ═══ FEATURES ═══ */
FEATURES
═══════════════════════════════════════════════ */
#features{padding:110px 0;} #features{padding:110px 0;}
.fh{text-align:center;margin-bottom:60px;} .fh{text-align:center;margin-bottom:60px;}
.fh .sb{margin:0 auto;} .fh .sb{margin:0 auto;}
/* asymmetric bento grid */
.fg{display:grid;grid-template-columns:repeat(12,1fr);gap:1.1rem;} .fg{display:grid;grid-template-columns:repeat(12,1fr);gap:1.1rem;}
.f7{grid-column:span 7;} .f7{grid-column:span 7;}.f5{grid-column:span 5;}.f4{grid-column:span 4;}
.f5{grid-column:span 5;}
.f4{grid-column:span 4;}
@media(max-width:900px){.f7,.f5,.f4{grid-column:span 12;}} @media(max-width:900px){.f7,.f5,.f4{grid-column:span 12;}}
@media(min-width:901px) and (max-width:1060px){.f7{grid-column:span 6;}.f5{grid-column:span 6;}.f4{grid-column:span 6;}} @media(min-width:901px) and (max-width:1060px){.f7{grid-column:span 6;}.f5{grid-column:span 6;}.f4{grid-column:span 6;}}
.fc{background:var(--card);border:1px solid var(--cb);border-radius:var(--rc);padding:1.9rem 1.9rem 2.1rem;position:relative;overflow:hidden;transition:border-color .28s,box-shadow .28s,transform .28s;backdrop-filter:blur(4px);}
.fc{
background:var(--card);border:1px solid var(--cb);border-radius:var(--rc);
padding:1.9rem 1.9rem 2.1rem;position:relative;overflow:hidden;
transition:border-color .28s,box-shadow .28s,transform .28s;backdrop-filter:blur(4px);
}
.fc::before{content:'';position:absolute;top:0;left:12%;right:12%;height:1px;background:linear-gradient(90deg,transparent,var(--sr),transparent);opacity:0;transition:opacity .28s;} .fc::before{content:'';position:absolute;top:0;left:12%;right:12%;height:1px;background:linear-gradient(90deg,transparent,var(--sr),transparent);opacity:0;transition:opacity .28s;}
.fc:hover{border-color:var(--cbh);box-shadow:0 14px 48px rgba(0,0,0,.45),0 0 26px var(--sp);transform:translateY(-3px);} .fc:hover{border-color:var(--cbh);box-shadow:0 14px 48px rgba(0,0,0,.45),0 0 26px var(--sp);transform:translateY(-3px);}
.fc:hover::before{opacity:1;} .fc:hover::before{opacity:1;}
.fc-blob{position:absolute;top:-50px;right:-50px;width:150px;height:150px;border-radius:50%;pointer-events:none;opacity:.05;filter:blur(40px);transition:opacity .28s;} .fc-blob{position:absolute;top:-50px;right:-50px;width:150px;height:150px;border-radius:50%;pointer-events:none;opacity:.05;filter:blur(40px);transition:opacity .28s;}
.fc:hover .fc-blob{opacity:.13;} .fc:hover .fc-blob{opacity:.13;}
.fc-ico{width:42px;height:42px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:1.15rem;margin-bottom:1rem;} .fc-ico{width:42px;height:42px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:1.15rem;margin-bottom:1rem;}
.ico-o{background:rgba(255,148,32,.08);border:1px solid rgba(255,148,32,.2);} .ico-o{background:rgba(255,148,32,.08);border:1px solid rgba(255,148,32,.2);}
.ico-c{background:rgba(77,222,255,.07);border:1px solid rgba(77,222,255,.18);} .ico-c{background:rgba(77,222,255,.07);border:1px solid rgba(77,222,255,.18);}
.fc-title{font-family:var(--fd);font-size:.92rem;font-weight:600;letter-spacing:.04em;color:var(--t1);margin-bottom:.5rem;} .fc-title{font-family:var(--fd);font-size:.92rem;font-weight:600;letter-spacing:.04em;color:var(--t1);margin-bottom:.5rem;}
.fc-body{font-size:.86rem;color:var(--t2);line-height:1.76;} .fc-body{font-size:.86rem;color:var(--t2);line-height:1.76;}
.fc-tag{display:inline-block;margin-top:1rem;padding:3px 10px;border-radius:999px;font-family:var(--fm);font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;} .fc-tag{display:inline-block;margin-top:1rem;padding:3px 10px;border-radius:999px;font-family:var(--fm);font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;}
.tag-o{color:var(--sol);background:rgba(255,148,32,.08);border:1px solid var(--cb);} .tag-o{color:var(--sol);background:rgba(255,148,32,.08);border:1px solid var(--cb);}
.tag-c{color:var(--ice);background:rgba(77,222,255,.07);border:1px solid rgba(77,222,255,.15);} .tag-c{color:var(--ice);background:rgba(77,222,255,.07);border:1px solid rgba(77,222,255,.15);}
.cmd-row{display:flex;align-items:center;gap:9px;margin-top:.85rem;padding:8px 13px;background:rgba(0,0,0,.38);border:1px solid var(--t4);border-radius:7px;font-family:var(--fm);font-size:.73rem;color:var(--tc);} .cmd-row{display:flex;align-items:center;gap:9px;margin-top:.85rem;padding:8px 13px;background:rgba(0,0,0,.38);border:1px solid var(--t4);border-radius:7px;font-family:var(--fm);font-size:.73rem;color:var(--tc);}
.cmd-row .p{color:var(--sol);flex-shrink:0;} .cmd-row .p{color:var(--sol);flex-shrink:0;}
.mpill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:6px;background:rgba(77,222,255,.05);border:1px solid rgba(77,222,255,.13);font-family:var(--fm);font-size:.63rem;color:var(--ice);letter-spacing:.07em;margin-top:.55rem;margin-right:.35rem;} .mpill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:6px;background:rgba(77,222,255,.05);border:1px solid rgba(77,222,255,.13);font-family:var(--fm);font-size:.63rem;color:var(--ice);letter-spacing:.07em;margin-top:.55rem;margin-right:.35rem;}
.mpill .gd{width:5px;height:5px;border-radius:50%;background:var(--grn);box-shadow:0 0 5px var(--grn);} .mpill .gd{width:5px;height:5px;border-radius:50%;background:var(--grn);box-shadow:0 0 5px var(--grn);}
/* ═══════════════════════════════════════════════ /* ═══ HOW IT WORKS ═══ */
HOW IT WORKS #how{padding:110px 0;background:linear-gradient(to bottom,var(--void),var(--deep) 50%,var(--void));}
═══════════════════════════════════════════════ */
#how{
padding:110px 0;
background:linear-gradient(to bottom,var(--void),var(--deep) 50%,var(--void));
}
.how-hd{text-align:center;margin-bottom:72px;} .how-hd{text-align:center;margin-bottom:72px;}
.how-hd .sb{margin:0 auto;} .how-hd .sb{margin:0 auto;}
.flow{display:flex;align-items:flex-start;justify-content:center;flex-wrap:wrap;gap:0;} .flow{display:flex;align-items:flex-start;justify-content:center;flex-wrap:wrap;gap:0;}
.fs{display:flex;flex-direction:column;align-items:center;text-align:center;width:185px;position:relative;} .fs{display:flex;flex-direction:column;align-items:center;text-align:center;width:185px;position:relative;}
.fs:not(:last-child)::after{content:'→';position:absolute;right:-22px;top:17px;color:var(--sr);font-size:1.1rem;font-family:var(--fm);} .fs:not(:last-child)::after{content:'→';position:absolute;right:-22px;top:17px;color:var(--sr);font-size:1.1rem;font-family:var(--fm);}
@@ -361,33 +259,24 @@
.fs:hover .fi{border-color:var(--sr);box-shadow:0 0 28px var(--sg);transform:translateY(-3px);} .fs:hover .fi{border-color:var(--sr);box-shadow:0 0 28px var(--sg);transform:translateY(-3px);}
.fl{font-family:var(--fm);font-size:.68rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--t1);margin-bottom:.3rem;} .fl{font-family:var(--fm);font-size:.68rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--t1);margin-bottom:.3rem;}
.fn{font-size:.77rem;color:var(--t3);line-height:1.5;} .fn{font-size:.77rem;color:var(--t3);line-height:1.5;}
@media(max-width:680px){.fs::after{display:none;}.flow{gap:1.6rem;}} @media(max-width:680px){.fs::after{display:none;}.flow{gap:1.6rem;}}
/* ═══════════════════════════════════════════════ /* ═══ MODEL STACK ═══ */
MODEL STACK
═══════════════════════════════════════════════ */
#models{padding:110px 0;} #models{padding:110px 0;}
.mh{text-align:center;margin-bottom:60px;} .mh{text-align:center;margin-bottom:60px;}
.mh .sb{margin:0 auto;} .mh .sb{margin:0 auto;}
.mg{max-width:1060px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:1.3rem;} .mg{max-width:1060px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:1.3rem;}
@media(max-width:700px){.mg{grid-template-columns:1fr;}} @media(max-width:700px){.mg{grid-template-columns:1fr;}}
.mcat{border-radius:var(--rc);overflow:hidden;border:1px solid var(--cb);background:var(--card);position:relative;} .mcat{border-radius:var(--rc);overflow:hidden;border:1px solid var(--cb);background:var(--card);position:relative;}
.mc-hd{display:flex;align-items:center;gap:10px;padding:13px 19px;border-bottom:1px solid var(--cb);} .mc-hd{display:flex;align-items:center;gap:10px;padding:13px 19px;border-bottom:1px solid var(--cb);}
.mc-hd.loc{background:rgba(33,212,94,.05);} .mc-hd.loc{background:rgba(33,212,94,.05);}
.mc-hd.cld{background:rgba(77,222,255,.05);} .mc-hd.cld{background:rgba(77,222,255,.05);}
.mcd{width:7px;height:7px;border-radius:50%;flex-shrink:0;} .mcd{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.mcd.loc{background:var(--grn);box-shadow:0 0 7px var(--grn);animation:blink 2.2s ease-in-out infinite;} .mcd.loc{background:var(--grn);box-shadow:0 0 7px var(--grn);animation:blink 2.2s ease-in-out infinite;}
.mcd.cld{background:var(--ice);box-shadow:0 0 7px var(--ice);animation:blink 2.8s ease-in-out infinite;} .mcd.cld{background:var(--ice);box-shadow:0 0 7px var(--ice);animation:blink 2.8s ease-in-out infinite;}
.mcl{font-family:var(--fd);font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;} .mcl{font-family:var(--fd);font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;}
.mcl.loc{color:var(--grn);}.mcl.cld{color:var(--ice);} .mcl.loc{color:var(--grn);}.mcl.cld{color:var(--ice);}
.mcn{font-family:var(--fm);font-size:.6rem;letter-spacing:.08em;color:var(--t3);margin-left:auto;} .mcn{font-family:var(--fm);font-size:.6rem;letter-spacing:.08em;color:var(--t3);margin-left:auto;}
.mth{display:grid;grid-template-columns:2fr 1.3fr 2.4fr;padding:7px 18px;background:rgba(255,255,255,.02);border-bottom:1px solid var(--t4);} .mth{display:grid;grid-template-columns:2fr 1.3fr 2.4fr;padding:7px 18px;background:rgba(255,255,255,.02);border-bottom:1px solid var(--t4);}
.mthc{font-family:var(--fm);font-size:.56rem;letter-spacing:.18em;text-transform:uppercase;color:var(--t3);} .mthc{font-family:var(--fm);font-size:.56rem;letter-spacing:.18em;text-transform:uppercase;color:var(--t3);}
.mtr{display:grid;grid-template-columns:2fr 1.3fr 2.4fr;padding:12px 18px;border-bottom:1px solid var(--t4);transition:background .2s;align-items:center;} .mtr{display:grid;grid-template-columns:2fr 1.3fr 2.4fr;padding:12px 18px;border-bottom:1px solid var(--t4);transition:background .2s;align-items:center;}
@@ -395,59 +284,29 @@
.mtr:hover{background:rgba(255,255,255,.02);} .mtr:hover{background:rgba(255,255,255,.02);}
.mtc{font-family:var(--fm);font-size:.73rem;color:var(--t2);} .mtc{font-family:var(--fm);font-size:.73rem;color:var(--t2);}
.mtc.nm{color:var(--tc);font-weight:500;} .mtc.nm{color:var(--tc);font-weight:500;}
.mcft{padding:9px 18px;font-family:var(--fm);font-size:.6rem;letter-spacing:.08em;color:var(--t3);border-top:1px solid var(--t4);} .mcft{padding:9px 18px;font-family:var(--fm);font-size:.6rem;letter-spacing:.08em;color:var(--t3);border-top:1px solid var(--t4);}
.mcft a{color:var(--ice);transition:opacity .2s;}.mcft a:hover{opacity:.65;} .mcft a{color:var(--ice);transition:opacity .2s;}.mcft a:hover{opacity:.65;}
/* shared row styling for STT/TTS (dimmed = same as local) */
.shared-row{background:rgba(33,212,94,.03);} .shared-row{background:rgba(33,212,94,.03);}
.shared-row .mtc{opacity:.55;} .shared-row .mtc{opacity:.55;}
/* BADGE */
.bd{display:inline-block;padding:2px 8px;border-radius:4px;font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;} .bd{display:inline-block;padding:2px 8px;border-radius:4px;font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;}
.bd-loc{background:rgba(33,212,94,.1);color:var(--grn);border:1px solid rgba(33,212,94,.24);} .bd-loc{background:rgba(33,212,94,.1);color:var(--grn);border:1px solid rgba(33,212,94,.24);}
.bd-cld{background:rgba(77,222,255,.09);color:var(--ice);border:1px solid rgba(77,222,255,.22);} .bd-cld{background:rgba(77,222,255,.09);color:var(--ice);border:1px solid rgba(77,222,255,.22);}
.bd-vis{background:rgba(255,148,32,.1);color:var(--sol);border:1px solid rgba(255,148,32,.24);} .bd-vis{background:rgba(255,148,32,.1);color:var(--sol);border:1px solid rgba(255,148,32,.24);}
.bd-stt{background:rgba(180,125,255,.1);color:var(--pur);border:1px solid rgba(180,125,255,.24);} .bd-stt{background:rgba(180,125,255,.1);color:var(--pur);border:1px solid rgba(180,125,255,.24);}
.bd-tts{background:rgba(255,111,168,.09);color:var(--pink);border:1px solid rgba(255,111,168,.22);} .bd-tts{background:rgba(255,111,168,.09);color:var(--pink);border:1px solid rgba(255,111,168,.22);}
/* ─── COMING SOON OVERLAY ─── */
.soon-wrap{position:relative;} .soon-wrap{position:relative;}
.soon-overlay{ .soon-overlay{position:absolute;inset:-1px;border-radius:var(--rc);background:rgba(8,12,26,.78);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;z-index:10;border:1px solid rgba(255,255,255,.06);}
position:absolute;inset:-1px; /* cover border too */ .soon-pill{display:inline-flex;align-items:center;gap:8px;padding:8px 20px;border-radius:999px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);font-family:var(--fm);font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.5);}
border-radius:var(--rc);
background:rgba(8,12,26,.78);
backdrop-filter:blur(6px);
-webkit-backdrop-filter:blur(6px);
display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
z-index:10;
border:1px solid rgba(255,255,255,.06);
}
.soon-pill{
display:inline-flex;align-items:center;gap:8px;
padding:8px 20px;border-radius:999px;
background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);
font-family:var(--fm);font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.5);
}
.soon-pill .sd{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.3);} .soon-pill .sd{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.3);}
.soon-sub{font-family:var(--fm);font-size:.6rem;letter-spacing:.12em;color:rgba(255,255,255,.25);text-transform:uppercase;} .soon-sub{font-family:var(--fm);font-size:.6rem;letter-spacing:.12em;color:rgba(255,255,255,.25);text-transform:uppercase;}
/* ═══════════════════════════════════════════════ /* ═══ INSTALL ═══ */
INSTALL #install{padding:110px 0;background:linear-gradient(to bottom,var(--void),var(--deep) 40%,var(--deep) 60%,var(--void));}
═══════════════════════════════════════════════ */
#install{
padding:110px 0;
background:linear-gradient(to bottom,var(--void),var(--deep) 40%,var(--deep) 60%,var(--void));
}
.ih{text-align:center;margin-bottom:56px;} .ih{text-align:center;margin-bottom:56px;}
.ih .sb{margin:0 auto;} .ih .sb{margin:0 auto;}
.ig{max-width:980px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:1.3rem;} .ig{max-width:980px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:1.3rem;}
@media(max-width:700px){.ig{grid-template-columns:1fr;}} @media(max-width:700px){.ig{grid-template-columns:1fr;}}
.icard{display:flex;flex-direction:column;} .icard{display:flex;flex-direction:column;}
/* coloured header above each terminal */
.ich{display:flex;align-items:center;gap:11px;padding:13px 17px;border-radius:10px 10px 0 0;border:1px solid;border-bottom:none;} .ich{display:flex;align-items:center;gap:11px;padding:13px 17px;border-radius:10px 10px 0 0;border:1px solid;border-bottom:none;}
.ich.loc{background:rgba(33,212,94,.06);border-color:rgba(33,212,94,.22);} .ich.loc{background:rgba(33,212,94,.06);border-color:rgba(33,212,94,.22);}
.ich.cld{background:rgba(77,222,255,.06);border-color:rgba(77,222,255,.22);} .ich.cld{background:rgba(77,222,255,.06);border-color:rgba(77,222,255,.22);}
@@ -458,9 +317,7 @@
.icht.loc{color:var(--grn);}.icht.cld{color:var(--ice);} .icht.loc{color:var(--grn);}.icht.cld{color:var(--ice);}
.ichs{font-family:var(--fm);font-size:.6rem;letter-spacing:.06em;color:var(--t3);margin-top:1px;} .ichs{font-family:var(--fm);font-size:.6rem;letter-spacing:.06em;color:var(--t3);margin-top:1px;}
.ichr{font-family:var(--fm);font-size:.6rem;letter-spacing:.08em;color:var(--t3);margin-left:auto;white-space:nowrap;} .ichr{font-family:var(--fm);font-size:.6rem;letter-spacing:.08em;color:var(--t3);margin-left:auto;white-space:nowrap;}
.term{background:#020510;border:1px solid;overflow:hidden;border-radius:0 0 0 0;}
/* terminal widget */
.term{background:#020510;border:1px solid;overflow:hidden;border-radius:0 0 10px 10px;}
.icard .ich.loc ~ .term{border-color:rgba(33,212,94,.22);} .icard .ich.loc ~ .term{border-color:rgba(33,212,94,.22);}
.icard .ich.cld ~ .term{border-color:rgba(77,222,255,.22);} .icard .ich.cld ~ .term{border-color:rgba(77,222,255,.22);}
.tbar{display:flex;align-items:center;gap:5px;padding:9px 15px;background:rgba(255,255,255,.025);border-bottom:1px solid rgba(255,255,255,.04);} .tbar{display:flex;align-items:center;gap:5px;padding:9px 15px;background:rgba(255,255,255,.025);border-bottom:1px solid rgba(255,255,255,.04);}
@@ -473,12 +330,69 @@
.tcmd{font-family:var(--fm);font-size:.78rem;color:var(--tc);word-break:break-all;} .tcmd{font-family:var(--fm);font-size:.78rem;color:var(--tc);word-break:break-all;}
.tcur{display:inline-block;width:7px;height:13px;background:var(--sol);margin-left:2px;vertical-align:middle;animation:cblink 1.1s step-start infinite;} .tcur{display:inline-block;width:7px;height:13px;background:var(--sol);margin-left:2px;vertical-align:middle;animation:cblink 1.1s step-start infinite;}
@keyframes cblink{0%,100%{opacity:1;}50%{opacity:0;}} @keyframes cblink{0%,100%{opacity:1;}50%{opacity:0;}}
.cpybtn{flex-shrink:0;display:flex;align-items:center;gap:6px;padding:6px 13px;border-radius:6px;background:rgba(255,148,32,.08);border:1px solid var(--cb);font-family:var(--fm);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--sol);cursor:pointer;transition:all var(--ts) var(--ease);white-space:nowrap;} .cpybtn{flex-shrink:0;display:flex;align-items:center;gap:6px;padding:6px 13px;border-radius:6px;background:rgba(255,148,32,.08);border:1px solid var(--cb);font-family:var(--fm);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--sol);cursor:pointer;transition:all var(--ts) var(--ease);white-space:nowrap;}
.cpybtn:hover{background:rgba(255,148,32,.18);border-color:var(--sr);box-shadow:0 0 12px var(--sg);} .cpybtn:hover{background:rgba(255,148,32,.18);border-color:var(--sr);box-shadow:0 0 12px var(--sg);}
.cpybtn.ok{background:rgba(33,212,94,.1);border-color:rgba(33,212,94,.34);color:var(--grn);} .cpybtn.ok{background:rgba(33,212,94,.1);border-color:rgba(33,212,94,.34);color:var(--grn);}
/* model pills below each card */ /* ── download divider ── */
.dl-divider{
display:flex;align-items:center;gap:10px;
padding:0 1.5rem;
border-left:1px solid rgba(33,212,94,.22);
border-right:1px solid rgba(33,212,94,.22);
background:rgba(0,0,0,.25);
}
.icard .ich.cld ~ .term + .dl-divider{
border-left-color:rgba(77,222,255,.22);
border-right-color:rgba(77,222,255,.22);
}
.dl-divider-line{flex:1;height:1px;}
.dl-divider-line.loc{background:linear-gradient(90deg,transparent,rgba(33,212,94,.18),transparent);}
.dl-divider-line.cld{background:linear-gradient(90deg,transparent,rgba(77,222,255,.18),transparent);}
.dl-divider-text{
font-family:var(--fm);font-size:.58rem;letter-spacing:.22em;text-transform:uppercase;
color:var(--t3);white-space:nowrap;padding:8px 0;
}
/* ── GUI download row ── */
.dl-row{
display:flex;align-items:center;justify-content:space-between;gap:1rem;
padding:1rem 1.5rem 1.2rem;
border:1px solid;
border-top:none;
border-radius:0 0 10px 10px;
background:rgba(0,0,0,.32);
}
.dl-row.loc{border-color:rgba(33,212,94,.22);}
.dl-row.cld{border-color:rgba(77,222,255,.22);}
.dl-info{display:flex;flex-direction:column;gap:3px;}
.dl-title{font-family:var(--fd);font-size:.78rem;font-weight:700;letter-spacing:.05em;color:var(--t1);}
.dl-sub{font-family:var(--fm);font-size:.6rem;letter-spacing:.07em;color:var(--t3);}
.dl-btn{
display:inline-flex;align-items:center;gap:7px;
padding:8px 16px;border-radius:7px;
font-family:var(--fm);font-size:.66rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
cursor:pointer;border:1px solid;transition:all var(--ts) var(--ease);white-space:nowrap;text-decoration:none;
}
.dl-btn.loc{
color:var(--grn);background:rgba(33,212,94,.07);border-color:rgba(33,212,94,.26);
}
.dl-btn.loc:hover{background:rgba(33,212,94,.18);border-color:rgba(33,212,94,.55);box-shadow:0 0 16px rgba(33,212,94,.22);transform:translateY(-1px);}
.dl-btn.cld{
color:var(--ice);background:rgba(77,222,255,.06);border-color:rgba(77,222,255,.24);
}
.dl-btn.cld:hover{background:rgba(77,222,255,.16);border-color:rgba(77,222,255,.52);box-shadow:0 0 16px rgba(77,222,255,.2);transform:translateY(-1px);}
/* badges on terminal bar */
.tmode-badge{
margin-left:auto;display:inline-flex;align-items:center;gap:5px;
padding:2px 8px;border-radius:4px;
font-family:var(--fm);font-size:.54rem;letter-spacing:.14em;text-transform:uppercase;
background:rgba(255,148,32,.08);border:1px solid rgba(255,148,32,.2);color:var(--sol);
}
.imodels{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.85rem;} .imodels{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.85rem;}
.ipill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:6px;font-family:var(--fm);font-size:.63rem;letter-spacing:.07em;} .ipill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:6px;font-family:var(--fm);font-size:.63rem;letter-spacing:.07em;}
.ipill.loc{background:rgba(33,212,94,.07);border:1px solid rgba(33,212,94,.17);color:var(--grn);} .ipill.loc{background:rgba(33,212,94,.07);border:1px solid rgba(33,212,94,.17);color:var(--grn);}
@@ -486,22 +400,13 @@
.ipill .dot{width:5px;height:5px;border-radius:50%;} .ipill .dot{width:5px;height:5px;border-radius:50%;}
.ipill .dot.g{background:var(--grn);box-shadow:0 0 5px var(--grn);} .ipill .dot.g{background:var(--grn);box-shadow:0 0 5px var(--grn);}
.ipill .dot.c{background:var(--ice);box-shadow:0 0 5px var(--ice);} .ipill .dot.c{background:var(--ice);box-shadow:0 0 5px var(--ice);}
/* shared note */
.inote{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:1.4rem;font-family:var(--fm);font-size:.7rem;letter-spacing:.1em;color:var(--t3);} .inote{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:1.4rem;font-family:var(--fm);font-size:.7rem;letter-spacing:.1em;color:var(--t3);}
/* req chips */
.reqs{display:flex;flex-wrap:wrap;gap:.65rem;justify-content:center;margin-top:2rem;} .reqs{display:flex;flex-wrap:wrap;gap:.65rem;justify-content:center;margin-top:2rem;}
.rchip{display:flex;align-items:center;gap:6px;padding:6px 13px;border-radius:8px;background:var(--card);border:1px solid var(--cb);font-family:var(--fm);font-size:.68rem;letter-spacing:.07em;color:var(--t2);} .rchip{display:flex;align-items:center;gap:6px;padding:6px 13px;border-radius:8px;background:var(--card);border:1px solid var(--cb);font-family:var(--fm);font-size:.68rem;letter-spacing:.07em;color:var(--t2);}
/* ═══════════════════════════════════════════════ /* ═══ GITHUB CTA ═══ */
GITHUB CTA
═══════════════════════════════════════════════ */
#github{padding:110px 0;background:linear-gradient(to bottom,var(--void),var(--deep));} #github{padding:110px 0;background:linear-gradient(to bottom,var(--void),var(--deep));}
.ghcard{ .ghcard{max-width:800px;margin:0 auto;background:var(--card);border:1px solid var(--cb);border-radius:18px;padding:3.5rem;text-align:center;position:relative;overflow:hidden;}
max-width:800px;margin:0 auto;background:var(--card);border:1px solid var(--cb);
border-radius:18px;padding:3.5rem;text-align:center;position:relative;overflow:hidden;
}
.ghcard::before{content:'';position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent,var(--sr),transparent);} .ghcard::before{content:'';position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent,var(--sr),transparent);}
.ghcard::after{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 50% 0%,rgba(255,148,32,.05),transparent 60%);pointer-events:none;} .ghcard::after{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 50% 0%,rgba(255,148,32,.05),transparent 60%);pointer-events:none;}
.gh-ico{display:block;margin:0 auto 1.4rem;filter:drop-shadow(0 0 14px rgba(255,148,32,.25));} .gh-ico{display:block;margin:0 auto 1.4rem;filter:drop-shadow(0 0 14px rgba(255,148,32,.25));}
@@ -512,22 +417,13 @@
.gh-stat .sv{font-family:var(--fd);font-size:1.3rem;font-weight:700;color:var(--sol);display:block;} .gh-stat .sv{font-family:var(--fd);font-size:1.3rem;font-weight:700;color:var(--sol);display:block;}
.gh-stat .sl{font-family:var(--fm);font-size:.6rem;letter-spacing:.15em;text-transform:uppercase;color:var(--t3);} .gh-stat .sl{font-family:var(--fm);font-size:.6rem;letter-spacing:.15em;text-transform:uppercase;color:var(--t3);}
/* ═══════════════════════════════════════════════ /* ═══ FOOTER ═══ */
FOOTER footer{padding:42px 5vw 30px;border-top:1px solid var(--cb);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;position:relative;z-index:2;}
═══════════════════════════════════════════════ */
footer{
padding:42px 5vw 30px;border-top:1px solid var(--cb);
display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;
position:relative;z-index:2;
}
.fl2{font-family:var(--fd);font-weight:800;font-size:.95rem;letter-spacing:.2em;color:var(--sol);opacity:.55;} .fl2{font-family:var(--fd);font-weight:800;font-size:.95rem;letter-spacing:.2em;color:var(--sol);opacity:.55;}
.fc2{font-family:var(--fm);font-size:.66rem;letter-spacing:.1em;color:var(--t3);} .fc2{font-family:var(--fm);font-size:.66rem;letter-spacing:.1em;color:var(--t3);}
.fa{font-family:var(--fm);font-size:.66rem;letter-spacing:.1em;color:var(--t3);transition:color var(--ts);} .fa{font-family:var(--fm);font-size:.66rem;letter-spacing:.1em;color:var(--t3);transition:color var(--ts);}
.fa:hover{color:var(--sol);} .fa:hover{color:var(--sol);}
/* ═══════════════════════════════════════════════
RESPONSIVE
═══════════════════════════════════════════════ */
@media(max-width:768px){ @media(max-width:768px){
.nl,.nav-cta{display:none;} .nl,.nav-cta{display:none;}
.ham{display:flex;} .ham{display:flex;}
@@ -539,19 +435,14 @@
footer{flex-direction:column;align-items:center;text-align:center;} footer{flex-direction:column;align-items:center;text-align:center;}
.mth,.mtr{grid-template-columns:1.4fr 1fr;} .mth,.mtr{grid-template-columns:1.4fr 1fr;}
.mthc:last-child,.mtc:last-child{display:none;} .mthc:last-child,.mtc:last-child{display:none;}
.dl-row{flex-direction:column;align-items:flex-start;gap:.75rem;}
} }
</style> </style>
</head> </head>
<body> <body>
<!-- ══════════════════════════════════════════════
BACKGROUND PARTICLE CANVAS
══════════════════════════════════════════════ -->
<canvas id="bg"></canvas> <canvas id="bg"></canvas>
<!-- ══════════════════════════════════════════════
NAV
══════════════════════════════════════════════ -->
<nav id="nav"> <nav id="nav">
<a href="#home" class="logo"> <a href="#home" class="logo">
<div class="logo-orb"></div>SOLAR <div class="logo-orb"></div>SOLAR
@@ -576,9 +467,7 @@
<a href="#github" onclick="closeMob()">GitHub</a> <a href="#github" onclick="closeMob()">GitHub</a>
</div> </div>
<!-- ══════════════════════════════════════════════ <!-- HERO -->
HERO
══════════════════════════════════════════════ -->
<section id="home"> <section id="home">
<div class="rings"> <div class="rings">
<div class="ring"></div><div class="ring"></div><div class="ring"></div> <div class="ring"></div><div class="ring"></div><div class="ring"></div>
@@ -586,7 +475,7 @@
<div class="glow"></div> <div class="glow"></div>
<div class="hero-inner"> <div class="hero-inner">
<div class="chip"><span class="chip-dot"></span>Voice-Driven · Local First · Open-Source</div> <div class="chip"><span class="chip-dot"></span>Voice-Driven · Local or Cloud · Open-Source</div>
<pre class="hero-ascii" aria-label="SOLAR"><span class="flk"> ____ ___ _ _ ____ <pre class="hero-ascii" aria-label="SOLAR"><span class="flk"> ____ ___ _ _ ____
/ ___| / _ \ | | / \ | _ \ / ___| / _ \ | | / \ | _ \
@@ -611,7 +500,6 @@
</a> </a>
</div> </div>
<!-- voice wave decoration -->
<div class="wave" aria-hidden="true"> <div class="wave" aria-hidden="true">
<div class="wb" style="--s:.13;--d:.95s;--dl:0s"></div> <div class="wb" style="--s:.13;--d:.95s;--dl:0s"></div>
<div class="wb" style="--s:.28;--d:.8s; --dl:.08s"></div> <div class="wb" style="--s:.28;--d:.8s; --dl:.08s"></div>
@@ -629,25 +517,20 @@
</div> </div>
</div> </div>
<!-- fixed-width centred, no parent transform so child won't wobble -->
<div class="scroll-cue"> <div class="scroll-cue">
<span>Scroll</span> <span>Scroll</span>
<div class="scroll-arr"></div> <div class="scroll-arr"></div>
</div> </div>
</section> </section>
<!-- ══════════════════════════════════════════════ <!-- SOCIAL PROOF -->
SOCIAL PROOF — scrolling voice commands
══════════════════════════════════════════════ -->
<section id="proof"> <section id="proof">
<div class="proof-label rev"> <div class="proof-label rev">
<p class="lbl">// voice commands</p> <p class="lbl">// voice commands</p>
</div> </div>
<div class="marquee-wrap"> <div class="marquee-wrap">
<!-- Row 1 -->
<div class="marquee-track" style="--spd:44s"> <div class="marquee-track" style="--spd:44s">
<!-- duplicated set so the loop is seamless -->
<script> <script>
const row1=[ const row1=[
{i:'📞',c:'incoming call from Anna Müller',r:'→ Should I answer?'}, {i:'📞',c:'incoming call from Anna Müller',r:'→ Should I answer?'},
@@ -661,14 +544,12 @@
{i:'💬',c:'say good morning to Julia on discord',r:'→ Message sent'}, {i:'💬',c:'say good morning to Julia on discord',r:'→ Message sent'},
{i:'💻',c:'program a react button component',r:'→ Code generated'}, {i:'💻',c:'program a react button component',r:'→ Code generated'},
]; ];
// render twice for seamless loop
let h=''; let h='';
for(let pass=0;pass<2;pass++) for(let pass=0;pass<2;pass++)
row1.forEach(m=>{h+=`<div class="mq-card"><span class="mq-icon">${m.i}</span><div class="mq-cmd"><span class="p">You:</span>${m.c}<span class="mq-result">${m.r}</span></div></div>`;}); row1.forEach(m=>{h+=`<div class="mq-card"><span class="mq-icon">${m.i}</span><div class="mq-cmd"><span class="p">You:</span>${m.c}<span class="mq-result">${m.r}</span></div></div>`;});
document.write(h); document.write(h);
</script> </script>
</div> </div>
<!-- Row 2 (reversed) -->
<div class="marquee-track rev-dir" style="--spd:52s"> <div class="marquee-track rev-dir" style="--spd:52s">
<script> <script>
const row2=[ const row2=[
@@ -692,9 +573,7 @@
</div> </div>
</section> </section>
<!-- ══════════════════════════════════════════════ <!-- FEATURES -->
FEATURES
══════════════════════════════════════════════ -->
<section id="features"> <section id="features">
<div class="wrap"> <div class="wrap">
<div class="fh rev"> <div class="fh rev">
@@ -704,8 +583,6 @@
</div> </div>
<div class="fg"> <div class="fg">
<!-- Call handler — wide -->
<div class="fc f7 rev"> <div class="fc f7 rev">
<div class="fc-blob" style="background:var(--sol)"></div> <div class="fc-blob" style="background:var(--sol)"></div>
<div class="fc-ico ico-o">📞</div> <div class="fc-ico ico-o">📞</div>
@@ -716,7 +593,6 @@
<span class="fc-tag tag-o">Vision AI · Win32</span> <span class="fc-tag tag-o">Vision AI · Win32</span>
</div> </div>
<!-- Wake Word — narrow -->
<div class="fc f5 rev d1"> <div class="fc f5 rev d1">
<div class="fc-blob" style="background:var(--ice)"></div> <div class="fc-blob" style="background:var(--ice)"></div>
<div class="fc-ico ico-c">👂</div> <div class="fc-ico ico-c">👂</div>
@@ -725,7 +601,6 @@
<span class="fc-tag tag-c">Always On · Offline</span> <span class="fc-tag tag-c">Always On · Offline</span>
</div> </div>
<!-- Messaging -->
<div class="fc f4 rev d1"> <div class="fc f4 rev d1">
<div class="fc-blob" style="background:var(--sol)"></div> <div class="fc-blob" style="background:var(--sol)"></div>
<div class="fc-ico ico-o">💬</div> <div class="fc-ico ico-o">💬</div>
@@ -735,27 +610,24 @@
<span class="fc-tag tag-o">WhatsApp · Discord · Instagram</span> <span class="fc-tag tag-o">WhatsApp · Discord · Instagram</span>
</div> </div>
<!-- Code Gen -->
<div class="fc f4 rev d2"> <div class="fc f4 rev d2">
<div class="fc-blob" style="background:var(--sol)"></div> <div class="fc-blob" style="background:var(--sol)"></div>
<div class="fc-ico ico-o">💻</div> <div class="fc-ico ico-o">💻</div>
<div class="fc-title">Voice Code Generation</div> <div class="fc-title">Voice Code Generation</div>
<div class="fc-body">Say "code a…" and SOLAR generates it with Malicus7862 DeepSeek Coder, auto-copies to clipboard, then describes what was built.</div> <div class="fc-body">Say "code a…" and SOLAR generates it with Malicus7862 DeepSeek Coder, auto-copies to clipboard, then describes what was built.</div>
<div class="cmd-row"><span class="p">You:</span>code a python web scraper</div> <div class="cmd-row"><span class="p">You:</span>code a python web scraper</div>
<span class="fc-tag tag-o">Malicus7862 Malicus7862 DeepSeek Coder 6.7b</span> <span class="fc-tag tag-o">Malicus7862 DeepSeek Coder 6.7b</span>
</div> </div>
<!-- Window Manager -->
<div class="fc f4 rev d3"> <div class="fc f4 rev d3">
<div class="fc-blob" style="background:var(--ice)"></div> <div class="fc-blob" style="background:var(--ice)"></div>
<div class="fc-ico ico-c">🖥️</div> <div class="fc-ico ico-c">🖥️</div>
<div class="fc-title">App & Window Manager</div> <div class="fc-title">App &amp; Window Manager</div>
<div class="fc-body">Open any app or URL and move its window to any connected monitor. Multi-monitor aware, including negative-coordinate secondary screens.</div> <div class="fc-body">Open any app or URL and move its window to any connected monitor. Multi-monitor aware, including negative-coordinate secondary screens.</div>
<div class="cmd-row"><span class="p">You:</span>open youtube.com</div> <div class="cmd-row"><span class="p">You:</span>open youtube.com</div>
<span class="fc-tag tag-c">Multi-Monitor · Win32</span> <span class="fc-tag tag-c">Multi-Monitor · Win32</span>
</div> </div>
<!-- Calendar — narrow -->
<div class="fc f5 rev d1"> <div class="fc f5 rev d1">
<div class="fc-blob" style="background:var(--ice)"></div> <div class="fc-blob" style="background:var(--ice)"></div>
<div class="fc-ico ico-c">📅</div> <div class="fc-ico ico-c">📅</div>
@@ -765,7 +637,6 @@
<span class="fc-tag tag-c">Calendar · .ics</span> <span class="fc-tag tag-c">Calendar · .ics</span>
</div> </div>
<!-- Multi-model — wide -->
<div class="fc f7 rev"> <div class="fc f7 rev">
<div class="fc-blob" style="background:var(--sol)"></div> <div class="fc-blob" style="background:var(--sol)"></div>
<div class="fc-ico ico-o">🧩</div> <div class="fc-ico ico-o">🧩</div>
@@ -780,14 +651,11 @@
</div> </div>
<span class="fc-tag tag-o">Fully Local · Ollama</span> <span class="fc-tag tag-o">Fully Local · Ollama</span>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
<!-- ══════════════════════════════════════════════ <!-- HOW IT WORKS -->
HOW IT WORKS
══════════════════════════════════════════════ -->
<section id="how"> <section id="how">
<div class="wrap"> <div class="wrap">
<div class="how-hd rev"> <div class="how-hd rev">
@@ -809,7 +677,7 @@
</div> </div>
<div class="fs rev d3"> <div class="fs rev d3">
<div class="fi">🧠</div> <div class="fi">🧠</div>
<div class="fl">Route & Execute</div> <div class="fl">Route &amp; Execute</div>
<div class="fn">Intent matched — messaging, coding, calls, apps, or chat</div> <div class="fn">Intent matched — messaging, coding, calls, apps, or chat</div>
</div> </div>
<div class="fs rev d4"> <div class="fs rev d4">
@@ -821,9 +689,7 @@
</div> </div>
</section> </section>
<!-- ══════════════════════════════════════════════ <!-- MODEL STACK -->
MODEL STACK
══════════════════════════════════════════════ -->
<section id="models"> <section id="models">
<div class="wrap"> <div class="wrap">
<div class="mh rev"> <div class="mh rev">
@@ -833,7 +699,6 @@
</div> </div>
<div class="mg"> <div class="mg">
<!-- LOCAL --> <!-- LOCAL -->
<div class="mcat rev d1"> <div class="mcat rev d1">
<div class="mc-hd loc"> <div class="mc-hd loc">
@@ -873,7 +738,7 @@
</div> </div>
</div> </div>
<!-- CLOUD — with Coming Soon overlay --> <!-- CLOUD -->
<div class="soon-wrap rev d2"> <div class="soon-wrap rev d2">
<div class="mcat"> <div class="mcat">
<div class="mc-hd cld"> <div class="mc-hd cld">
@@ -913,10 +778,7 @@
</div> </div>
<div class="mcft">Powered by ollama.com cloud GPUs · <a href="https://ollama.com/library" target="_blank" rel="noopener">Browse all →</a></div> <div class="mcft">Powered by ollama.com cloud GPUs · <a href="https://ollama.com/library" target="_blank" rel="noopener">Browse all →</a></div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
@@ -944,10 +806,16 @@
</div> </div>
<div class="ichr">~20 GB VRAM</div> <div class="ichr">~20 GB VRAM</div>
</div> </div>
<!-- Terminal: no UI, terminal only -->
<div class="term"> <div class="term">
<div class="tbar"> <div class="tbar">
<span class="td td-r"></span><span class="td td-y"></span><span class="td td-g"></span> <span class="td td-r"></span><span class="td td-y"></span><span class="td td-g"></span>
<span class="tt">PowerShell — Administrator</span> <span class="tt">PowerShell — Administrator</span>
<span class="tmode-badge">
<svg width="9" height="9" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>
Terminal only · no UI
</span>
</div> </div>
<div class="tbody"> <div class="tbody">
<div class="tline"> <div class="tline">
@@ -961,6 +829,26 @@
</button> </button>
</div> </div>
</div> </div>
<!-- Divider -->
<div class="dl-divider" style="border-left:1px solid rgba(33,212,94,.22);border-right:1px solid rgba(33,212,94,.22);">
<div class="dl-divider-line loc"></div>
<span class="dl-divider-text">or download with UI</span>
<div class="dl-divider-line loc"></div>
</div>
<!-- GUI download -->
<div class="dl-row loc">
<div class="dl-info">
<div class="dl-title">SOLAR Local Setup</div>
<div class="dl-sub">Windows installer · guided setup wizard · ~20 GB download</div>
</div>
<a href="/setup-local.exe" class="dl-btn loc">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
setup-local.exe
</a>
</div>
<div class="imodels"> <div class="imodels">
<span class="ipill loc"><span class="dot g"></span>llama3.2-vision:11b</span> <span class="ipill loc"><span class="dot g"></span>llama3.2-vision:11b</span>
<span class="ipill loc"><span class="dot g"></span>Malicus7862/deepseekcoder-6.7b-jarvis-gguf:latest</span> <span class="ipill loc"><span class="dot g"></span>Malicus7862/deepseekcoder-6.7b-jarvis-gguf:latest</span>
@@ -968,7 +856,7 @@
</div> </div>
</div> </div>
<!-- CLOUD INSTALL — with Coming Soon overlay --> <!-- CLOUD INSTALL -->
<div class="soon-wrap rev d2"> <div class="soon-wrap rev d2">
<div class="icard"> <div class="icard">
<div class="ich cld"> <div class="ich cld">
@@ -979,10 +867,16 @@
</div> </div>
<div class="ichr">Ollama account</div> <div class="ichr">Ollama account</div>
</div> </div>
<!-- Terminal: no UI, terminal only -->
<div class="term"> <div class="term">
<div class="tbar"> <div class="tbar">
<span class="td td-r"></span><span class="td td-y"></span><span class="td td-g"></span> <span class="td td-r"></span><span class="td td-y"></span><span class="td td-g"></span>
<span class="tt">PowerShell — Administrator</span> <span class="tt">PowerShell — Administrator</span>
<span class="tmode-badge" style="border-color:rgba(77,222,255,.25);color:var(--ice);background:rgba(77,222,255,.07);">
<svg width="9" height="9" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>
Terminal only · no UI
</span>
</div> </div>
<div class="tbody"> <div class="tbody">
<div class="tline"> <div class="tline">
@@ -996,14 +890,32 @@
</button> </button>
</div> </div>
</div> </div>
<!-- Divider -->
<div class="dl-divider" style="border-left:1px solid rgba(77,222,255,.22);border-right:1px solid rgba(77,222,255,.22);">
<div class="dl-divider-line cld"></div>
<span class="dl-divider-text">or download with UI</span>
<div class="dl-divider-line cld"></div>
</div>
<!-- GUI download -->
<div class="dl-row cld">
<div class="dl-info">
<div class="dl-title">SOLAR Cloud Setup</div>
<div class="dl-sub">Windows installer · guided setup wizard · Ollama account required</div>
</div>
<a href="/setup-cloud.exe" class="dl-btn cld">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
setup-cloud.exe
</a>
</div>
<div class="imodels"> <div class="imodels">
<span class="ipill cld"><span class="dot c"></span>Creative-Crafter/SOLAR-gemma3:27b_cloud</span> <span class="ipill cld"><span class="dot c"></span>Creative-Crafter/SOLAR-gemma3:27b_cloud</span>
<span class="ipill cld"><span class="dot c"></span>qwen3-coder-next:cloud</span> <span class="ipill cld"><span class="dot c"></span>qwen3-coder-next:cloud</span>
<span class="ipill cld"><span class="dot c"></span>deepseek-v3.2:cloud</span> <span class="ipill cld"><span class="dot c"></span>deepseek-v3.2:cloud</span>
</div> </div>
</div> </div>
</div> </div>
</div><!-- /ig --> </div><!-- /ig -->
@@ -1022,9 +934,7 @@
</div> </div>
</section> </section>
<!-- ══════════════════════════════════════════════ <!-- GITHUB CTA -->
GITHUB CTA
══════════════════════════════════════════════ -->
<section id="github"> <section id="github">
<div class="wrap"> <div class="wrap">
<div class="ghcard rev"> <div class="ghcard rev">
@@ -1044,18 +954,12 @@
</div> </div>
</section> </section>
<!-- ══════════════════════════════════════════════
FOOTER
══════════════════════════════════════════════ -->
<footer> <footer>
<div class="fl2">SOLAR</div> <div class="fl2">SOLAR</div>
<div class="fc2">© 2025 SOLAR Project — Apache 2.0 License</div> <div class="fc2">© 2025 SOLAR Project — Apache 2.0 License</div>
<a href="https://github.com/Creative-Crafter/SOLAR" target="_blank" rel="noopener" class="fa">GitHub →</a> <a href="https://github.com/Creative-Crafter/SOLAR" target="_blank" rel="noopener" class="fa">GitHub →</a>
</footer> </footer>
<!-- ══════════════════════════════════════════════
JAVASCRIPT
══════════════════════════════════════════════ -->
<script> <script>
/* ── PARTICLE CANVAS ── */ /* ── PARTICLE CANVAS ── */
(function(){ (function(){
@@ -1103,27 +1007,17 @@ function doCopy(which){
const btn=document.getElementById('btn-'+which); const btn=document.getElementById('btn-'+which);
const reset=()=>{btn.classList.remove('ok');btn.innerHTML=CPY_ICON+' Copy';}; const reset=()=>{btn.classList.remove('ok');btn.innerHTML=CPY_ICON+' Copy';};
const ok=()=>{btn.classList.add('ok');btn.innerHTML=CHK_ICON+' Copied!';setTimeout(reset,2400);}; const ok=()=>{btn.classList.add('ok');btn.innerHTML=CHK_ICON+' Copied!';setTimeout(reset,2400);};
// Robust fallback: always works regardless of protocol (file://, http, https)
function legacyCopy(){ function legacyCopy(){
const ta=document.createElement('textarea'); const ta=document.createElement('textarea');
ta.value=cmd; ta.value=cmd;ta.setAttribute('readonly','');
ta.setAttribute('readonly','');
ta.style.cssText='position:fixed;top:0;left:0;opacity:0;pointer-events:none;'; ta.style.cssText='position:fixed;top:0;left:0;opacity:0;pointer-events:none;';
document.body.appendChild(ta); document.body.appendChild(ta);ta.focus();ta.select();
ta.focus();ta.select(); try{const s=document.execCommand('copy');s?ok():reset();}catch(e){reset();}
try{
const success=document.execCommand('copy');
success?ok():reset();
}catch(e){reset();}
document.body.removeChild(ta); document.body.removeChild(ta);
} }
if(navigator.clipboard&&window.isSecureContext){ if(navigator.clipboard&&window.isSecureContext){
navigator.clipboard.writeText(cmd).then(ok).catch(legacyCopy); navigator.clipboard.writeText(cmd).then(ok).catch(legacyCopy);
} else { } else {legacyCopy();}
legacyCopy();
}
} }
/* ── SCROLL REVEAL ── */ /* ── SCROLL REVEAL ── */
@@ -1141,4 +1035,4 @@ document.querySelectorAll('a[href^="#"]').forEach(a=>{
}); });
</script> </script>
</body> </body>
</html> </html>

BIN
setup-cloud.exe Normal file

Binary file not shown.

BIN
setup-local.exe Normal file

Binary file not shown.