Serviços públicos · Novo recurso

sistema de design .italia.

Implemente uma sequência de serviços legível com a tipografia real, a estrutura responsiva Stepper e o estado local recuperável de formulário do Bootstrap Italia.

Guia OpenDesign8 capítulos22 itens de referênciaGuia de aplicação original
01

sistema de design .italia Prévia da interface

Percorra um plano local real de três etapas, recupere-se de uma escolha vazia e volte sem perder sua observação.

Planeje uma visita à bibliotecaAbrir exemplo completo
Bootstrap Italia 2.18.3 CSS nativos e Titillium Web; lógica original do fluxo de trabalho. · Referência de implementação
02

sistema de design .italia Referência de design

Pacote instalado e documentação oficial de Bootstrap Italia 2.18.3; CSS nativos e renderização de fontes verificados em três larguras.

Tipografia e fontes

Fonte
Nome / RegraValor / ConfiguraçãoUso
Main familyTitillium WebPesos WOFF2 nativos 400/600/700 incluídos na prévia.
Long reading / codeLora / Roboto Monofont-serif e font-monospace; não use monospace em toda a interface.
Body16px / 1.5Base padrão desde a revisão tipográfica 2.7.
H1 mobile40px / 48pxCSS 2.18.3 real abaixo de 576px.
H1 from 576px48px / 56pxCSS nativo medido; a tabela da documentação ainda indica entrelinha de 60px.
Responsive typography576px thresholdDiferente do limite compacto de 992px do Stepper.

Tokens semânticos nativos

Fonte
Nome / RegraValor / ConfiguraçãoUso
--bs-primaryhsl(210,100%,40%) = #0066ccCor da ação primária e dos links.
--bs-body-colorhsl(0,0%,10%)Cor padrão para leitura.
--bs-successhsl(160,100%,25%)Indica sucesso, não um estado de conclusão automático.
--bs-dangerhsl(350,60%,50%)Indica erro ou ação destrutiva.
--bs-warninghsl(36,100%,30%)Função de aviso, distinta do amarelo da paleta.
--bs-border-radius4pxTambém existem variantes pequenas de 2px e grandes de 8px.

Espaçamento e layout

Fonte
Nome / RegraValor / ConfiguraçãoUso
Utility sizes 0–50, 4, 8, 16, 24, 48pxCom a raiz padrão de 16px; por exemplo, p-3=1rem e p-5=3rem.
Responsive thresholds576 / 768 / 992 / 1200 / 1400pxDe sm a xxl.
Container maxima540 / 720 / 960 / 1176 / 1320pxCSS Italia real; xl difere do valor padrão de 1140px de Bootstrap.
Preview width900px maximumOpção da aplicação para um plano local curto, não um token oficial de contêiner.
Stepper compact modeBelow 992pxSomente o rótulo ativo e o índice textual ficam visíveis.

Estrutura do Stepper

Fonte
Nome / RegraValor / ConfiguraçãoUso
Root/headersteppers / steppers-headerO cabeçalho contém uma lista de etapas.
Stage statesconfirmed / activeO código da aplicação deve atualizá-las após a validação.
Mobile indexsteppers-indexMantenha n/total sincronizado com a etapa ativa.
Bodysteppers-content; aria-live=politeAnuncia mudanças no conteúdo de página única.
Navigationsteppers-nav; steppers-btn-prev / steppers-btn-nextAs classes definem a apresentação, não o encaminhamento automático do formulário.
03

sistema de design .italia Guia completo

Um guia prático para escolher, aplicar e avaliar este sistema em uma interface real.

DESIGN-designers-italia.md

Orientações completas, um ponto de partida para a implementação e links para o código-fonte.

Baixar o guia

sistema de design .italia Sistema e implementação

Designers Italia por meio de sua biblioteca de código

Designers Italia vai além de um pacote CSS: inclui orientações de design de serviços, kits e recursos de implementação. Este exemplo se concentra na implementação documentada de Bootstrap Italia, fixada na versão 2.18.3. Ele não sugere que a instalação da biblioteca conclua o design de um serviço público nem que atenda a todos os requisitos de um site municipal.

Com base neste guia de OpenDesign

Bootstrap Italia inclui e personaliza Bootstrap 5.2.3 na versão analisada. Não adicione outro pacote padrão de Bootstrap por cima. A prévia usa seus CSS nativos e arquivos de fonte Titillium Web fornecidos localmente, com um fluxo original de planejamento de visita à biblioteca em três etapas.

Consulte a especificação de apoio

sistema de design .italia Tipografia e valores exatos

Cada fonte tem uma função específica

