Sitio de marketing · Nuevo recurso

Sistema de diseño de Mozilla Protocol.

Una guía editorial de Protocol con pilas tipográficas, escalas de espaciado y contenedores reales, una página de lectura adaptable con ilustraciones y un ejemplo completo de formulario nativo de CSS.

Guía de OpenDesign8 capítulos39 entradas de referenciaGuía de aplicación original
01

Vista previa de la interfaz del sistema de diseño de Mozilla Protocol

Compara la densidad de lectura, amplía los detalles explicativos y prueba los estados de correo electrónico no válido y válido sin suscribirte.

Una página de lectura ilustrada y un formulario para recibir novedadesAbrir ejemplo completo
Mozilla Protocol 22.0.0 nativo CSS y fuentes del paquete; HTML, ilustración y JavaScript originales. El formulario no envía datos por la red. · Referencia de implementación
02

Referencia de diseño del sistema de diseño de Mozilla Protocol

JSON de tokens publicados de Mozilla Protocol 22.0.0 y CSS nativo. Los nombres con prefijo de dólar son tokens de Sass. El ejemplo original usa el tema tipográfico de Mozilla; los controles de densidad y la ilustración circular son decisiones de la aplicación.

Familias tipográficas

Fuente
Nombre / ReglaValor / ConfiguraciónUso
$font-stack-baseInter, X-LocaleSpecific, sans-serifElige explícitamente la familia de Mozilla o la de Firefox; no uses una fuente para titulares en textos largos.
$font-stack-firefoxMetropolis, X-LocaleSpecific, sans-serifElige explícitamente la familia de Mozilla o la de Firefox; no uses una fuente para titulares en textos largos.
$font-stack-mozilla-headline'Mozilla Headline', 'Helvetica Neue', Arial, X-LocaleSpecific, sans-serifElige explícitamente la familia de Mozilla o la de Firefox; no uses una fuente para titulares en textos largos.
$font-stack-mozilla-text'Mozilla Text', 'Helvetica Neue', Arial, X-LocaleSpecific, sans-serifElige explícitamente la familia de Mozilla o la de Firefox; no uses una fuente para titulares en textos largos.
$font-stack-monoConsolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospaceElige explícitamente la familia de Mozilla o la de Firefox; no uses una fuente para titulares en textos largos.

Espaciado de los componentes

Fuente
Nombre / ReglaValor / ConfiguraciónUso
$spacing-xs4pxEspacio dentro de un componente o entre elementos estrechamente relacionados.
$spacing-sm8pxEspacio dentro de un componente o entre elementos estrechamente relacionados.
$spacing-md16pxEspacio dentro de un componente o entre elementos estrechamente relacionados.
$spacing-lg24pxEspacio dentro de un componente o entre elementos estrechamente relacionados.
$spacing-xl32pxEspacio dentro de un componente o entre elementos estrechamente relacionados.
$spacing-2xl48pxEspacio dentro de un componente o entre elementos estrechamente relacionados.

Ritmo de diseño a gran escala

Fuente
Nombre / ReglaValor / ConfiguraciónUso
$layout-2xs16pxUsa separaciones mayores entre secciones editoriales; son distintas del espaciado entre componentes.
$layout-xs24pxUsa separaciones mayores entre secciones editoriales; son distintas del espaciado entre componentes.
$layout-sm32pxUsa separaciones mayores entre secciones editoriales; son distintas del espaciado entre componentes.
$layout-md48pxUsa separaciones mayores entre secciones editoriales; son distintas del espaciado entre componentes.
$layout-lg64pxUsa separaciones mayores entre secciones editoriales; son distintas del espaciado entre componentes.
$layout-xl96pxUsa separaciones mayores entre secciones editoriales; son distintas del espaciado entre componentes.
$layout-2xl192pxUsa separaciones mayores entre secciones editoriales; son distintas del espaciado entre componentes.

Anchos del contenido

