now with setup.exe files
This commit is contained in:
426
index.html
426
index.html
@@ -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 & 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 & 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
BIN
setup-cloud.exe
Normal file
Binary file not shown.
BIN
setup-local.exe
Normal file
BIN
setup-local.exe
Normal file
Binary file not shown.
Reference in New Issue
Block a user