/* * Molduras da vitrine: navegador (.ds-bframe) e celular (.ds-phone). O hero, os cases e a vitrine dos projetos usam as * duas, então este arquivo é global (app/layout.tsx). O CSS só da vitrine fica com os componentes dela: * reel-list.css, pinned-reel.css e lightbox.css. */ /* ─────────────────────────── Moldura de navegador ─────────────────────────── */ .ds-bframe { display: flex; flex-direction: column; min-width: 0; border: 1px solid rgba(255, 255, 255, 0.12); background: #0b0b0b; box-shadow: 0 28px 60px -34px rgba(0, 0, 0, 0.9); } .ds-bframe-bar { display: flex; align-items: center; gap: 12px; flex: none; height: 30px; padding: 0 10px; background: #141414; border-bottom: 1px solid rgba(255, 255, 255, 0.08); } .ds-bframe-dots { display: flex; flex: none; gap: 6px; & i { width: 7px; height: 7px; border-radius: 50%; background: rgba(255, 255, 255, 0.2); } } .ds-bframe-url { display: flex; align-items: center; gap: 6px; flex: 1 1 auto; min-width: 0; max-width: 360px; height: 20px; margin-inline: auto; padding: 0 9px; /* na barra de endereço do hero (primeira dobra): monoespacada do sistema, sem baixar a Geist Mono na carga */ font-family: var(--font-mono-system); font-size: 12px; line-height: 1; letter-spacing: 0.02em; color: rgba(255, 255, 255, 0.68); background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.08); & svg { flex: none; opacity: 0.7; } & span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } } @media (max-width: 479px) { .ds-bframe-bar { height: 26px; gap: 8px; padding: 0 8px; } .ds-bframe-dots i { width: 6px; height: 6px; } .ds-bframe-url { height: 20px; } } /* ─────────────────────────── Celular ─────────────────────────── */ /* * Moldura de celular para o vídeo mobile (390x844). A tela tem uma faixa de status no alto, com o furo da câmera, e o * vídeo (ou o pôster) fica inteiro logo abaixo dela: nem o canto arredondado nem o furo cobrem o cabeçalho do site * (o logo nasce a 8 px da borda). A faixa mede 22 das 866 unidades da tela (390 de largura): 2,54 % da altura. Os * cantos são proporcionais à largura, para a moldura pequena do hero e a ampliada terem o mesmo desenho. */ .ds-phone { position: relative; flex: none; aspect-ratio: 390 / 866; padding: 7px; background: #111; border: 1px solid rgba(255, 255, 255, 0.16); border-radius: calc(5% + 8px) / calc(2.25% + 8px); box-shadow: 0 30px 60px -28px rgba(0, 0, 0, 0.9), inset 0 0 0 1px rgba(255, 255, 255, 0.05); &::before { content: ""; position: absolute; z-index: 2; top: 11px; left: 50%; width: 24%; height: 4px; transform: translateX(-50%); border-radius: 4px; background: #222; } } .ds-phone-screen { position: relative; width: 100%; height: 100%; overflow: hidden; border-radius: 5% / 2.25%; /* o pôster (imagem de fundo inline) cola na base: a faixa de status de cima fica preta */ background: #000 left bottom / 100% auto no-repeat; & > video, & > img { position: absolute; inset: 2.54% 0 0; display: block; width: 100%; height: 97.46%; object-fit: cover; object-position: top; } }