Fuente
Nombre / ReglaValor / ConfiguraciónUso
$content-xs304pxElige un ancho máximo legible para el contenido real en lugar de estirar cada bloque de texto hasta el contenedor más grande.
$content-sm432pxElige un ancho máximo legible para el contenido real en lugar de estirar cada bloque de texto hasta el contenedor más grande.
$content-md688pxElige un ancho máximo legible para el contenido real en lugar de estirar cada bloque de texto hasta el contenedor más grande.
$content-lg928pxElige un ancho máximo legible para el contenido real en lugar de estirar cada bloque de texto hasta el contenedor más grande.
$content-xl1152pxElige un ancho máximo legible para el contenido real en lugar de estirar cada bloque de texto hasta el contenedor más grande.
$content-max1440pxElige un ancho máximo legible para el contenido real en lugar de estirar cada bloque de texto hasta el contenedor más grande.

Puntos de interrupción de pantalla

Fuente
Nombre / ReglaValor / ConfiguraciónUso
$screen-xs320pxAnchos de vista publicados. Los mixins de cada componente pueden adaptarse en puntos seleccionados.
$screen-sm480pxAnchos de vista publicados. Los mixins de cada componente pueden adaptarse en puntos seleccionados.
$screen-md768pxAnchos de vista publicados. Los mixins de cada componente pueden adaptarse en puntos seleccionados.
$screen-lg1024pxAnchos de vista publicados. Los mixins de cada componente pueden adaptarse en puntos seleccionados.
$screen-xl1312pxAnchos de vista publicados. Los mixins de cada componente pueden adaptarse en puntos seleccionados.

Radio de esquina

Fuente
Nombre / ReglaValor / ConfiguraciónUso
$border-radius-xs2pxUsa el radio adecuado para el componente y mantén la ilustración creada por separado de las formas de la interfaz.
$border-radius-sm4pxUsa el radio adecuado para el componente y mantén la ilustración creada por separado de las formas de la interfaz.
$border-radius-md8pxUsa el radio adecuado para el componente y mantén la ilustración creada por separado de las formas de la interfaz.
$border-radius-lg16pxUsa el radio adecuado para el componente y mantén la ilustración creada por separado de las formas de la interfaz.

Utilidades tipográficas y selección de tema

Fuente
Nombre / ReglaValor / ConfiguraciónUso
$brand-theme: mozillaMozilla Headline + Mozilla TextContenido editorial con el tema de Mozilla; la vista previa carga las fuentes del paquete oficial.
$brand-theme: firefoxMetropolis + InterLa tipografía con el tema de Firefox es una opción de marca independiente.
mzp-u-title-lgResponsive title utilityÚsala en el titular editorial principal; no deduzcas la semántica del encabezado a partir de su tamaño visual.
mzp-u-title-xsSmall title utilityLas dos secciones complementarias aplican esta clase a elementos h2 semánticos.
mzp-u-title-2xsCompact title utilityEl artículo breve aplica esta clase a su h3.
Comfortable / Compact sample16px / 1.6 and 14px / 1.4Preferencia de lectura original; no son dos temas oficiales de Protocol.
03

Guía completa del sistema de diseño de Mozilla Protocol

Una guía práctica para elegir, aplicar y revisar este sistema en una interfaz real.

DESIGN-mozilla-protocol.md

Orientación completa, un punto de partida para la implementación y enlaces al código fuente.

Descargar la guía

Composición editorial del sistema de diseño de Mozilla Protocol

Empieza con una jerarquía editorial legible

Protocol se usa en superficies editoriales y de marketing, además de ofrecer compatibilidad con la interfaz de usuario. El ejemplo comienza con un titular grande y una ilustración circular original, y luego pasa a la vista previa de un artículo y a un formulario para recibir novedades. Esta composición deja espacio para el mensaje antes de pedir al lector que interactúe con los controles. Es distinta de un panel de administración denso.

De esta guía de OpenDesign

Distingue el tema de marca de la propuesta de la aplicación

El ejemplo usa mzp-t-mozilla y la tipografía nativa de Protocol. El artículo, la ilustración y la preferencia de densidad son contenido original de la aplicación. Ni los nombres de clases nativas ni los archivos de fuentes convierten el servicio en uno oficial de Mozilla. El pie de página aclara el alcance y la acción para recibir novedades solo muestra una confirmación de ejemplo.

Fuentes y utilidades para títulos del sistema de diseño de Mozilla Protocol

Elige la combinación tipográfica específica de la marca

