site/landing.css
Rama main · réplica de lectura del repositorio original.
/* Landing: a marked-up review desk. Product screenshots carry the explanation. */
.landing-page {
--paper: #fff;
--ink: #20241e;
--secondary: #596054;
--line: #dfe3da;
--pencil: #dc452c;
background: var(--paper);
color: var(--ink);
font-family: Manrope, Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
}
.landing-page .wrap {
width: min(1280px, calc(100% - 96px));
}
.landing-page h1,
.landing-page h2,
.landing-page h3 {
font-weight: 800;
}
.landing-page .site-header {
height: 88px;
border: 0;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0;
}
.landing-page .site-header nav {
display: flex;
gap: 32px;
align-items: center;
}
.landing-page .site-header nav a {
font-size: 16px;
padding: 12px 0;
text-decoration: none;
}
.landing-page .wordmark {
font-size: 27px;
letter-spacing: -1.2px;
display: flex;
gap: 8px;
align-items: center;
font-weight: 800;
text-decoration: none;
}
.landing-page .wordmark-dot {
color: var(--pencil);
margin-left: -8px;
}
.intro {
display: grid;
grid-template-columns: 1.8fr 1fr;
gap: 50px;
align-items: center;
padding: 28px 0 36px;
}
.intro h1 {
font-size: clamp(40px, 5.3vw, 76px);
line-height: 1.08;
letter-spacing: -0.04em;
margin: 0;
}
.marked {
position: relative;
white-space: nowrap;
}
.marked svg {
position: absolute;
left: -4%;
bottom: -12px;
width: 110%;
height: 24px;
overflow: visible;
fill: none;
stroke: var(--pencil);
stroke-width: 3;
stroke-linecap: round;
}
.intro-aside {
padding-bottom: 4px;
}
.intro-aside > p:first-child {
font-size: 20px;
line-height: 1.5;
max-width: 32ch;
}
.start-button {
display: inline-flex;
gap: 40px;
align-items: center;
min-height: 52px;
background: var(--ink);
color: #fff;
text-decoration: none;
padding: 13px 22px;
border-radius: 5px;
margin-top: 24px;
font-weight: 600;
transition: transform 0.18s;
}
.start-button:hover {
transform: translateY(-2px);
background: #394431;
}
.start-button span {
font-size: 24px;
line-height: 1;
}
.intro-aside .setup-note {
font-size: 14px;
color: var(--secondary);
margin-top: 12px;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.story {
padding-bottom: 48px;
}
.story-controls {
display: flex;
gap: 18px;
align-items: center;
margin: 8px 0 20px;
flex-wrap: wrap;
}
.story-controls button {
border: 0;
background: none;
min-height: 48px;
padding: 9px 6px;
font-size: 16px;
font-weight: 600;
color: var(--secondary);
position: relative;
}
.story-controls button span {
font-size: 14px;
margin-right: 8px;
font-variant-numeric: tabular-nums;
}
.story-controls button[aria-pressed="true"] {
color: var(--ink);
}
.story-controls button[aria-pressed="true"]:not(.play-story):after {
content: "";
position: absolute;
bottom: 0;
left: 5px;
right: 3px;
height: 3px;
background: var(--pencil);
transform: rotate(-1deg);
}
.step-arrow {
font-size: 32px;
color: #646d5e;
}
.story-controls .play-story {
margin-left: auto;
font-size: 14px;
border: 1px solid #b4bcae;
border-radius: 30px;
padding: 8px 18px;
min-height: 44px;
}
.story-stage {
display: grid;
grid-template-columns: minmax(0, 2.35fr) minmax(240px, 1fr);
gap: 42px;
align-items: center;
background: #edf2e5;
border-radius: 10px;
padding: 30px 38px 30px 30px;
min-height: 540px;
transition: background 0.4s;
}
.story-stage[data-active="1"] {
background: #f6ece6;
}
.story-stage[data-active="2"] {
background: #edf0f9;
}
.screen-stack {
position: relative;
min-width: 0;
transform: rotate(-1deg);
}
.screen-zoom {
display: block;
width: 100%;
padding: 0;
border: 1px solid #b9c0b2;
border-radius: 6px;
background: #fff;
overflow: hidden;
cursor: zoom-in;
}
.screen-zoom img {
display: block;
width: 100%;
height: auto;
object-fit: contain;
background: #fff;
}
.screen-label {
display: block;
text-align: center;
font-size: 14px;
margin-top: 12px;
color: #49533f;
}
.story-note {
position: relative;
padding-top: 30px;
}
.pencil-note {
font-family: Caveat, cursive;
font-size: 30px;
font-weight: 600;
font-style: normal;
letter-spacing: -0.6px;
transform: rotate(-5deg);
margin: 0 0 60px 10px;
}
.story-note h3 {
font-size: 28px;
line-height: 1.2;
letter-spacing: -1px;
margin: 0 0 18px;
max-width: 18ch;
}
.story-note > p {
font-size: 16px;
line-height: 1.6;
max-width: 32ch;
}
.story-note .context-slip {
border-top: 1px solid #99a38e;
margin-top: 22px;
padding-top: 16px;
font-weight: 600;
line-height: 1.5;
}
.story-note > a {
display: inline-block;
font-size: 14px;
margin-top: 20px;
padding: 8px 0;
}
.story-bottom {
display: flex;
justify-content: space-between;
gap: 24px;
margin-top: 15px;
color: var(--secondary);
font-size: 14px;
}
.handoff {
padding: 66px 0 90px;
}
.handoff-heading {
display: flex;
align-items: baseline;
gap: 40px;
flex-wrap: wrap;
}
.handoff h2 {
font-size: clamp(28px, 3.4vw, 44px);
letter-spacing: -1.7px;
line-height: 1.2;
}
.handoff-heading p {
font-size: 20px;
color: var(--secondary);
}
.circled {
position: relative;
display: inline-block;
}
.circled:after {
content: "";
position: absolute;
inset: -3px -11px;
border: 2px solid var(--pencil);
border-radius: 48% 52% 44% 56%;
transform: rotate(-8deg);
}
.context-trail {
display: flex;
align-items: center;
gap: 12px;
margin: 36px 0 24px;
flex-wrap: wrap;
}
.context-trail span {
font-weight: 600;
font-size: 16px;
padding: 9px 16px;
border: 1px solid #cad1c1;
border-radius: 3px;
}
.context-trail span + span:before {
content: "+";
position: relative;
margin-left: -29px;
margin-right: 16px;
background: #fff;
color: #758069;
padding: 0 3px;
}
.context-trail .agent-end {
border: 0;
background: #e4efc3;
margin-left: 8px;
transform: rotate(-2deg);
}
.context-trail .agent-end:before {
content: none;
}
.agent-instruction {
max-width: 70ch;
font-size: 16px;
color: var(--secondary);
}
.setup-section {
background: #f6f7f3;
border-block: 1px solid #dfe3da;
padding: 64px 0 32px;
}
.setup-heading {
display: flex;
justify-content: space-between;
gap: 40px;
align-items: center;
}
.setup-heading h2 {
font-size: clamp(28px, 3.3vw, 44px);
line-height: 1.16;
letter-spacing: -1.5px;
}
.setup-heading p {
font-size: 16px;
color: var(--secondary);
max-width: 46ch;
}
.setup-path {
display: grid;
grid-template-columns: repeat(4, 1fr);
list-style: none;
padding: 0;
margin: 48px 0 32px;
gap: 28px;
}
.setup-path a {
display: flex;
flex-direction: column;
align-items: flex-start;
text-decoration: none;
gap: 10px;
}
.setup-number {
display: flex;
align-items: center;
justify-content: center;
width: 38px;
height: 38px;
font-size: 20px;
border: 1.5px solid #59634e;
border-radius: 48% 45% 50% 44%;
transform: rotate(-6deg);
margin-bottom: 8px;
}
.setup-path strong {
font-size: 20px;
font-weight: 800;
letter-spacing: -0.6px;
}
.setup-path a > span:last-child {
font-size: 14px;
color: var(--secondary);
}
.setup-path a:hover strong {
text-decoration: underline;
text-decoration-color: var(--pencil);
text-underline-offset: 5px;
}
.server-tip {
font-size: 16px;
padding: 20px 0;
border-block: 1px solid var(--line);
}
.role-links {
display: flex;
align-items: center;
gap: 24px;
flex-wrap: wrap;
margin-top: 24px;
font-size: 14px;
}
.role-links a {
padding: 8px 0;
}
.role-links > span {
font-weight: 600;
}
.landing-page .landing-footer {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 36px;
padding: 40px 0;
border: 0;
}
.landing-footer p,
.landing-footer a,
.landing-footer summary {
font-size: 14px;
}
.landing-footer .wordmark {
font-size: 24px;
}
.landing-footer > nav {
display: flex;
gap: 20px;
flex-wrap: wrap;
}
.compare-disclosure {
max-width: 430px;
}
.compare-disclosure summary {
cursor: pointer;
min-height: 44px;
padding: 8px 0;
}
.footer-comparisons {
padding-top: 12px;
}
.footer-comparisons > div {
display: flex;
gap: 14px;
flex-wrap: wrap;
margin-top: 10px;
}
#screen-dialog {
padding: 20px;
border: 0;
border-radius: 8px;
max-width: calc(100vw - 32px);
width: 1180px;
max-height: calc(100dvh - 32px);
background: white;
color: var(--ink);
}
#screen-dialog::backdrop {
background: #172015d9;
}
.close-screen {
display: block;
margin: 0 0 14px auto;
min-height: 44px;
border: 1px solid #87947c;
border-radius: 4px;
background: #fff;
padding: 8px 18px;
font-size: 16px;
}
.zoom-scroll {
overflow: auto;
max-height: calc(100dvh - 190px);
}
.zoom-scroll img {
display: block;
width: 100%;
min-width: 900px;
height: auto;
}
#screen-dialog p {
font-size: 14px;
margin: 12px 0 0;
}
@keyframes scene-in {
from {
opacity: 0.55;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.scene-enter {
animation: scene-in 0.35s ease-out;
}
@media (min-width: 1450px) {
.intro h1 {
font-size: 80px;
}
.story-stage {
min-height: 600px;
}
}
@media (max-width: 1050px) {
.landing-page .wrap {
width: calc(100% - 64px);
}
.intro {
gap: 32px;
grid-template-columns: 1.5fr 1fr;
}
.intro h1 {
font-size: clamp(40px, 5.3vw, 76px);
}
.intro-aside > p:first-child {
font-size: 18px;
}
.story-stage {
gap: 28px;
padding: 24px;
grid-template-columns: minmax(0, 1.8fr) minmax(220px, 1fr);
min-height: 450px;
}
.story-note h3 {
font-size: 24px;
}
.pencil-note {
font-size: 28px;
}
.setup-path {
grid-template-columns: repeat(2, 1fr);
gap: 32px;
}
.story-controls {
gap: 10px;
}
.story-controls button {
font-size: 14px;
}
.handoff-heading {
gap: 20px;
}
}
@media (max-width: 900px) {
.landing-page .wrap {
width: calc(100% - 36px);
}
.landing-page .site-header {
height: 80px;
}
.landing-page .site-header nav {
gap: 18px;
}
.landing-page .site-header nav a {
font-size: 14px;
}
.landing-page .site-header nav a:first-child {
display: none;
}
.landing-page .wordmark {
font-size: 24px;
}
.intro {
display: block;
padding: 30px 0 32px;
}
.intro h1 {
font-size: clamp(38px, 8.4vw, 60px);
line-height: 1.13;
letter-spacing: -0.04em;
}
.intro-aside {
margin-top: 32px;
}
.intro-aside > p:first-child {
font-size: 18px;
}
.intro-aside > p:first-child br {
display: none;
}
.start-button {
margin-top: 20px;
}
.story-controls {
gap: 0;
justify-content: space-between;
margin-bottom: 16px;
}
.story-controls button {
font-size: 14px;
max-width: 28%;
padding: 9px 4px;
line-height: 1.4;
text-align: left;
}
.story-controls button span {
display: block;
font-size: 14px;
}
.story-controls .play-story {
max-width: none;
margin-left: 0;
min-height: 44px;
margin-top: 12px;
width: 100%;
text-align: center;
}
.step-arrow {
font-size: 24px;
}
.story-stage {
display: flex;
flex-direction: column;
gap: 8px;
padding: 18px 14px 24px;
min-height: 0;
border-radius: 6px;
}
.screen-stack {
width: 100%;
transform: none;
}
.story-note {
padding: 12px 8px 0;
align-self: stretch;
}
.pencil-note {
display: inline-block;
margin: 0 0 18px;
font-size: 28px;
transform: rotate(-3deg);
}
.pencil-arrow {
display: none;
}
.story-note h3 {
font-size: 26px;
max-width: none;
margin-bottom: 12px;
}
.story-note h3 br {
display: none;
}
.story-note > p {
max-width: 52ch;
}
.story-note .context-slip {
margin-top: 16px;
padding-top: 12px;
}
.story-note > a {
margin-top: 10px;
font-size: 16px;
}
.story-bottom {
display: block;
font-size: 12px;
}
.story-bottom p + p {
margin-top: 5px;
}
.story {
padding-bottom: 0;
}
.handoff {
padding: 52px 0;
}
.handoff h2 {
font-size: 30px;
letter-spacing: -1px;
}
.handoff-heading {
gap: 12px;
}
.handoff-heading p {
font-size: 18px;
}
.context-trail {
gap: 10px;
margin: 24px 0;
}
.context-trail span {
font-size: 14px;
padding: 8px 12px;
}
.context-trail span + span:before {
display: none;
}
.context-trail .agent-end {
margin-left: 0;
}
.setup-section {
padding-top: 42px;
}
.setup-heading {
display: block;
}
.setup-heading h2 {
font-size: 30px;
letter-spacing: -1px;
}
.setup-heading p {
margin-top: 20px;
}
.setup-heading p br {
display: none;
}
.setup-path {
margin: 30px 0;
gap: 28px 18px;
}
.setup-path strong {
font-size: 18px;
}
.setup-path a > span:last-child {
font-size: 14px;
}
.server-tip {
font-size: 16px;
}
.role-links {
gap: 8px 18px;
font-size: 16px;
}
.role-links > span {
width: 100%;
}
.landing-page .landing-footer {
flex-wrap: wrap;
padding: 30px 0;
gap: 20px;
}
.landing-footer > div {
width: 100%;
}
}
@media (prefers-reduced-motion: reduce) {
.scene-enter {
animation: none;
}
.story-stage,
.start-button {
transition: none;
}
.start-button:hover {
transform: none;
}
}
/* Pencil annotations stay registered to the captured control, not the frame. */
.screen-zoom {
position: relative;
}
.screen-zoom picture {
display: block;
}
.capture-mark,
.detail-mark {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
fill: none;
stroke: #c63f29;
stroke-width: 2.5;
stroke-linecap: round;
stroke-linejoin: round;
pointer-events: none;
}
.detail-mark {
display: none;
}
.link-arrow {
display: inline-block;
width: 1em;
height: 1em;
fill: none;
stroke: currentColor;
stroke-width: 1.5;
stroke-linecap: round;
stroke-linejoin: round;
vertical-align: -0.12em;
}
.step-arrow {
width: 24px;
height: 24px;
fill: none;
stroke: currentColor;
stroke-width: 1.5;
stroke-linecap: round;
stroke-linejoin: round;
}
.play-icon {
width: 16px;
height: 16px;
fill: currentColor;
vertical-align: -2px;
margin-right: 5px;
}
.story-controls .play-story {
display: inline-flex;
align-items: center;
justify-content: center;
}
@media (max-width: 900px) {
.landing-page .site-header {
height: 64px;
}
.intro {
padding: 16px 0 18px;
}
.intro h1 {
font-size: clamp(36px, 6.2vw, 48px);
line-height: 1.1;
}
.intro-aside {
margin-top: 20px;
display: grid;
grid-template-columns: auto 1fr;
column-gap: 22px;
align-items: center;
}
.intro-aside > p:first-child {
grid-column: 1/-1;
font-size: 16px;
max-width: 50ch;
margin-bottom: 14px;
}
.start-button {
margin: 0;
min-height: 48px;
padding: 10px 16px;
gap: 18px;
}
.intro-aside .setup-note {
margin: 0;
font-size: 14px;
max-width: 21ch;
}
.story-controls {
display: flex;
gap: 8px;
flex-wrap: nowrap;
margin: 8px 0 12px;
}
.story-controls button {
font-size: 14px;
max-width: none;
flex: 1;
min-height: 48px;
line-height: 1.3;
}
.story-controls button span {
font-size: 12px;
}
.story-controls .step-arrow {
display: none;
}
.story-controls .play-story {
flex: 0 0 44px;
width: 44px;
margin: 0;
padding: 0;
}
.play-icon {
margin: 0;
}
.play-label {
display: none;
}
.story-stage {
padding: 12px 12px 20px;
}
.screen-stack {
width: 100%;
max-width: 560px;
}
.story-stage[data-active="0"] .capture-mark {
display: none;
}
.story-stage[data-active="0"] .detail-mark {
display: block;
}
.screen-label {
font-size: 12px;
margin-top: 8px;
}
.pencil-note {
margin-bottom: 12px;
}
}
@media (min-width: 600px) and (max-width: 900px) {
.intro {
display: grid;
grid-template-columns: 1.2fr 1fr;
gap: 26px;
}
.intro h1 {
font-size: 42px;
}
.intro-aside {
display: block;
margin: 0;
}
.intro-aside .setup-note {
max-width: none;
margin-top: 10px;
}
.story-stage {
display: grid;
grid-template-columns: minmax(0, 1.45fr) minmax(200px, 1fr);
align-items: center;
padding: 22px;
gap: 24px;
}
.story-note {
padding: 0;
}
.story-note h3 {
font-size: 24px;
}
.story-note .context-slip {
margin-top: 14px;
padding-top: 14px;
}
.story-note > a {
font-size: 14px;
}
}
.screen-stack > [hidden] {
display: none;
}
.screen-stack feedbacks-demo {
margin: 0;
width: 100%;
}
/* One opening composition: explanation beside the complete working example. */
.landing-page .hero {
display: grid;
grid-template-columns: minmax(280px, 0.85fr) minmax(0, 1.5fr);
align-items: center;
gap: 40px;
padding-block: 16px 24px;
text-align: left;
}
.landing-page .hero .intro {
display: block;
padding: 0;
}
.landing-page .hero .intro h1 {
font-size: clamp(40px, 4.1vw, 60px);
}
.landing-page .hero .intro-aside {
margin-top: 32px;
}
.landing-page .hero .intro-aside > p:first-child {
font-size: 18px;
}
.landing-page .hero .story {
min-width: 0;
padding: 0;
}
.landing-page .hero .story-controls {
gap: 8px;
margin: 0 0 12px;
flex-wrap: nowrap;
justify-content: space-between;
}
.landing-page .hero .story-controls button {
font-size: 14px;
padding-inline: 2px;
}
.landing-page .hero .story-controls button span {
margin-right: 4px;
}
.landing-page .hero .step-arrow {
width: 18px;
flex-shrink: 0;
}
.landing-page .hero .story-stage {
display: block;
min-height: 0;
padding: 16px;
}
.landing-page .hero .screen-stack {
transform: none;
}
.landing-page .hero feedbacks-demo {
--demo-screen-height: clamp(220px, calc(100svh - 430px), 360px);
}
.landing-page .hero .story-note {
padding: 12px 4px 0;
display: grid;
grid-template-columns: 1fr auto;
gap: 4px 16px;
align-items: center;
}
.landing-page .hero .pencil-note {
font-size: 23px;
margin: 0;
transform: rotate(-2deg);
grid-column: 1 / -1;
}
.landing-page .hero .story-note h3 {
font-size: 18px;
letter-spacing: -0.025em;
margin: 0;
max-width: none;
}
.landing-page .hero .story-note h3 br {
display: none;
}
.landing-page .hero .story-note > a {
font-size: 13px;
margin: 0;
padding: 8px 0;
}
.landing-page .site-header {
height: 64px;
}
.landing-page .site-header nav {
gap: 24px;
}
.comparisons {
padding-block: 64px;
}
.comparison-heading {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
}
.comparison-heading h2 {
font-size: clamp(28px, 3.3vw, 44px);
line-height: 1.2;
letter-spacing: -0.03em;
}
.comparisons > p {
color: var(--secondary);
margin-top: 12px;
}
.comparison-links {
display: flex;
flex-wrap: wrap;
gap: 0 32px;
margin-top: 24px;
border-block: 1px solid var(--line);
padding-block: 16px;
}
.comparison-links a {
padding-block: 10px;
font-size: 18px;
font-weight: 600;
}
html[data-feedbacks-motion="paused"] .scene-enter {
animation: none;
}
html[data-feedbacks-motion="paused"] .story-stage {
transition: none;
}
@media (max-width: 1100px) {
.landing-page .hero {
gap: 24px;
grid-template-columns: minmax(270px, 0.85fr) minmax(0, 1.5fr);
}
.landing-page .hero .story-controls button span {
display: none;
}
.landing-page .hero .story-note {
display: block;
}
.landing-page .hero .story-note h3 {
margin-top: 6px;
}
.landing-page .hero feedbacks-demo {
--demo-screen-height: clamp(200px, calc(100svh - 470px), 320px);
}
}
@media (max-width: 900px) {
.landing-page .hero {
display: block;
padding-top: 16px;
}
.landing-page .hero .intro h1 {
font-size: clamp(36px, 6.2vw, 48px);
}
.landing-page .hero .intro-aside {
margin-top: 20px;
}
.landing-page .hero .story {
margin-top: 28px;
}
.landing-page .hero feedbacks-demo {
--demo-screen-height: clamp(220px, 60vw, 360px);
}
.landing-page .hero .story-controls button {
max-width: none;
}
.landing-page .hero .story-note {
padding-top: 16px;
}
.landing-page .site-header {
height: auto;
min-height: 64px;
flex-wrap: wrap;
gap: 8px 16px;
padding-block: 12px;
}
.landing-page .site-header nav {
gap: 16px;
flex-wrap: wrap;
}
.landing-page .site-header nav a:first-child {
display: inline-block;
}
.landing-page .site-header nav a[href*="github.com"] {
display: none;
}
.comparisons {
padding-block: 40px;
}
}
@media (min-width: 901px) {
.landing-page .hero feedbacks-demo {
--demo-footer-display: grid;
--demo-caption-height: 0;
--demo-controls-gap: 0;
}
}