Titillium Web é a família tipográfica padrão da interface. Lora é a opção serifada para textos mais longos, e Roboto Mono é usada em código ou conteúdo monoespaçado. A prévia carrega os pesos reais de Titillium Web que utiliza e mantém a licença da fonte, em vez de substituí-la silenciosamente por uma fonte do sistema.

O texto do corpo permanece em 16px. Os títulos mudam em 576px: em uma tela pequena, H1 tem 40px e entrelinha de 48px; depois, passa a 48px e entrelinha de 56px na versão instalada de CSS. A tabela da documentação indica entrelinha de 60px para desktop; a tabela de referência aqui registra a versão analisada e explica a diferença, em vez de misturar duas fontes.

Consulte a especificação de apoio

sistema de design .italia Etapas responsivas e espaçamento

Dois pontos de quebra resolvem problemas diferentes

O limite da tipografia é 576px, enquanto o Stepper altera a apresentação do cabeçalho abaixo de 992px. Em telas compactas, o rótulo atual e o índice n/total continuam visíveis. Os nomes das outras etapas não são espremidos em colunas ilegíveis. Quem visita pelo celular ainda precisa de um anúncio da etapa atual, fornecido pelo exemplo por meio do foco no título e de um texto de estado acessível.

As classes utilitárias de espaçamento seguem a escala rem verificada: 4, 8, 16, 24 e 48px para os tamanhos de 1 a 5, considerando o tamanho padrão da raiz. Os limites máximos dos contêineres da grade incluem 1176px em xl, em vez do valor padrão de Bootstrap de 1140px, muitas vezes lembrado de forma equivocada. O plano independente usa um limite mais estreito, de 900px, como uma escolha explícita da aplicação.

Consulte a especificação de apoio

sistema de design .italia Anatomia e responsabilidades do Stepper

O cabeçalho não controla o fluxo de trabalho

A estrutura documentada separa steppers-header, steppers-content e steppers-nav. Os itens da lista do cabeçalho recebem as classes confirmed e active; o índice informa a posição. Os botões anterior e próximo recebem suas classes específicas. Essas classes descrevem a apresentação. Cabe à aplicação decidir se o formulário atual é válido e se é possível avançar para uma etapa posterior.

O exemplo usa seções comuns para cada etapa e mantém os controles no DOM, ocultando as seções inativas. Assim, ao voltar à etapa da observação de acesso, o texto permanece. A etapa de revisão lê os controles existentes; não os recria com base em um resultado presumido do servidor.

html
<div class="steppers">
  <div class="steppers-header">
    <ul>
      <li class="confirmed">Visit type <span class="visually-hidden">Completed</span></li>
      <li class="active" aria-current="step">Access note <span class="visually-hidden">Current step</span></li>
      <li>Review</li>
    </ul>
    <span class="steppers-index" aria-hidden="true">2/3</span>
  </div>
  <div class="steppers-content" aria-live="polite">
    <h2>Add an access note</h2>
    <label for="note">Access note (optional)</label>
    <textarea id="note" class="form-control" rows="3"></textarea>
  </div>
  <nav class="steppers-nav" aria-label="Plan steps">
    <button class="btn btn-outline-primary steppers-btn-prev">Back</button>
    <button class="btn btn-primary steppers-btn-next">Continue</button>
  </nav>
</div>

Referência de código

Consulte a especificação de apoio

sistema de design .italia Validação e progresso significativo

Avance somente após fazer a escolha obrigatória

O tipo de visita é obrigatório. Se a pessoa tentar continuar sem escolhê-lo, a primeira etapa permanece ativa, uma mensagem de erro específica é exibida e o primeiro botão de opção recebe o foco. Ao escolher um tipo e continuar, a primeira etapa é marcada como concluída. A observação é opcional e pode ficar em branco; nesse caso, a revisão informa que nenhuma observação foi adicionada.

O botão Voltar leva à etapa anterior sem apagar a seleção nem a observação. Começar de novo limpa deliberadamente ambos e retorna ao início. A tela final é chamada de plano local: ela nunca afirma que uma reserva foi enviada, aprovada ou armazenada.

  1. Tente continuar sem selecionar um botão de opção e confira a mensagem de erro.
  2. Escolha um tipo de visita, adicione uma observação curta e abra a revisão.
  3. Volte à observação, confirme que o valor foi mantido e, depois, comece de novo para limpar o plano.

Consulte a especificação de apoio

sistema de design .italia Estado acessível e foco

Mantenha alinhadas a posição visual e a posição anunciada

O item ativo da lista recebe aria-current="step" e um rótulo da etapa atual oculto visualmente. As etapas anteriores recebem um texto de conclusão, além da classe confirmed. O índice numérico compacto fica oculto para tecnologias assistivas, pois o título atual e a semântica da etapa já indicam a posição; ele continua visível para orientação visual.

