.card--action
Cartão de ação, com ícone grande e texto secundário.
Tudo que existe no site aparece aqui. Se um componente novo não couber nesta página, ele provavelmente não deveria existir.
O mecanismo central. Cada superfície reescreve os tokens semânticos, e os componentes dentro dela se adaptam sozinhos. Repare que o mesmo botão muda de cor sem nenhuma classe extra.
.surface--teal-display
Teal da marca cheio. Texto pequeno amarelo aqui reprova em AA, por isso esta superfície é para blocos de display, e o texto corrido usa branco.
As três cores da marca foram amostradas pixel a pixel do deck original. As razões abaixo são WCAG 2.1 calculadas, não estimativas.
| Combinação | Razão | Uso permitido |
|---|---|---|
| #F2F6A1 sobre #081853 | 14.5:1 | qualquer texto |
| #FFFFFF sobre #081853 | 16.5:1 | qualquer texto |
| #081853 sobre #F2F6A1 | 14.5:1 | qualquer texto |
| #0E1220 sobre #FFFFFF | 18.7:1 | qualquer texto |
| #5A6470 sobre #FFFFFF | 6.0:1 | qualquer texto |
| #0A6A7B sobre #FFFFFF | 6.3:1 | links e botões |
| #FFFFFF sobre #076374 | 6.9:1 | qualquer texto |
| #FFFFFF sobre #0A8195 | 4.63:1 | corpo, no limite |
| #F2F6A1 sobre #0A8195 | 4.08:1 | só display grande |
| #081853 sobre #0A8195 | 3.55:1 | só display grande |
Chau Philomene One nos títulos, Montserrat no corpo. Escala
fluida em clamp(): cresce sozinha entre 360px e
1280px de viewport, sem media query.
--fs-display · Chau Philomene One 400
Transformar problemas
--fs-h1 · Chau Philomene One 400
Título de página
--fs-h2 · Chau Philomene One 400
Título de seção
--fs-h3 · Chau Philomene One 400
Título de cartão
.eyebrow · Chau Philomene One 400
Sobrescrito de seção.lead · Montserrat 400
Parágrafo de abertura. Um pouco maior que o corpo, usado logo abaixo dos títulos para dar o contexto da seção.
corpo · Montserrat 400 · 17px
Texto corrido. A medida é limitada a 42rem pela classe
.measure
porque linha longa demais cansa a leitura.
.muted · Montserrat 400
Texto secundário, para observações e complementos.
Base de 4px. Nada de valor solto no CSS dos componentes.
Cartão de ação, com ícone grande e texto secundário.
Cartão de ator do ecossistema: ícone em medalhão, centralizado.
Pilar: sem moldura, para trios de conceito.
.criteria
.check-list
.flow-list
.badge
O discreto existe para estado que não é destaque nem problema, como uma situação pendente. Ele não usa a cor de erro de propósito: não estar ativo não deu errado com ninguém.
Empreendedorismo é a arte de transformar problemas em oportunidades Deck institucional, agosto de 2024
Estrutura pronta, envio não. Nesta fase o site é estático: o back-end entra na fase 3 do roadmap.
Sprite único em assets/icons/sprite.svg, traço 1.6
em grade 24×24, sempre currentColor.
i-users
i-cap
i-handshake
i-donate
i-society
i-network
i-medal
i-sprout
i-bulb
i-tools
i-journey
i-arrow-right
i-check
i-mail
i-phone
i-chat
i-linkedin
i-instagram
i-pin
i-menu
i-globe
Um único PNG de máscara (koi-mask.png) pintado por
background-color: currentColor. Por isso o koi
acompanha a cor de qualquer superfície sem gerar arquivo novo.
em .surface--navy
em .surface--lime
em .surface--teal
O koi é desenho de linha: texto por cima dele perde contraste onde
uma linha passa e recupera onde não passa, e é essa oscilação que
cansa a leitura. Onde os dois se encontram entra uma chapa
translúcida (color-mix(in srgb, var(--bg) 62%, transparent)) com borda em degradê. A borda macia é o ponto: chapa de corte
reto sobre um desenho lê como adesivo colado, porque anuncia duas
camadas separadas. Dissolvida, o koi atravessa e as duas viram a
mesma imagem. Vale para .cta-band__inner e para o
.panel dentro de um .split__media que
tenha koi.
A chapa é a cor da própria superfície por cima do traço, e é por
isso que ela só resolve legenda curta: lime a 62% sobre lime
clareia o koi, nunca o apaga. Onde há texto de corpo do alto ao pé
do cartão, o traço volta a cruzar linha por linha, e aí o que
resolve não é mais opacidade e sim tirar o desenho de baixo do
texto. Esse é o caso do .person em
contato.html, o único painel-com-koi nessa situação.
Ele usa a mesma chapa, só que mais densa no miolo (94% no centro,
morrendo em transparente na borda). Nada muda em espécie, só em
dose: o degradê continua sendo o mesmo desenho centrado, e o koi
segue atravessando o cartão pelas bordas, que é o que impede a
chapa de virar retângulo colado.
O koi atravessa o texto
A mesma regra em qualquer superfície
.hero--full fecha uma tela:
100svh − --header-real − --hero-peek. A espiada é
dimensionada para caber conteúdo da seção
seguinte (testeira + primeira linha do título), não só o padding
dela, e por isso .hero--full + .section tem o topo
reduzido. Convidam a rolar duas coisas: esse conteúdo espiando
na borda e o .scroll-cue, que some assim que a
pessoa rola.
O conteúdo do herói entra escalonado por animação de CSS no carregamento, sem observer, sem classe pendurada. Não existe caminho em que algo fique invisível. O site não tem revelação ao rolar: conteúdo aparece quando existe.
.scroll-cue: a seta pulsa; a animação para no hover e sob prefers-reduced-motion
O site é para ler; a área de membro é para
editar. São coisas diferentes, e
.workspace
é onde essa diferença vira CSS.
Ele é o mesmo mecanismo das superfícies, num eixo ao lado: assim
como
.surface--navy reescreve a cor de
tudo que cai dentro dela, .workspace reescreve o
tamanho. Campo, botão, rótulo e cartão encolhem
juntos, sem que nenhum deles precise de uma variante própria.
Ele é densidade e nada mais: uma coluna, e sem opinião sobre
largura, que quem o usa define com .measure. Houve
aqui um modificador de duas colunas, e ele saiu funcionando: com
os campos já densos, a segunda coluna resolvia um problema que a
densidade tinha resolvido antes, e desalinhava a área de edição
do resto da página.
Corpo de texto do campo não encolhe, e isso é deliberado: abaixo de 16px o Safari do iPhone dá zoom sozinho ao focar um campo. Encolhe altura e respiro, nunca corpo.
.workspace: o mesmo formulário da seção 09, na densidade de edição
.select: appearance: none apaga a decoração do
sistema e a seta volta como ícone nosso. A lista aberta é
desenhada pelo sistema operacional e nenhuma folha de estilo
entra ali, por isso os rótulos nascem em caixa mista no JS:
fechado o CSS levanta para versalete, aberto o sistema mostra o
texto como ele é.
.progress: as três etapas da importação de currículo
A etapa em curso recebe o koi da marca nadando; as vencidas, um
visto. O estado é classe, nunca animação: com movimento
desligado a trilha continua dizendo onde está, porque visto, koi
e círculo vazio são formas diferentes e não velocidades
diferentes. A trilha inteira é aria-hidden: quem
anuncia é o role="status" ao lado dela.
.skeleton: o formato do que vem, antes de ele vir
Não é enfeite de espera, é promessa de forma: quem olha já sabe que vai receber campos, quantos e de que tamanho, então a troca pelo texto de verdade não reorganiza a tela debaixo do olho de ninguém. Só token semântico, então ele funciona em qualquer superfície sem uma variante por cor.
O retrato de uma pessoa numa grade. Ele é montado por
assets/js/cartao-membro.js, que não conhece
Firebase: a galeria do painel e os cartões públicos de mentor
usam o mesmo construtor, e o que é do painel fica atrás de uma
opção.
Desenvolve negócios e tecnologia, cria produtos do zero e estrutura operações comerciais
Constrói produtos e estrutura áreas comerciais em startups. No mercado de energia, dobrou o faturamento anual de uma startup por 3 anos seguidos, montou o times técnicos do zero e desenhou processos que hoje sustentam a operação.
Perfil ainda não preenchido.
.member-card, sobre .card e .card--koi, dentro de .surface--lime
É o mesmo cartão em toda tela que mostra gente: a galeria do painel e a galeria pública de mentores usam o mesmo tamanho, a mesma lista de referências e a mesma bio de oito linhas. Existiu uma versão encolhida para caber num terço de tela, com ícone sem rótulo no lugar da lista; ela saiu porque lia mais como um crachá do que como a apresentação de alguém, e uma grade de três colunas já entrega a largura sem precisar apertar o conteúdo. Na galeria de mentores o selo de papel sai, porque a página já se chama "Nossos mentores" e um selo idêntico em cada cartão só repetiria o título.
A lima com o koi atrás é a composição do "Fale com a gente", e num
cartão de pessoa ela paga duas contas de uma vez: é a marca, e é a
textura que ocupa a sobra de quem escreveu pouco. A chapa radial
em cima do koi é a mesma do .person, na dose fechada,
porque aqui também há texto de corpo do alto ao pé. A ordem de
pintura é fundo, koi, chapa, texto, e ela existe em duas linhas de
z-index negativo dentro de um
isolation: isolate.
Título corta em duas linhas e o "sobre" em oito, sempre no CSS e nunca na string: o texto inteiro continua no documento, então a busca do navegador acha e o diálogo de detalhe mostra tudo. Quem não tem foto recebe o koi no lugar dela, mais forte que o do fundo, para os dois não parecerem dois carimbos soltos.
O segundo cartão não tem rodapé, e não é esquecimento: quem não tem nenhuma referência não ganha o bloco, porque a borda de cima dele viraria um risco solto no pé do cartão.
Houve um "Ver perfil" no rodapé, e ele saiu quando cartão e
diálogo diziam a mesma coisa. Isso mudou em mentores.html:
o diálogo de lá mostra título e "sobre" por inteiro, sem o corte de
duas e oito linhas que o cartão sempre teve, e o controle de
verdade voltou. Só que não no rodapé: quando comDetalhe
está ligado, o nome vira um <button> com a cara
de título, que é o caminho de teclado e o que existe para leitor de
tela. O clique em qualquer outro ponto do cartão abre o mesmo
diálogo, atalho de mouse por cima do botão.
A terceira referência do primeiro cartão está de propósito sem
link:
assets/js/enderecos.js só monta
href para http e https, e o
que ele não consegue transformar em endereço continua na tela como
texto. Some o link, não some a informação, e quem administra vê o
que precisa ser corrigido.
.view-switch
Quem manda no estado é o aria-pressed, lido pelo
leitor de tela e pelo CSS ao mesmo tempo. Não existe uma classe
de estado em paralelo justamente para não haver duas versões da
verdade.
O irmão do cartão de membro, montado por
assets/js/cartao-projeto.js, que também não conhece
Firebase. Os dois dividem .card--koi, que é a
composição do koi por trás do texto: ela morava dentro do cartão
de pessoa e saiu de lá quando o segundo cartão quis a mesma
coisa.
Seis meses ao lado de dez negócios que estão começando em Itajubá
Uma turma por semestre, com mentoria quinzenal, três workshops e uma banca no fim. O que se mede não é quantas empresas nascem, e sim quantas continuam de pé um ano depois.
Descrição ainda não escrita.
.project-card, sobre .card e .card--koi, dentro de .surface--lime
Duas diferenças em relação ao cartão de pessoa, e as duas saem do que um projeto é. O logo não é redondo: círculo é recorte de rosto, onde a foto sobra por todos os lados, e marca quase sempre tem canto reto ou texto encostado na borda, que é justamente o que o círculo comeria.
E o cartão inteiro é um link, coisa que o de pessoa não é. Lá o
clique abre um diálogo que repete o que o cartão já diz; aqui
existe página de verdade do outro lado. Quem estica a área
clicável é o
.card__link::after que já existia, e o link continua
sendo um só, com o nome do projeto como texto, para o leitor de
tela anunciar "Aceleradora, link" em vez de uma lista de pedaços
clicáveis.
O selo de situação aparece sempre, ao contrário do selo de papel na galeria de mentores. Numa página só de mentores o selo repetido não informava nada; aqui cada projeto está numa etapa diferente, e a etapa é metade do que se quer saber correndo os olhos pela grade. Destaque só para "Executando" e "Em conclusão", que são as duas em que existe trabalho acontecendo agora.
O segundo cartão é como um projeto nasce: sem logo, que vira o koi esmaecido no lugar da imagem, e sem descrição. Nenhum dos dois deixa buraco, porque um buraco desalinharia o topo de todos os cartões da fileira.