Personalizar la UI de ChatGPT / Claude / Gemini — chats más anchos, mejores fuentes, ocultar los upsells
Pasas 4 horas al día en ChatGPT, Claude o Gemini. Cada UI predeterminada toma decisiones orientadas al novato: burbujas de mensajes estrechas (~700px en un monitor de 1920px), sans-serif fina en los bloques de código (entornas los ojos para distinguir l de 1), banners «Upgrade to Pro» que imploran una suscripción. Todo resoluble en 5 minutos con JustZix. Reglas CSS + observer JS, guardados una vez, funcionan para siempre. Sin tracking, sin cuenta, sin trucos «powered by».
ChatGPT (chat.openai.com / chatgpt.com) — 3 reglas CSS
Match de dominio: *://chatgpt.com/* y *://chat.openai.com/* (dominio legacy).
1. Burbujas de mensajes más anchas (max-width 1200px)
/* Default ChatGPT: max-width ~768px. Power user en 1080p+ = desperdiciado */
.text-message, [data-message-author-role] > div {
max-width: min(1200px, 92vw) !important;
}
/* También el container de input del prompt */
form .stretch, form[data-type="unified-composer"] {
max-width: min(1200px, 92vw) !important;
}
2. Monospace para los bloques de código (Fira Code con ligaduras)
pre code, code, .markdown code, .prose code {
font-family: 'Fira Code', 'JetBrains Mono', ui-monospace, monospace !important;
font-variant-ligatures: contextual !important;
font-size: 14px !important;
line-height: 1.6 !important;
}
/* Más padding en los bloques de código = lectura más fácil */
pre {
padding: 16px !important;
border-radius: 8px !important;
}
3. Ocultar el banner «Upgrade to Plus» + los chips de sugerencias
/* Banner en lo alto de la sidebar «Upgrade your plan» */
nav a[href*="upgrade"], nav button[aria-label*="Upgrade"],
[data-testid="upgrade-button"], [class*="upgrade-banner"] {
display: none !important;
}
/* Cuadrícula de prompts sugeridos sobre el input — estorbo para los power users */
[class*="suggestions"], [class*="prompt-card"] {
display: none !important;
}
Claude.ai — chat ancho + mantener la sidebar
Dominio: *://claude.ai/*. Claude usa por defecto un chat con max-width 720px incluso en 4K. Lo resolvemos:
/* Área principal de la conversación */
.h-screen [class*="max-w-"], main [class*="max-w-3xl"],
[data-testid="conversation"] > div {
max-width: min(1180px, 90vw) !important;
}
/* Bloques de código — Claude ya tiene monospace, pero demasiado pequeña y sin ligaduras */
pre, code {
font-family: 'Fira Code', 'JetBrains Mono', ui-monospace, monospace !important;
font-variant-ligatures: contextual !important;
}
pre {
font-size: 13px !important;
line-height: 1.55 !important;
}
/* Panel Artifact (panel lateral derecho) más ancho cuando está abierto */
[data-testid="artifact-panel"] {
width: 50% !important;
min-width: 600px !important;
}
Bonus: Ctrl+Enter envía el mensaje (default Enter = salto de línea en el textarea de Claude). Si prefieres solo Enter:
// Regla JS en claude.ai
document.addEventListener('keydown', (e) => {
if (e.key === 'Enter' && !e.shiftKey && !e.ctrlKey && e.target.tagName === 'TEXTAREA') {
// Solo cuando el textarea tiene texto (permite Enter en un textarea vacío)
if (e.target.value.trim()) {
e.preventDefault();
const sendBtn = document.querySelector('button[aria-label*="end"], button[type="submit"]');
if (sendBtn) sendBtn.click();
}
}
}, true);
Gemini (gemini.google.com) — el default menos perdonable
Dominio: *://gemini.google.com/*. Gemini tiene el peor default — chat enjaulado en ~640px en un 4K, con bajo contraste.
/* Chat más ancho */
[class*="conversation-container"], chat-window, main {
max-width: min(1240px, 92vw) !important;
}
[class*="user-query"], [class*="model-response"] {
max-width: 100% !important;
}
/* Mejor contraste del texto — el default Gemini es #5f6368 sobre #ffffff (3.5:1, falla WCAG AA) */
.markdown, [class*="response-content"] {
color: #202124 !important;
}
/* Colores de los bloques de código — Gemini tiene un syntax highlighting de bajo contraste */
pre code .keyword, pre code .token.keyword { color: #d73a49 !important; }
pre code .string, pre code .token.string { color: #032f62 !important; }
pre code .comment, pre code .token.comment { color: #6a737d !important; font-style: italic !important; }
Caso de uso 1 — TOGGLE3 para cambiar el ancho
A veces estrecho (lees long-form), a veces ancho (código). TOGGLE3 con 3 estados:
// Acción TOGGLE3 «📐 Ancho»
states[0] = { label: 'Narrow', value: '760' }
states[1] = { label: 'Wide', value: '1180' }
states[2] = { label: 'Max', value: '92vw' }
// Code:
document.documentElement.style.setProperty('--jz-chat-width',
value.endsWith('vw') ? value : value + 'px');
Y la regla CSS usa esa variable:
main, [class*="conversation"] {
max-width: var(--jz-chat-width, 1180px) !important;
}
3 clics = 3 anchos. La memory por dominio conserva tu última elección.
Caso de uso 2 — SLIDER para el control del tamaño de la fuente
Bloques de código demasiado pequeños = entornas los ojos. SLIDER 10-20px:
// Acción SLIDER «🔤 Tamaño código»
min: 10, max: 20, step: 1, defaultValue: 14, unit: 'px'
code: |
document.documentElement.style.setProperty('--jz-code-size', value + 'px');
Regla CSS:
pre, code, pre code { font-size: var(--jz-code-size, 14px) !important; }
Arrastra el slider → vista previa en vivo. Perfecto durante un screen-share con tu equipo (zoom hasta 18-20px, fácil de leer desde lejos).
Caso de uso 3 — Output Console como diario de los prompts
Truco de power user muy específico: loguea cada mensaje que envías en la Output Console para un historial de los prompts:
// Regla JS
const observer = new MutationObserver((mutations) => {
for (const m of mutations) {
for (const node of m.addedNodes) {
if (node.nodeType !== 1) continue;
const userMsg = node.matches('[data-message-author-role="user"]')
? node : node.querySelector('[data-message-author-role="user"]');
if (userMsg && !userMsg.dataset.jzLogged) {
userMsg.dataset.jzLogged = '1';
const txt = userMsg.textContent.trim().slice(0, 200);
JUSTZIX.log(`[prompt] ${txt}${txt.length === 200 ? '…' : ''}`);
}
}
}
});
observer.observe(document.body, { childList: true, subtree: true });
JUSTZIX.info('Diario de los prompts activo.');
Abre un pane Output Console enganchado a un lado → ves el historial de tus prompts (truncados a 200 caracteres). Copia-pega en un documento al final del día. Cero tracking off-server.
Trampas
- Los selectores cambian. Las apps de chat lanzan a menudo restylings de la UI cada pocas semanas.
[data-message-author-role]es estable (basado en ARIA), pero[class*="upgrade-banner"]matchea cualquier cosa con «upgrade-banner» en una clase — frágil. Pruébalo mensualmente. - !important es el último recurso. Las apps de chat IA usan Tailwind con clases con sufijo hash — tus overrides deben ganar en especificidad. Además: algunos estilos son inline (atributo style) — entonces ayuda !important + un selector :where().
- Override del modo oscuro. Si la app tiene un toggle de modo oscuro (Claude, ChatGPT), tu color: en el CSS puede entrar en conflicto con el tema. Usa las variables CSS de la página si están disponibles:
color: var(--text-primary, #202124) !important. - MutationObserver puede ser costoso. Las apps de chat renderizan cientos de nodos por segundo durante una respuesta en streaming. Throttle/filtra en el callback.
- Single-page app + auto-reload. Las reglas CSS de JustZix se aplican una vez al cargar. Un cambio de ruta SPA puede renderizar una nueva nav sin una recarga completa. La regla CSS se mantiene activa (tag style en el head), pero si usas una regla JS para la limpieza del DOM → te hace falta un MutationObserver o un listener de cambio de URL (popstate / hashchange).
Qué hacer después
Las 3 apps de chat IA más usadas, un setup JustZix por app. Mira también los artículos relacionados:
- Oculta los banners de cookies — mismo esquema (CSS + !important) para los overlays molestos
- TOGGLE3 — switcher de 3 estados (ejemplo arriba)
- SLIDER — rango nativo para el tamaño de la fuente
- Mini-IDE en la pestaña — mapa completo de las herramientas JustZix
Instala JustZix — pega las reglas de este artículo y las apps de chat IA tendrán exactamente el aspecto que quieres. Sin cuenta, sin servidor, sin tracking.
Valora este artículo
Sin valoraciones — sé el primero.