Protocol 22 exporta las familias Mozilla Headline y Mozilla Text para Mozilla, y Metropolis e Inter para Firefox. El ejemplo carga las fuentes incluidas en el paquete. Mantén separados los roles de titular y cuerpo: usar una fuente de exhibición en todos los párrafos elimina el contraste que hace útil la jerarquía editorial.

Mantén la semántica de los encabezados independiente de su tamaño visual

El encabezado principal es un h1 con mzp-u-title-lg. Las secciones complementarias son h2 con mzp-u-title-xs, y el título del artículo es h3 con mzp-u-title-2xs. Las utilidades adaptables pueden cambiar la escala visual sin alterar esa estructura. El control de densidad de lectura solo modifica los párrafos de ejemplo; no cambia el tamaño de toda la página ni de sus controles.

  • h1 introduce la página.
  • h2 divide la vista previa de lectura y el formulario.
  • h3 identifica el fragmento del artículo.

Color e ilustración del sistema de diseño de Mozilla Protocol

Usa la ilustración como contenido editorial

El degradado circular es una ilustración original de CSS con una descripción accesible breve. Su transición de tonos cálidos al morado no se presenta como un nuevo logotipo oficial de Mozilla ni como un token exportado por Protocol. El resto de la página usa superficies neutras y sobrias para que la ilustración y la acción principal conserven un papel claro.

Da un significado propio al estado del formulario

El error local del correo electrónico incluye una explicación escrita y un borde de error visible. El éxito se muestra en un bloque de confirmación independiente que incluye la dirección de ejemplo introducida e indica que no se envió ningún correo. Una imagen principal colorida no debe competir con el estado de error ni hacer que resulte ambiguo si el formulario se envió correctamente.

Mozilla Protocol Escalas de componentes y diseño de página del sistema de diseño

Usa deliberadamente las dos escalas de espaciado

Los intervalos de espaciado publicados para los componentes son 4, 8, 16, 24, 32 y 48px. Una escala de diseño de página independiente se extiende hasta 64, 96 y 192px. Usa la escala menor dentro de formularios y tarjetas, y el ritmo más amplio entre secciones editoriales. Aumentar cada espacio pequeño hasta alcanzar un valor de diseño de página debilitaría la relación entre una etiqueta y su campo.

Limita la longitud de línea antes de añadir más columnas

Mozilla Protocol Botones, detalles y formulario del sistema de diseño

Conserva la estructura real del formulario

El ejemplo del boletín es un formulario nativo con una etiqueta visible, un campo de correo electrónico, una nota explicativa, un texto de error y un botón de envío. Protocol aplica estilos a los componentes; la aplicación valida y muestra el resultado local. La acción principal usa un enlace porque lleva a una sección de la página, mientras que el envío se realiza con un botón.

Usa un elemento desplegable sencillo para la explicación complementaria

El elemento desplegable «Qué cambia» es un par nativo de details/summary. Explica los valores personalizados de párrafo cómodo y compacto sin interrumpir el artículo principal. No es una pestaña de navegación ficticia ni un requisito oculto; el formulario y los controles de densidad siguen siendo utilizables tanto si el elemento está abierto como cerrado.

Mozilla Protocol Estados de lectura y validación del sistema de diseño

Cambia una preferencia de lectura a la vez

Los dos botones de densidad forman un grupo con etiqueta y exponen aria-pressed. Al cambiar a Compacto, solo se modifican en el artículo el tamaño de fuente, la altura de línea y el espaciado inferior de los párrafos. El texto, el título y el campo del formulario permanecen en su sitio. El ejemplo distingue deliberadamente esta preferencia del cambio entre los temas de marca Mozilla y Firefox.

Haz predecible la recuperación del formulario local

Una dirección no válida muestra el error y enfoca el campo. Al editarla, se borra el error obsoleto y se oculta cualquier confirmación anterior. Una dirección válida muestra un resultado generado localmente y enfoca ese resultado. «Probar otra dirección» borra el formulario, elimina el estado de error y devuelve el foco al campo; esto no implica una suscripción asíncrona.

  1. Envía una dirección vacía o con formato incorrecto y lee el error del campo.
  2. Introduce una dirección de ejemplo y previsualiza la confirmación local.
  3. Usa «Probar otra dirección» para restablecer el formulario y devolver el foco al campo.

Mozilla Protocol Controles editoriales accesibles del sistema de diseño

Asigna funciones distintas a la ilustración y a los controles

