Communitygithub.com

Terrain UI

Construir interfaces web com um estilo industrial e sóbrio, inspirado em menus de jogos (papel e tinta, um acento para "atual" e "primário", seleção lida rapidamente, botões secundários em pílula, títulos de caminho // e linhas de contorno fechadas e suaves). Use quando for pedida uma página, portfólio, painel ou componente neste estilo, ou com uma aparência "industrial", "tipo terminal", "inspirada em Endfield" ou 终末地风格.

O que é Terrain UI?

Terrain UI é uma skill projetada para construir interfaces web que evocam um estilo industrial e sóbrio, inspirado em convenções de menus de jogos, como papel e tinta, acentos de cor únicos e seleção de leitura rápida. É particularmente útil quando se deseja criar páginas, portfólios, painéis ou componentes com um visual "terminal", industrial ou inspirado em Endfield (终末地风格). A skill se baseia em oito regras fundamentais, incluindo o uso de uma única cor de acento para indicar localização atual e ações primárias, uma distinção clara entre botões primários (em bloco) e secundários (em pílula), e um sistema de seleção que depende da direção (listas verticais vs. abas horizontais). Além disso, fornece componentes CSS completos (com prefixo `tu-`), um script para fundo com linhas de contorno e animações curtas e firmes. É ideal para desenvolvedores que buscam um estilo de interface consistente, minimalista e funcional, compatível com qualquer framework ou página HTML única.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sayuriovo/terrain-ui/tree/HEAD

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Terrain UI faz?

Estas regras foram destiladas da interface de um jogo de temática industrial, mantendo apenas o que se mostrou útil em páginas web comuns. A skill não contém recursos do jogo e não tenta recriá-lo.

Leia este arquivo inteiro antes de começar. Abra assets/terrain.css para cores e marcação de componentes, use assets/contours.js para o fundo de contornos e veja references/research.md para saber de onde veio cada regra e por que algumas coisas foram omitidas.

Oito Regras

  1. Uma cor de acento, dois significados: a localização atual e a ação primária. Padrão #FEEC00, amostrada da aba selecionada no jogo. Use-a apenas como preenchimento, com texto na cor da tinta sobre ela; no tema claro, nunca a use para linhas ou texto. O mesmo se aplica ao hover: apenas o botão primário preenche com o acento ao passar o mouse. Links, botões em pílula e linhas de lista apenas clareiam ou ganham um sublinhado mais grosso.
  2. Seleção depende da direção:
    • Listas verticais: o hover clareia a linha; a linha selecionada escurece com texto claro, e uma barra de acento aparece à esquerda.
    • Abas horizontais: a aba selecionada preenche sólida com o acento. Ao trocar, o bloco antigo colapsa e o novo abre lateralmente a partir do centro.
  3. Forma do botão mostra prioridade: a ação primária é um bloco com o canto inferior direito cortado; as ações secundárias são pílulas com um ícone redondo na extremidade direita. No máximo uma ação primária por grupo de botões.
  4. Coloque um caminho no canto superior esquerdo de cada página: // Trabalho / Sobre mim. Os níveis para os quais se pode voltar são links.
  5. Números são decoração e devem ser verdadeiros: defina IDs, datas e contadores atual / total em algarismos tabulares largos. Nunca invente dados ou adicione texto técnico falso. O mesmo vale para cópia: descreva um produto (recursos, escopo suportado, instalação) apenas com base no que o usuário forneceu ou na própria documentação do projeto, e mantenha seu escopo. Onde não houver fonte, escreva um placeholder como [TODO: ...] em vez de preenchê-lo.
  6. Mostre teclas de atalho: por exemplo ← → ao lado dos botões de página. Mostre-as apenas em dispositivos com ponteiro fino.
  7. Fundo: linhas de contorno fechadas: um patch em cada um dos dois cantos, opacidade de 6% a 9%, a cada quinta linha mais grossa, sem animação.
  8. Movimento curto e firme: hover 90 ms, seleção 110 a 120 ms, curva cubic-bezier(.2,0,0,1). Desligue tudo quando o sistema solicitar redução de movimento.

Escolha um tipo de página primeiro

Decida que tipo de página você está construindo antes de começar. Todos os três compartilham as mesmas cores e componentes; eles diferem em quão ousados são. Quando estiver em dúvida, escolha Leitura.

TipoUsado paraComoEquivalente no jogo
LeituraArtigos, detalhes de projetos, configurações, ajudaUma coluna de texto, com cerca de 65 caracteres latinos ou 38 CJK de largura; acento apenas no item de navegação atual e no botão primário; contornos opcionaisEnciclopédia, arquivos
VitrinePáginas iniciais, portfólios, landing pagesCabeçalhos largos e grandes, tipo de contorno permitido; números grandes como fundo; contornos ativados; conteúdo pode aparecer bloco por blocoMenu principal, loja
BancadaPáginas de administração, painéis, ferramentas, configurações de extensãoNav de lista vertical à esquerda, abas no topo; principalmente tabelas, números e formulários; sem cabeçalhos grandes; movimento apenas em resposta a açõesInventário, equipamento, lista de amigos

Componentes

Todos vivem em assets/terrain.css com o prefixo tu-. examples/demo.html mostra cada um.

ComponenteClassesNotas
Título de caminhotu-crumbRegra 4
Lista verticaltu-listMarque o item atual com aria-current
Abas horizontaistu-tabs tu-tabMarque a aba atual com aria-selected="true" ou aria-current
Botão primário / secundáriotu-btn / tu-btn--pill + tu-btn__iconRegra 3
Dica de teclatu-kbdRegra 6
Linha de campotu-fields tu-sepSepare metadados com uma barra vertical │
Paineltu-panelUm bloco liso: sem raio, sombra ou borda
Tabelatu-table-wrap tu-tableRótulos de cabeçalho pequenos e largos; alinhe à direita colunas numéricas com tu-right; rola lateralmente em telas estreitas
Inputtu-field tu-input tu-hintAo focar, o sublinhado engrossa e uma barra de acento aparece à esquerda
Errotu-error, mais aria-invalid="true" no inputUm pequeno quadrado de acento e uma frase sobre como corrigi-lo; sem texto vermelho
Interruptortu-switch"Ligado" é um estado atual, então a trilha preenche com o acento
Diálogo<dialog class="tu-dialog">Os botões ficam em uma barra de rodapé: um primário, cancelar como pílula; ele aparece nitidamente a partir de um desfoque
Toasttu-toastUma barra escura com uma barra de acento à esquerda; desliza da esquerda e sai após 2 segundos
Estado vaziotu-emptyUma caixa tracejada com uma frase sobre o que aparecerá aqui, opcionalmente um botão primário
Carregamentotu-progress, mais tu-progress--busy enquanto aguardaUma linha de 2 px; quando o progresso é conhecido, defina --tu-value e mostre a porcentagem

Sem vermelho. Avisos, falhas e estados pendentes usam o pequeno quadrado de acento com texto na cor da tinta. Coloque ações irreversíveis, como exclusão, atrás de um diálogo de confirmação.

Para qualquer coisa não nesta tabela, derive das oito regras: se é "atual" ou "primário" decide se pode usar o acento; se é primário ou secundário decide bloco ou pílula; se pode ser clicado decide se clareia no hover.

Movimento

AçãoDuraçãoComo
Clarear no hover90 msTransição de cor de fundo
Barra de seleção de lista aparece110 msscaleY(0 → 1)
Troca de aba120 msBloco de acento scaleX(0 → 1), abrindo a partir do centro
Hover no botão primário280 msAcento aparece da esquerda
Mudança de páginaSair 320 ms, entrar 480 msPágina antiga desfoca e desvanece; nova página aparece bloco por bloco, com 100 ms de intervalo

Não Faça

  • Marcadores não vistos (pontos vermelhos, selos NOVO): no jogo, eles incentivam os jogadores a coletar recompensas; em um portfólio ou site comum, parecem irritantes.
  • Vidro fosco, rasgos de glitch, linhas de varredura, brilho, grandes preenchimentos de acento, cartões arredondados com sombras.
  • Elementos exclusivos de jogos, como menus 3D em carrossel, arte de personagens e barras de cor de raridade.
  • Quaisquer recursos oficiais do jogo: capturas de tela, logotipos, ícones, arte de personagens, cópia ou arquivos de fonte oficiais.

Tipografia

  • Texto e números latinos: Saira (código aberto, SIL OFL). Rótulos esticados para 125%, todas em maiúsculas, tracking de 0,06em. O site oficial não adiciona tracking aos seus rótulos largos; um pouco é mantido aqui para tamanhos pequenos.
  • Chinês: Noto Sans SC ou a sans-serif do sistema. Sem faces serifadas ou de pincel para texto do corpo.
  • Todos os números tabulares (font-variant-numeric: tabular-nums).

Entregando um único arquivo HTML

  • Use as classes terrain.css como estão; não adicione substituições no nível da página que alterem suas cores. Se uma alteração for necessária, o componente tem um problema e deve ser relatado de volta à skill.
  • Coloque terrain.css em um elemento <style> e contours.js em um elemento <script>. Antes de embutir qualquer script, certifique-se de que ele não contém </script> literal; se contiver, escreva como </script>.
  • Se a página precisar funcionar offline, incorpore Saira como uma data URI woff2 em @font-face; caso contrário, use Google Fonts e mantenha as fontes de fallback.

Lista de Verificação Antes da Entrega

  • Um tipo de página foi escolhido e tamanhos de cabeçalho de tipos diferentes não são misturados em uma página.
  • O acento aparece apenas na localização atual e ações primárias; não há vermelho na página.
  • Cada grupo de botões tem no máximo um botão primário em bloco; o resto são pílulas.
  • Listas verticais e abas horizontais usam seus próprios estilos de seleção.
  • Cada página tem um título de caminho //.
  • Todos os números são dados reais; cada declaração de produto tem uma fonte e não exagera seu escopo.
  • Os temas claro e escuro foram verificados; nada rola lateralmente na largura de um telefone (cerca de 400 px).
  • O foco do teclado está visível; tudo está parado com redução de movimento ativada.
  • Nenhum recurso oficial do jogo é usado.

Arquivos

ArquivoConteúdo
assets/terrain.cssTokens de cor (claro e escuro) e todos os componentes
assets/contours.jsFundo de contorno, uma linha para configurar: TerrainContours.mount(canvas)
examples/demo.htmlTodos os componentes em uma página, pronta para abrir
examples/screenshots/Página de componentes em claro, escuro, largura de telefone e diálogo
references/research.mdNotas de pesquisa: o que foi observado, o que foi mantido, o que foi omitido

Habilidades Relacionadas