@yoavf/pair
Version:
Pair is a CLI utility that orchestrates coding agents in pair programming mode
466 lines (404 loc) • 8.8 kB
CSS
* { box-sizing: border-box; }
html, body {
height: 100%;
margin: 0;
font-family: 'Kode Mono', 'Courier New', monospace;
background: #002b36;
color: #ffffff;
overflow-x: hidden;
}
body {
padding-bottom: 200px;
}
.ascii-banner {
position: fixed;
left: clamp(20px, 3vw, 40px);
top: 40vh;
transform: translateY(-50%);
width: clamp(400px, 40vw, 600px);
z-index: 1000;
pointer-events: none;
transform-origin: left center;
margin-left: 20px;
}
.ascii-banner img {
width: 100%;
height: auto;
max-width: 100%;
object-fit: contain;
}
/* Desktop demo positioning */
@media (min-width: 851px) {
.demo {
position: absolute;
left: 55vw;
top: 1000px;
width: 430px;
z-index: 500;
transform-origin: right center;
}
}
/* Narrow content for medium screens */
@media (min-width: 851px) and (max-width: 1350px) {
.demo {
width: 350px;
left: 52vw;
}
.bottom-content {
width: 70%;
max-width: 600px;
}
}
.terminal-frame {
width: 100%;
aspect-ratio: 16/10;
background: #000000;
border: 2px solid #ffffff;
border-radius: 4px;
overflow: hidden;
position: relative;
transform-origin: left center;
}
.video-content {
width: 100%;
height: 100%;
background: #000000;
display: flex;
align-items: center;
justify-content: center;
color: #ffffff;
font-size: 18px;
position: relative;
transition: filter 0.4s ease;
}
.video-content.pixelating {
filter:
blur(2px)
contrast(150%)
saturate(200%)
brightness(0.7);
transform: scale(0.95);
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
@keyframes pixelate {
0% {
filter: blur(0px) contrast(100%) saturate(100%) brightness(1);
transform: scale(1);
}
50% {
filter: blur(4px) contrast(200%) saturate(300%) brightness(0.5);
transform: scale(0.9);
}
100% {
filter: blur(0px) contrast(100%) saturate(100%) brightness(1);
transform: scale(1);
}
}
.video-content.pixel-transition {
animation: pixelate 0.6s ease-in-out;
}
/* Demo header with title and arrows */
.demo-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
width: 100%;
}
.demo-title-section {
flex: 1;
}
.demo-title {
font-family: 'Kode Mono', 'Courier New', monospace;
font-size: 12px;
color: #ffffff;
line-height: 1.4;
text-align: left;
}
.demo-nav-arrows {
display: flex;
align-items: center;
gap: 12px;
}
.demo-nav-dots-header {
display: flex;
gap: 6px;
}
.demo-nav-btn {
background: none;
border: none;
color: #9ca3af;
font-size: 18px;
font-weight: bold;
cursor: pointer;
padding: 4px 6px;
border-radius: 4px;
transition: all 0.2s ease;
user-select: none;
}
.demo-nav-btn:hover {
color: #4be29a;
}
.demo-nav-btn:disabled {
opacity: 0.3;
cursor: not-allowed;
}
/* Demo caption */
.demo-caption {
font-family: 'Kode Mono', 'Courier New', monospace;
font-size: 9px;
color: #9ca3af;
text-align: left;
margin-top: 2px;
}
.demo-nav-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.3);
cursor: pointer;
transition: all 0.2s ease;
}
.demo-nav-dot.active {
background: #4be29a;
transform: scale(1.2);
}
.demo-nav-dot:hover {
background: rgba(255, 255, 255, 0.6);
}
.hero-text {
position: absolute;
/* Calculate left position based on banner width + larger gap */
left: clamp(620px, calc(40vw + 250px), 900px); /* Banner width + 250px gap */
top: 25vh; /* Start higher so it scrolls away faster */
width: clamp(350px, calc(100vw - 40vw - 280px), 550px); /* Wider text area */
z-index: 600;
}
.tagline {
font-size: clamp(24px, 3vw, 32px); /* Responsive tagline */
color: #cbd5e0;
margin: 0 0 20px 0;
font-weight: bold;
}
.description {
font-size: clamp(16px, 2vw, 22px); /* Responsive description */
color: #9ca3af;
line-height: 1.5;
margin-bottom: 30px;
}
.cta-row {
display: flex;
gap: 36px; /* More space between buttons */
margin-top: 40px; /* Move buttons down */
}
.btn {
background: #ff5f6d;
color: #002b36;
font-weight: 700;
text-decoration: none;
padding: 14px 20px;
border: 4px solid #ffffff;
font-family: 'Kode Mono', 'Courier New', monospace;
text-transform: uppercase;
letter-spacing: 1px;
box-shadow: 4px 4px 0 #4be29a;
transition: transform 0.15s ease;
}
.btn:hover {
transform: translateY(-2px);
}
.btn.secondary {
background: #4be29a;
color: #002b36;
box-shadow: 4px 4px 0 #ffd93d;
}
.top-github {
position: fixed;
top: 20px;
right: 40px;
z-index: 1100;
color: #002b36 ;
text-decoration: none;
font-family: 'Kode Mono', 'Courier New', monospace;
font-weight: bold;
padding: 8px 12px;
background: #4be29a;
border: 2px solid #ffffff;
box-shadow: 2px 2px 0 #ffd93d;
opacity: 0;
transition: opacity 0.3s ease;
}
.top-github:hover {
color: #002b36 ;
text-decoration: underline;
}
.top-github:visited {
color: #002b36 ;
}
.top-github.visible {
opacity: 1;
}
.footer {
color: #9ca3af;
font-family: 'Kode Mono', 'Courier New', monospace;
font-size: 14px;
text-align: center;
z-index: 800;
}
.footer a {
color: #4be29a;
text-decoration: none;
}
.footer a:hover {
text-decoration: underline;
}
.scroll-arrow {
position: absolute;
top: 1560px; /* More space above arrow */
left: 50%;
transform: translateX(-50%);
width: 70px; /* Bigger chevron */
height: 40px; /* Taller for more pronounced curve */
z-index: 600;
animation: bounce 2s infinite;
cursor: pointer;
transition: transform 0.3s ease;
}
.scroll-arrow:hover {
animation-duration: 1s;
}
/* Flipped state - rotate 180 degrees with different animation */
.scroll-arrow.flipped {
animation: bounceFlipped 2s infinite;
}
.scroll-arrow svg {
width: 100%;
height: 100%;
}
@keyframes bounce {
0%, 20%, 50%, 80%, 100% {
transform: translateX(-50%) translateY(0);
}
40% {
transform: translateX(-50%) translateY(-8px);
}
60% {
transform: translateX(-50%) translateY(-4px);
}
}
@keyframes bounceFlipped {
0%, 20%, 50%, 80%, 100% {
transform: translateX(-50%) rotate(180deg) translateY(0);
}
40% {
transform: translateX(-50%) rotate(180deg) translateY(-8px);
}
60% {
transform: translateX(-50%) rotate(180deg) translateY(-4px);
}
}
/* Mobile layout - stack everything vertically */
@media (max-width: 850px) {
/* Reset body */
body {
padding-bottom: 20px; /* Much less space below footer on mobile */
}
/* Banner - static at top */
.ascii-banner {
position: static;
width: 90%;
margin: 80px auto 40px auto; /* More top margin */
transform: none;
text-align: center;
}
.ascii-banner img {
max-width: 100%;
}
/* Hero text - normal flow below banner */
.hero-text {
position: static;
width: 90%;
margin: 40px auto;
text-align: center;
}
/* Hide "See it in action" button on mobile */
#actionBtn {
display: none;
}
/* Center and resize GitHub button */
.cta-row {
justify-content: center;
}
.btn.secondary {
padding: 10px 16px; /* Smaller padding */
font-size: 12px; /* Smaller font */
}
/* Demo - normal flow below hero */
.demo {
position: static;
width: 90%;
max-width: 400px;
margin: 40px auto 20px auto;
left: auto;
}
/* Prevent terminal frame from growing too large */
.terminal-frame {
max-width: 100%;
}
/* Hide arrow on mobile */
.scroll-arrow {
display: none;
}
/* FAQ and Footer container - normal flow */
.bottom-content {
position: static ;
width: 90% ;
margin: 50px auto ;
left: auto ;
top: auto ;
transform: none ;
}
/* Footer - normal flow at very end */
.footer {
position: static ;
margin: 60px auto 40px auto ;
padding: 0 20px ; /* Add horizontal padding */
transform: none ;
top: auto ;
left: auto ;
}
/* Top GitHub - hide on mobile */
.top-github {
display: none;
}
}
/* Code blocks styling for terminal commands */
code {
background: #0d1421;
color: #4be29a;
padding: 4px 8px;
border-radius: 4px;
font-family: 'Kode Mono', 'Courier New', monospace;
font-size: 0.9em;
border: 1px solid #002b36;
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3);
line-height: 1.4;
}
/* FAQ section paragraphs with code blocks need better line spacing */
.faq-section p {
line-height: 1.6;
}
/* Global link styling to match design */
a {
color: #4be29a;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
a:visited {
color: #4be29a;
}
a:active {
color: #4be29a;
}