O corpo que muda usa aria-live="polite", conforme a orientação oficial para uma sequência de página única. O exemplo também move o foco para o novo título, oferecendo às pessoas que usam o teclado um ponto de início previsível para a leitura. Teste essa combinação com as tecnologias assistivas compatíveis para evitar anúncios repetitivos em formulários mais complexos.

  • Use botões reais para mudar de etapa e desative o botão Voltar na primeira etapa.
  • Mantenha os rótulos associados aos botões de opção e à área de texto; o texto do placeholder não substitui um rótulo.
  • Indique em texto os estados atual e concluído, não apenas pela cor azul ou por um ícone.

Consulte a especificação de apoio

sistema de design .italia Recursos e inicialização nativos

CSS, fontes e JavaScript opcional

O pacote fornece CSS, um script incluído, fontes de origem e um sprite SVG. Este exemplo de Stepper precisa de CSS e das fontes escolhidas; a navegação faz parte da lógica da aplicação. Outros componentes usam data-bs-toggle ou os atributos de dados documentados para inicialização automática. Não combine a inicialização automática com uma segunda instância manual do mesmo componente.

Ao usar módulos, importe apenas os componentes necessários para a aplicação. A documentação oficial observa que os métodos de transição retornam antes do fim da transição e que as chamadas feitas durante uma transição podem ser ignoradas. Aguarde o evento de conclusão correspondente antes de encadear ações dependentes nesses componentes; este Stepper simples não inventa uma API de transição nativa.

Consulte a especificação de apoio

sistema de design .italia Limites de integração

Use o kit sem sugerir que o serviço foi concluído

A documentação da biblioteca recomenda manter a versão atualizada e desaconselha depender de uma CDN pública em produção. A configuração fixa a versão verificada, e o exemplo local inclui os próprios recursos e licenças. Um serviço real ainda precisa de conteúdo planejado, tratamento de dados, validação no servidor e uma confirmação de envio.

O exemplo mostra uma visita genérica a uma biblioteca, sem logotipo municipal nem insígnia oficial. É um exemplo didático de OpenDesign, não um serviço de uma autoridade pública. Mantenha essa distinção em qualquer protótipo para que uma tela de revisão visualmente refinada não seja confundida com um registro de solicitação real.

Consulte a especificação de apoio

Exemplos de componentes do sistema de design sistema de design .italia

Estrutura do Stepper na segunda etapa

Os estados confirmado e ativo, além do índice para dispositivos móveis, devem ser sincronizados pelo código da aplicação.

html
<div class="steppers">
  <div class="steppers-header">
    <ul>
      <li class="confirmed">Visit type <span class="visually-hidden">Completed</span></li>
      <li class="active" aria-current="step">Access note <span class="visually-hidden">Current step</span></li>
      <li>Review</li>
    </ul>
    <span class="steppers-index" aria-hidden="true">2/3</span>
  </div>
  <div class="steppers-content" aria-live="polite">
    <h2>Add an access note</h2>
    <label for="note">Access note (optional)</label>
    <textarea id="note" class="form-control" rows="3"></textarea>
  </div>
  <nav class="steppers-nav" aria-label="Plan steps">
    <button class="btn btn-outline-primary steppers-btn-prev">Back</button>
    <button class="btn btn-primary steppers-btn-next">Continue</button>
  </nav>
</div>

Referência de código

Fluxo local completo de planejamento

CSS/fontes nativos, validação obrigatória dos botões de opção, nota opcional, revisão, voltar e reiniciar.