La ilustración es un elemento con función de imagen y texto alternativo conciso. Los botones de densidad, el elemento desplegable y la acción de envío son controles reales. El campo de correo electrónico hace referencia tanto a la nota como al error mediante aria-describedby. Un contorno de foco visible complementa los estilos nativos para el uso con teclado.

Mantén un orden significativo cuando se apile el diseño

El orden del documento es: titular, vista previa de lectura, explicación y formulario. En móviles se mantiene el mismo orden; CSS no adelanta el formulario al contexto. La ilustración móvil de 180px es un apoyo editorial decorativo, no un obstáculo de ancho fijo que provoque desplazamiento horizontal.

Mozilla Protocol Integración del CSS del sistema de diseño

Incluye los recursos publicados con el ejemplo

El archivo de entrada proporcionado importa un tema compilado, protocol.css y protocol-components.css, y después la hoja de estilos de la aplicación. Protocol 22 requiere las propiedades personalizadas del tema en :root; añadir únicamente una clase de marca heredada deja la tipografía sin resolver. Compila protocol-theme.scss antes de iniciar Vite. Un empaquetador que admita módulos resuelve las URL de fuentes e imágenes. Los bloques HTML, JavaScript y CSS de abajo incluyen el código fuente completo del ejemplo; no hay un backend de boletín oculto ni un proveedor de estado específico del paquete.

Amplía el formulario solo cuando exista un servicio de suscripción real

Mozilla Protocol Ejemplos de componentes del sistema de diseño

index.html — página editorial completa

Artículo semántico, controles de densidad, elemento desplegable y formulario local para el boletín con una ilustración original de CSS.

HTML
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Reading specimen</title></head>
<body>
<main class="reading-example mzp-t-mozilla">
  <header class="reading-top">
    <strong>MOZILLA PROTOCOL · EDITORIAL SPECIMEN</strong
    ><span>Original example by OpenDesign</span>
  </header>
  <section class="reading-hero">
    <div>
      <h1 class="mzp-u-title-lg">A little more room to read.</h1>
      <p>
        Make space for useful ideas, quieter pages, and a reading rhythm that
        feels like yours.
      </p>
      <a class="mzp-c-button" href="#reading-controls"
        >Explore the reading preview</a
      >
    </div>
    <div
      class="orb"
      role="img"
      aria-label="Original warm-to-purple circular illustration"
    ></div>
  </section>
  <div class="reading-main">
    <section id="reading-controls">
      <h2 class="mzp-u-title-xs">Choose your reading rhythm</h2>
      <p>
        Compare two application-defined densities using the same short article.
      </p>
      <div class="density-options" role="group" aria-label="Reading density">
        <button
          class="mzp-c-button mzp-t-secondary"
          data-density="comfortable"
          aria-pressed="true"
        >
          Comfortable</button
        ><button
          class="mzp-c-button mzp-t-secondary"
          data-density="compact"
          aria-pressed="false"
        >
          Compact
        </button>
      </div>
      <article id="article-sample">
        <h3 class="mzp-u-title-2xs">The open page</h3>
        <p>
          A useful page gives an idea enough room to breathe. Its headings show
          the path, its paragraphs keep a readable measure, and its controls
          remain easy to find.
        </p>
        <p>
          Changing density should preserve the story. This preview adjusts
          paragraph size and spacing without replacing the article or changing
          your place in the task.
        </p>
      </article>
      <details>
        <summary>What changes in this example?</summary>
        <p>
          Comfortable uses 16px text with 1.6 line height. Compact uses 14px
          with 1.4. These are example reading preferences, not separate official
          Protocol themes.
        </p>
      </details>
    </section>
    <aside class="signup">
      <h2 class="mzp-u-title-xs">Preview a reading digest</h2>
      <p>
        Try the form styling and local validation. No subscription is created.
      </p>
      <form id="reading-form" novalidate>
        <label for="email">Email address</label
        ><input
          id="email"
          type="email"
          autocomplete="email"
          aria-describedby="email-note email-error"
        />
        <p class="note" id="email-note">
          Use an example address. Nothing will be sent.
        </p>
        <p id="email-error" class="error" role="alert" hidden>
          Enter an email address, such as [email protected].
        </p>
        <button class="mzp-c-button" type="submit">Preview confirmation</button>
      </form>
      <div id="confirmation" tabindex="-1" role="status" hidden>
        Local preview confirmed for <strong></strong>. No email was sent.<button
          id="reset"
          class="mzp-c-button mzp-t-secondary"
          type="button"
        >
          Try another address
        </button>
      </div>
    </aside>
  </div>
  <footer class="reading-footer">
    Native Mozilla Protocol 22.0.0 CSS and fonts. Original illustration, copy
    and JavaScript; not an official Mozilla service.
  </footer>
