/* ============================================================================ Testimonials — two-row marquee on a tinted graphite plinth. Single variant, no switcher. Spotlight card (Ben Davis) gets a kinpaku gold gradient so it commands attention even mid-row. ============================================================================ */ .home-kinpaku .testimonials-section { position: relative; /* Escape main.site-content's max-width + side padding so the section spans the full viewport. */ width: 100vw; margin-left: calc(50% - 50vw); /* No background of its own: the body's lacquer gradient is the page ground, so the section sits on it directly and an opaque fill here would only duplicate (and, when overlapped, mask) it. */ padding: 0 0 1em; color: var(--ks-text); border-top: 0; overflow: hidden; } /* Dotted accent at the bottom edge — a deliberate separator between the testimonials and the section below. Neutral dots, matching the de-warmed borders. (This is the dot rail that used to sit above the section.) */ .home-kinpaku .testimonials-section::after { content: ""; position: absolute; bottom: 0; left: 50%; width: 100vw; height: 18px; transform: translateX(-50%); background-image: radial-gradient(circle, oklch(0.45 0 0) 0.9px, transparent 1.4px); background-size: 7px 6px; background-repeat: repeat; pointer-events: none; } /* --------------------------------------------------------------------------- Marquee engine. The cards are outlined and ride directly on the section ground — the old graphite plinth wrapper was removed once it stopped being a visible shelf, so the marquee carries its own vertical inset here. --------------------------------------------------------------------------- */ .home-kinpaku .t-marquee { display: grid; gap: 14px; width: 100%; padding: 22px 0; } .home-kinpaku .t-marquee-row { overflow: hidden; } .home-kinpaku .t-marquee-track { display: flex; gap: 14px; width: max-content; /* Both rows share the same duration so on-screen speeds match. */ animation: t-marquee-fwd 110s linear infinite; } .home-kinpaku .t-marquee-track--reverse { animation: t-marquee-rev 110s linear infinite; } .home-kinpaku .t-marquee:hover .t-marquee-track { animation-play-state: paused; } @keyframes t-marquee-fwd { from { transform: translateX(0); } to { transform: translateX(-50%); } } @keyframes t-marquee-rev { from { transform: translateX(-50%); } to { transform: translateX(0); } } @media (prefers-reduced-motion: reduce) { .home-kinpaku .t-marquee-track { animation: none; } } /* --------------------------------------------------------------------------- Card --------------------------------------------------------------------------- */ .home-kinpaku .testimonials-section .t-card { display: flex; flex-direction: column; justify-content: space-between; gap: 14px; width: 320px; height: 168px; flex: none; padding: 18px 18px 14px; border-radius: 10px; color: var(--ks-text); text-decoration: none; transition: transform 200ms ease, background 200ms ease, box-shadow 200ms ease, border-color 200ms ease; } /* Outlined card: no fill, just a solid neutral border on the page ground. On dark, a clean outline separates more honestly than a near-invisible fill or a dead drop-shadow ever did. */ .home-kinpaku .t-card--plinth { background: none; border: 1px solid oklch(0.64 0 0 / 0.22); box-shadow: none; } .home-kinpaku .t-card--plinth:hover { border-color: oklch(0.64 0 0 / 0.42); transform: translateY(-1px); } /* Quote text */ .home-kinpaku .testimonials-section .t-card-quote { font-family: var(--ks-font); font-size: 0.94rem; line-height: 1.5; color: var(--ks-text); margin: 0; text-wrap: pretty; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; } /* Meta row (avatar + name + handle) */ .home-kinpaku .testimonials-section .t-card-meta { display: flex; align-items: center; gap: 10px; font-family: var(--ks-mono); } .home-kinpaku .testimonials-section .t-name-block { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; } .home-kinpaku .testimonials-section .t-name { color: var(--ks-text); font-size: 0.82rem; letter-spacing: 0.01em; font-family: var(--ks-mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 180px; } .home-kinpaku .testimonials-section .t-handle { color: var(--ks-text-muted); font-size: 0.74rem; letter-spacing: 0.02em; } /* Avatar + coin fallback */ .home-kinpaku .testimonials-section .t-avatar { width: 28px; height: 28px; border-radius: 50%; object-fit: cover; flex: none; background: var(--ks-graphite-2); box-shadow: inset 0 0 0 1px oklch(78% 0.12 82 / 0.22); } .home-kinpaku .testimonials-section .t-coin { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; background: var(--ks-graphite-2); border: 1px solid oklch(78% 0.12 82 / 0.32); font-family: var(--ks-font-display); font-weight: 400; font-size: 0.95rem; color: var(--ks-kinpaku); flex: none; }