html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Prepare a library visit</title><link rel="stylesheet" href="vendor/bootstrap-italia-2.18.3/bootstrap-italia.min.css"><link rel="stylesheet" href="vendor/bootstrap-italia-2.18.3/fonts.css"><style>body{padding:32px 16px}main{max-width:900px;margin:auto}.steppers-content{padding:24px 0}.steppers-nav{display:flex;gap:16px;justify-content:space-between}.form-check{margin-bottom:16px}footer{font-size:14px;margin-top:32px;border-top:1px solid #ccc;padding-top:16px}[hidden]{display:none!important}.error{color:var(--bs-danger)}@media(max-width:575px){body{padding:24px 16px}}</style><main><p class="text-uppercase">Independent service example</p><h1>Prepare a library visit</h1><p class="lead">Choose a visit format, add a note and review your local plan.</p><div class="steppers"><div class="steppers-header"><ul id="steps"><li class="active" aria-current="step">Visit type <span class="visually-hidden">Current step</span></li><li>Access note</li><li>Review</li></ul><span class="steppers-index" id="index" aria-hidden="true">1/3</span></div><div class="steppers-content" aria-live="polite"><section data-step="0"><h2 tabindex="-1">Choose a visit type</h2><fieldset><legend class="visually-hidden">Visit type</legend><div class="form-check"><input id="guided" type="radio" name="visit" value="Guided introduction"><label for="guided">Guided introduction</label></div><div class="form-check"><input id="quiet" type="radio" name="visit" value="Quiet reading visit"><label for="quiet">Quiet reading visit</label></div></fieldset><p id="error" class="error" role="alert" hidden>Choose a visit type before continuing.</p></section><section data-step="1" hidden><h2 tabindex="-1">Add an access note</h2><p id="hint">Optional. Describe what would help you use the space; avoid sensitive personal information.</p><label for="note">Access note</label><textarea id="note" rows="3" class="form-control" aria-describedby="hint" maxlength="200"></textarea></section><section data-step="2" hidden><h2 tabindex="-1">Review your local plan</h2><dl><dt>Visit type</dt><dd id="review-type"></dd><dt>Access note</dt><dd id="review-note"></dd></dl><p>This is a local plan only. No booking or request has been sent.</p></section></div><nav class="steppers-nav" aria-label="Plan steps"><button id="back" class="btn btn-outline-primary steppers-btn-prev" disabled>Back</button><button id="next" class="btn btn-primary steppers-btn-next">Continue</button><button id="reset" class="btn btn-primary" hidden>Start again</button></nav></div><footer>Native Bootstrap Italia 2.18.3 CSS and Titillium Web. Original local planning flow; no municipal identity or booking service.</footer></main><script>let step=0;const labels=['Visit type','Access note','Review'];function render(){document.querySelectorAll('[data-step]').forEach(x=>x.hidden=Number(x.dataset.step)!==step);document.querySelectorAll('#steps li').forEach((li,i)=>{li.className=i===step?'active':i<step?'confirmed':'';li.removeAttribute('aria-current');li.textContent=labels[i];const state=document.createElement('span');state.className='visually-hidden';state.textContent=i===step?' Current step':i<step?' Completed':'';li.append(state);if(i===step)li.setAttribute('aria-current','step')});document.querySelector('#index').textContent=(step+1)+'/3';document.querySelector('#back').disabled=step===0;document.querySelector('#next').hidden=step===2;document.querySelector('#reset').hidden=step!==2;if(step===2){document.querySelector('#review-type').textContent=document.querySelector('[name=visit]:checked').value;document.querySelector('#review-note').textContent=document.querySelector('#note').value.trim()||'No note added'}document.querySelector('[data-step="'+step+'"] h2').focus()}document.querySelector('#next').onclick=()=>{if(step===0&&!document.querySelector('[name=visit]:checked')){document.querySelector('#error').hidden=false;document.querySelector('#guided').focus();return}document.querySelector('#error').hidden=true;step++;render()};document.querySelector('#back').onclick=()=>{step--;render()};document.querySelector('#reset').onclick=()=>{document.querySelectorAll('[name=visit]').forEach(x=>x.checked=false);document.querySelector('#note').value='';step=0;render()};</script></html>

Referência de código

04

Configuração do agente sistema de design .italia

Ponto de partida para implementação

Configuração nativa de CSS e das fontes. A navegação do Stepper é lógica da aplicação; a seguir, há um exemplo completo funcional. O ZIP do exemplo completo em Sources também inclui as dependências exatas da pré-visualização e o documento completo. Extraia os arquivos, execute python3 -m http.server 8080 nesse diretório e abra http://localhost:8080/designers-italia.html. Não abra exemplos baseados em módulos usando file://.

bash
npm install [email protected]
# Copy dist/css/bootstrap-italia.min.css into public/vendor.
# Copy the needed src/fonts/Titillium_Web WOFF2 files and declare @font-face.
# CSS is sufficient for the Stepper presentation; application code owns navigation.
# For data-bs-toggle widgets, load dist/js/bootstrap-italia.bundle.min.js once.

Um prompt para seu projeto

Prompt para agente de IA
Use Bootstrap Italia 2.18.3, CSS nativo e Titillium Web. Crie a estrutura documentada de steppers/cabeçalho/conteúdo/nav com estados ativo e confirmado e índice sincronizado para dispositivos móveis. Gerencie a validação e a navegação no código da aplicação, preserve os valores ao voltar e rotule o estado final de acordo com uma resposta real do backend. Não misture um segundo runtime de Bootstrap nem afirme que uma revisão local foi enviada.
05

sistema de design .italia Fontes e escopo

Exemplo independente de OpenDesign com foco em Bootstrap Italia. Não representa uma autoridade pública nem um serviço real de agendamento.