</main>
<script type="module" src="/src/main.js"></script>
</body></html>

Referencia de código

  • Guárdalo como index.html en la raíz del proyecto. Los dos bloques siguientes corresponden a src/main.js y src/protocol.css.

main.js — recursos nativos y comportamiento local

Importa los estilos oficiales e implementa la selección de densidad, la validación, el foco y el restablecimiento sin enviar datos.

js
import "./protocol-theme.css";
import "@mozilla-protocol/core/protocol/css/protocol.css";
import "@mozilla-protocol/core/protocol/css/protocol-components.css";
import "./protocol.css";
const form = document.querySelector("#reading-form"),
  error = document.querySelector("#email-error"),
  input = document.querySelector("#email"),
  result = document.querySelector("#confirmation");
form.addEventListener("submit", (event) => {
  event.preventDefault();
  const value = input.value.trim();
  if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
    error.hidden = false;
    input.setAttribute("aria-invalid", "true");
    input.focus();
    return;
  }
  error.hidden = true;
  input.removeAttribute("aria-invalid");
  result.hidden = false;
  result.querySelector("strong").textContent = value;
  result.focus();
});
input.addEventListener("input", () => {
  error.hidden = true;
  input.removeAttribute("aria-invalid");
  result.hidden = true;
});
document.querySelector("#reset").addEventListener("click", () => {
  form.reset();
  result.hidden = true;
  error.hidden = true;
  input.removeAttribute("aria-invalid");
  input.focus();
});
document.querySelectorAll("[data-density]").forEach((button) =>
  button.addEventListener("click", () => {
    document
      .querySelectorAll("[data-density]")
      .forEach((b) => b.setAttribute("aria-pressed", String(b === button)));
    document
      .querySelector("#article-sample")
      .classList.toggle("compact", button.dataset.density === "compact");
  }),
);

Referencia de código

  • Este comportamiento forma parte de la aplicación JavaScript, no de un servicio de boletín de Protocol.

protocol.css — composición original

Diseño adaptable de página, preferencias de lectura e ilustración circular original.

css
[hidden] { display: none !important; }
body {
  margin: 0;
}
.reading-example {
  background: #fff;
  color: #000;
}
.reading-top {
  padding: 24px;
  border-bottom: 1px solid #cdcdd4;
  display: flex;
  justify-content: space-between;
  gap: 16px;
  font-size: 12px;
}
.reading-hero {
  display: grid;
  grid-template-columns: minmax(0, 1.3fr) minmax(200px, 0.7fr);
  gap: 48px;
  align-items: center;
  padding: 48px;
  max-width: 1152px;
  margin: auto;
}
.reading-hero h1 {
  max-width: 680px;
}
.reading-hero p {
  max-width: 580px;
}
.orb {
  aspect-ratio: 1;
  background: radial-gradient(
    circle at 33% 32%,
    #ffea80 0 10%,
    #ff8a50 30%,
    #ff298a 55%,
    #7542e5 82%
  );
  border-radius: 50%;
  position: relative;
  box-shadow: 16px 24px 0 #f0f0f4;
}
.orb:after {
  content: "";
  position: absolute;
  inset: 23%;
  border-radius: 50%;
  background: white;
}
.reading-main {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, 0.8fr);
  gap: 48px;
  max-width: 1152px;
  margin: auto;
  padding: 0 48px 48px;
}
.density-options {
  display: flex;
  gap: 8px;
  margin: 16px 0;
}
.density-options button {
  font-size: 12px;
  padding: 8px 12px;
}
.density-options button[aria-pressed="true"] {
  box-shadow: 0 0 0 2px #0060df;
}
#article-sample {
  padding: 24px;
  border: 1px solid #cdcdd4;
  border-radius: 8px;
  background: #f9f9fb;
}
#article-sample p {
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 16px;
}
#article-sample.compact p {
  font-size: 14px;
  line-height: 1.4;
  margin-bottom: 8px;
}
.signup {
  padding: 24px;
  background: #e7dfff;
  border-radius: 8px;
}
.signup input {
  width: 100%;
  margin-bottom: 8px;
}
.signup label {
  display: block;
  font-weight: 700;
  margin-bottom: 8px;
}
.signup .note {
  font-size: 12px;
  line-height: 1.5;
}
.signup .error {
  color: #a4000f;
  font-size: 14px;
  font-weight: 700;
}
.signup input[aria-invalid="true"] {
  border-color: #a4000f;
  box-shadow: 0 0 0 2px #a4000f;
}
.signup .mzp-c-button {
  width: 100%;
  margin: 8px 0;
}
#confirmation {
  padding: 16px;
  background: #e3fff3;
  margin-top: 16px;
  border-left: 4px solid #008a46;
  overflow-wrap: anywhere;
}
.reading-footer {
  padding: 24px;
  border-top: 1px solid #cdcdd4;
  font-size: 12px;
}
.reading-example details {
  margin-top: 24px;
}
.reading-example summary {
  cursor: pointer;
  font-weight: 700;
}
.reading-example details p {
  font-size: 14px;
  margin-top: 12px;
}
button:focus-visible,
input:focus-visible,
summary:focus-visible {
  outline: 3px solid #0060df;
  outline-offset: 4px;
}
@media (max-width: 760px) {
  .reading-hero {
    grid-template-columns: 1fr;
    padding: 32px 24px;
    gap: 24px;
  }
  .orb {
    width: 180px;
    justify-self: center;
    box-shadow: 8px 12px 0 #f0f0f4;
  }
  .reading-main {
    grid-template-columns: 1fr;
    padding: 0 24px 32px;
    gap: 32px;
  }
  .reading-top {
    flex-wrap: wrap;
  }
  .reading-hero h1 {
    font-size: 36px;
  }
  .density-options {
    flex-wrap: wrap;
  }
}

Referencia de código

  • Las decisiones de densidad y diseño de página de la aplicación se identifican por separado de los tokens Sass publicados.

protocol-theme.scss — tema raíz de Mozilla obligatorio

Compílalo en src/protocol-theme.css antes de iniciar la aplicación.

scss
@use '@mozilla-protocol/core/protocol/css/includes/config' with ($brand-theme: 'mozilla');
@use '@mozilla-protocol/core/protocol/css/includes/themes';

Referencia de código

  • La configuración de Sass selecciona la marca; esto no es un cambio de clase en tiempo de ejecución.
04

Mozilla Protocol Configuración del agente del sistema de diseño

Punto de partida para la implementación

Las fuentes nativas de CSS y el script original se empaquetaron para la vista previa local. Usa una versión de Node.js compatible con tu versión de Vite. Si redistribuyes una compilación, conserva la licencia del paquete y la atribución de los recursos.

sh
npm create vite@latest protocol-reading -- --template vanilla
cd protocol-reading
npm install
npm install @mozilla-protocol/[email protected]
npm install --save-dev sass
npx sass --load-path=node_modules src/protocol-theme.scss src/protocol-theme.css
# Replace index.html; add src/main.js and src/protocol.css from the full examples.
npm run dev

Una instrucción para tu proyecto

Instrucción para el agente
Crea una página editorial con Mozilla Protocol 22.0.0. Consulta las referencias reales de tipografía, espaciado y contenedores. Usa la composición completa suministrada de HTML/CSS/JS como punto de partida, conserva los encabezados semánticos y las etiquetas de formulario visibles, y distingue las decisiones originales de ilustración y densidad de los tokens oficiales. Mantén una validación local transparente; integra un servicio de suscripción real solo cuando se hayan definido los requisitos del servicio y del consentimiento.
05

Fuentes y alcance del sistema de diseño Mozilla Protocol

Guía de aplicación de OpenDesign para Mozilla Protocol 22.0.0. El ejemplo utiliza CSS publicado y las fuentes incluidas, con texto, ilustración y comportamiento de formulario local originales. No es un producto, boletín ni servicio de suscripción de Mozilla; los derechos de marca y de los recursos pertenecen a sus respectivos titulares.