Skip to content

StretchGPT: Extra Wide ChatGPT Conversations by m1kethai

Screenshot of StretchGPT: Extra Wide ChatGPT Conversations

Details

Authorm1kethai

LicenseNo License

Categorychatgpt.com

Created

Updated

Size9.6 kB

Statistics

Learn how we calculate statistics in the FAQ.

Failed to fetch stats.

Description

Improves ChatGPT's UX for all screens - disables the narrow default max-width & adds back some smart, subtle padding + some very nice (optional) UI tweaks

Notes

StretchGPT

Enhances the web ChatGPT experience for all viewports by expanding the usable chat area, making a few UI tweaks for improved readability, and enabling dynamic custom colorization for key elements - all while respecting the original ChatGPT aesthetic. Plays nice with other userstyles/browser extensions and all non-core features are toggleable.


Page URL
USW userstyles.world/style/9821/stretchgpt-extra-wide-chatgpt-conversations
GitHub github.com/m1kethai/StretchGPT-Userstyle

Core Functionality

Expands the usable chat area by > 200% by replacing the default restrictive max-width and fixed margins/padding with much more subtle, adaptive spacing that scales according to your current viewport size.

Extra Toggleable Features:

Custom Theme/Color Options

  • Pick from the 40+ included color presets to liven up the dull default color palette and make it easier to distinguish between your prompts and ChatGPT's responses.
  • There are separate toggles in the userstyle's dropdown menu to apply the selected color to your messages and/or your message bubbles, as well as the prompt input elements.

Hide Sender Avatars

  • Remove the avatars from ChatGPT responses and free up more screen real estate (makes the most significant difference in mobile and tablet browsers).

Hide Disclaimer Text

  • Remove the warning text element at the bottom of the window ("ChatGPT can make mistakes. Check important info.") for a cleaner look, and to allow more space for the actual chat content.

Note - the features below were previously implemented but recently broke due to a couple big UI updates by the OpenAI team and have been removed for now, but fixes are currently in progress and they'll all be re-integrated in the near future:

  • Configurable padding/width for the main chat content
  • Resizeable prompt input/textarea
  • Custom theme color picker
  • Expanded sidebar option
  • Accent colors for header and sidebar elements

If you come across any bugs (it's tough to always catch them quickly after every new breaking ChatGPT update) or have any requests for specific features, please feel free to open an issue on the GitHub repo.


Changelog

[6.2.4]

  • Switch default color preset from "Aged Sage" to "Super Blue Lavender"
  • Improved formatting in options menu

[6.2.2]

  • Tweak max-width scaling for the different stretch modes. Set to 100% fixed width <768px.
  • Update/rearrange settings menu items

[6.2.1]

  • Fix (ChatGPT update): "Hide disclaimer" feature

[6.2]

  • Fix (ChatGPT update): broken selectors for chat entries/messages

[6.1]

  • Added 4 "Stretchiness" options to the userstyle config menu, to allow users to choose how wide the chat area expands based on personal preference
  • The dropdown also includes a "Disable" option for those who are only interested in using the extra features.
  • Tweaked the default max chat widths (now called "Comfy") so that it maxes out at 80% for the largest breakpoints.

[6.0]

  • Fixed all the broken things for both desktop and mobile VPs
  • Added some more cool custom color presets
  • Added some new color customization options (you can now apply the color to just your message bubble or the bubble + full chat item/row.

[5.1]

  • Bugfix (ChatGPT update) - custom color no longer applying to the prompt input field
  • Colorize feature now fully working and enabled for "Light" ChatGPT theme
  • Added an accessible text mixin to ensure that the text is always readable against any custom background color
  • Split custom color options into two separate ones (user message BG and input/textarea BG)
  • Cleaned up/replaced some outdated selectors to accommodate recent changes

[5.0.2]

  • Loosened up the horizontal message padding a bit
  • Adjusted the BG color tint logic for improved contrast accessibility with more colors
  • Removed "Mobile Layouts" + some other broken code/features

[5.0.1] Post UI-update hotfixes

  • A couple new fixes to restore the basic functionality after another big structural update by OpenAI a few days ago.
  • Made a few tweaks to Accent Colors - added a few extra color presets and made a small fix to accommodate some elements in the new Custom GPT builder UI.
  • Temporarily removed "Sidebar Tweaks" because it's been almost 100% unfunctional since the previous major UI overhaul. I'm currently working on a total overwork of this feature and it should be back in the next update.

[5.0.0] New "accent colors" feature + several fixes to accommodate the most recent major ChatGPT UI overhaul

OpenAI's new UI revamp released today broke pretty much everything.. Everything should be good now though.

I've also decided to release a new adaptive "accent colors" feature that I've been sitting on for a while. I'm flagging it as an experimental feature for now (turned off by default, of course) since I'm a huge stickler for accessibility and this isn't 100% color contrast accessible yet, given the large # of possible color options/combos, but I still think it's worth releasing to everyone in its current state, despite its imperfections.

I've had this feature permanently turned on for several months now and it's become a super essential part of my ChatGPT experience, livening everything up and making the default color palette feel so bland in comparison. It'll be getting lots of polishing and improving over the next few updates, so keep an eye out!

[4.0] 4 New Optional Features: Hide Avatars, Colored Message Indicators, Mobile Layout, Stacked/Centered Layout

A bunch of nifty new UI enhancements are now available in the userstyle config!
The subtlest new enhancements are set to active by default, but they can be easily toggled on/off at any time.

Hide avatars

  • Remove the avatars from the top left corner of every message, making the conversation window a lot more symmetrical and aesthetically pleasing, as well as freeing up a significant amount of useful of horizontal space for text on smaller viewports.

Customizable color indicators on user messages

  • Add a colored left border to all messages sent by you.
  • Makes it super easy to distinguish your's vs. ChatGPT's messages, especially when "Hide avatars" is active.
  • Choose from 27 different color presets in the dropdown list.
    • A subtle 2-tone gradient is dynamically generated from the selected color, based on its lightness and saturation values.
    • An upcoming update will include more color presets + the ability to define your own custom color values.

"Mobile layout" on all screens

  • Stacks the action buttons below the text in ChatGPT responses.

Stacked message layout (mobile-only - <500px viewport)

  • Centers all avatars and displays them in a separate row above the text in each message (ignored when avatars are visible)"

[3.0] Sidebar/Chat History UI enhancements

Introducing an optional set of sidebar/chat history menu UI tweaks - toggleable options for these are now available in the userstyle config menu.

  • Minor size reduction of fonts, icons and action buttons.
  • Slightly reduce the height of the selectable list items.
  • Improve chat title readability by:
    • Eliminating title truncation/ellipses.
    • Enabling text wrapping to make all the generated chat titles fully visible (no longer cut off after just a few words).
    • A couple subtle tweaks to some font weights and background/border colors in order to improve visual distinction between the different chat history "time period" sections ("Today", "Yesterday", "Previous 7 Days", etc.).

[1.0] Core functionality

  • @ 768px viewport width, the fixed max-width for conversation contents is disabled.
  • @ 1536px viewport width (Tailwind CSS's default "2xl" breakpoint), some modest, responsive horizontal padding is introduced, ensuring optimal and consistent readability on all larger screens.

Source code

/* ==UserStyle==
@name           StretchGPT: Extra Wide ChatGPT Conversations
@version        6.3
@author         m1kethai
@description    Improves ChatGPT conversation readability by removing the narrow fixed content width and replacing it with subtle, adaptive padding for a consistent UX across all screen sizes.
@namespace      https://userstyles.world/style/9821/stretchgpt-extra-wide-chatgpt-conversations
@preprocessor   less
@var select     stretchLvl             "πŸ–₯️ Stretchiness" {
	"πŸ«₯ None (Enable \"bonus\" features only)": "0",
	"🀏 Conservative": "1",
	"✨ Comfy*": "2",
	"πŸ‘Ή Spacious": "3",
	"🫨 Unrestricted (Not recommended on bigger screens)": "4"
}
@var checkbox   hideAvatar             "πŸ™ˆ Hide ChatGPT Avatar (messages expand to fill the space)" 0
@var checkbox   hideDisclaimer         "⚠️ Hide Disclaimer @ Bottom (\"ChatGPT can make mistakes...\")" 0
@var checkbox   enableColorize         "🌈 Enable Color Customizations [Unlocks all the color options below!]" 0
@var select     customColor            "~> 🎨 Select Color Preset:" {
	"Absinthe Green":       "#76b583",
	"Aged Sage":            "#8da572",
	"Akira":                "#840000",
	"Amaretto":             "#ab6f60",
	"Ancient Gold":         "#b59410",
	"Aztek":                "#293432",
	"Black Pearl":          "#1e272c",
	"Black Sabbath":        "#220022",
	"Blue Moss":            "#5D737E",
	"Cardamom":             "#aaaa77",
	"Caviar":               "#292a2d",
	"Chrysanthemum":        "#c35458",
	"Cyber Grape":          "#58427C",
	"Cyprus":               "#545a3e",
	"Dark and Stormy":      "#353f51",
	"Deep Jungle":          "#1A2421",
	"Deep Space":           "#2D3142",
	"Dusty Turquoise":      "#5a8a89",
	"Earl Grey":            "#a6978a",
	"Emerald":              "#0f380f",
	"FF06B5":               "#FF06B5",
	"Gameboy Teal":         "#0ABFBC",
	"Japanese Violet":      "#5B3256",
	"Lobster Bisque":       "#FFDAB9",
	"Obsidian Ash":         "#343434",
	"Prince":               "#4b384c",
	"Purple Haze":          "#807396",
	"Raichu":               "#fc8c2c",
	"Sailor Moon":          "#ffee00",
	"Sakura Bloom":         "#ff7b9c",
	"Sanguine":             "#6c110e",
	"Sapphired":            "#5b82a6",
	"Sharp Indigo":         "#48007c",
	"Steampunk Leather":    "#6f3b34",
	"Super Blue Lavender*": "#5a5b9f",
	"Tokyo Midnight":       "#1a1a2e",
	"Wasabi Peanut":        "#b4c79c",
	"Wasabi":               "#afd77f",
}
@var checkbox   colorizePromptElements "~> 🌈 Colorize Input Components" 1
@var checkbox   colorizeMsgBubble      "~> 🌈 Colorize User Message Bubbles" 1
@var checkbox   colorizeMsgFullEntry   "~> 🌈 + Full User Message BG (Bubble colors must be enabled)" 0

==/UserStyle== */
@-moz-document domain("chatgpt.com") {
	html {
		/* INIT ----------> */
		.breakpoints() {
			@sm: ~"screen and (min-width: 0px) and (max-width: 767px)"; @sm-max: ~"screen and (max-width: 767px)";
			@md: ~"screen and (min-width: 768px) and (max-width: 1023px)"; @md-up: ~"screen and (min-width: 768px)"; @md-max: ~"screen and (max-width: 1023px)";
			@lg: ~"screen and (min-width: 1024px) and (max-width: 1535px)"; @lg-up: ~"screen and (min-width: 1024px)"; @lg-max: ~"screen and (max-width: 1535px)";
			@xl: ~"screen and (min-width: 1536px) and (max-width: 2047px)"; @xl-up: ~"screen and (min-width: 1536px)"; @xl-max: ~"screen and (max-width: 2047px)";
			@xxl: ~"screen and (min-width: 2048px) and (max-width: 2559px)"; @xxl-up: ~"screen and (min-width: 2048px)"; @xxl-max: ~"screen and (max-width: 2559px)";
			@xxxl: ~"screen and (min-width: 2560px)";
		}
		.selectors() {
			@-sidebar:               .flex-shrink-0.overflow-x-hidden.bg-token-sidebar-surface-primary;
			@-header:                .sticky.top-0.z-10;

			@-chat:                  .h-full.max-w-full.overflow-hidden > main;
			@-sm--chat:              @{-header} ~ main div.flex-1.overflow-hidden;

			@-chat__entry:           @{-header} ~ article:has(.group\/conversation-turn);
			@-sm--chat__entry:       @{-sm--chat} div.w-full:has(.group\/conversation-turn);

			@-chat__entry__inner:    @{-chat__entry} .md\:max-w-3xl;

			@-chat__entry--user:     @{-chat__entry}:not(:has(.agent-turn));
			@-sm--chat__entry--user: @{-sm--chat__entry} div[data-message-author-role="user"];

			@-chat__entry--gpt:      @{-chat__entry}:has(div[data-message-author-role="assistant"]);
			@-sm--chat__entry--gpt:  @{-sm--chat__entry}:has(div[data-message-author-role="assistant"]);

			@-chat__prompt:          @{-chat} form .max-w-full .w-full.flex.flex-col.transition-colors;
			@-sm--chat__prompt:      @{-header} ~ main form div.rounded-3xl;

			@-chat__footer:          @{-chat} > div.composer-parent div.relative.w-full.px-2.py-2.text-center.text-xs.text-token-text-secondary.empty\:hidden.md\:px-\[60px\];
			@-chat__footer--sm:      @{-sm--chat} ~ div.w-full;

			@-composer-view__footer: @{-chat} > div.composer-parent .text-token-text-secondary.empty\:hidden.md\:px-\[60px\].lg\:absolute;
		}

		.breakpoints();
		.selectors();
		/* <---------- INIT */

		& when(@enableColorize =1) {
			&.dark { .colorize(dark)}
			&.light { .colorize(light)}
		}

		/* CORE FUNCTIONALITY ***************************/
		@{-chat__entry__inner} when (@stretchLvl >0) {
			@mws: {
				conservative: 85%, 80%, 70%;
				comfy: 95%, 90%, 80%;
				spacious: 97%, 90%, 90%;
				unrestricted: 98%, 99%, 99%;
			}
			@vpMWs: if(
				@stretchLvl =1, @mws[conservative], if(
				@stretchLvl =2, @mws[comfy], if(
				@stretchLvl =3, @mws[spacious],
				@mws[unrestricted]
				))
			);

			max-width: var(--mw);
			--mw: 100%;

			@media @md    { --mw: max(48rem, extract(@vpMWs, 1)) !important; }
			@media @lg    { --mw: extract(@vpMWs, 2) !important; }
			@media @xl-up { --mw: extract(@vpMWs, 3) !important; }
		}

		/* FEATURE: HIDE AVATARS ************************/
		& when(@hideAvatar =1) {
			@{-chat__entry--gpt},
			@{-sm--chat__entry--gpt} {
				@-avatar: .flex-shrink-0.flex.flex-col.relative.items-end;
				@{-avatar} { display: none }
			}

			/* add back some padding (to compensate for the hidden column) */
			@{-chat__entry--gpt},
			@{-sm--chat__entry--gpt} {
				> div {
					padding-left: var(--ph) !important;
					@media @sm {
						--ph: 1.1rem;
						padding-right: var(--ph) !important;
					} @media @md-up {
						--ph: max(calc(1.5vw*1rem), 1.5rem);
						@media @xl-up {
							--ph: max(calc(2vw*1rem), 2rem);
						}
					}
				}
			}
		}

		/* FEATURE: HIDE FOOTER DISCLAIMER *********************/
		& when(@hideDisclaimer =1) {
			@{-composer-view__footer},
			@{-chat__footer},
			@{-chat__footer--sm} {
				div.min-h-4 {
					display: none !important;
				}
			}
		}

		/* FEATURE: COLORIZATION *****************/
		#colorLib() {
			.defaults(dark) {
				@colors: {
					@bg: #212121;
					@text: #ececec;
				}
			} .defaults(light) {
				@colors: {
					@bg: white;
					@text: #0d0d0d;
				}
			}

			.bgTint(@theme, @base) {
				@sat: round(saturation(@blended));
				@blended: if(
					@theme =light,
					mix(@base, @customColor, 90%),
					if(
						luma(@customColor) < 5%,
						@customColor,
						mix(@base, @customColor, 70%)
					)
				);
				@faded: fadeout(@blended,
					if(@sat <= 55%, 0%,
						if(@sat < 70%, 40%,
							if(@sat < 90%, 50%,
								60%
							)
						)
					), relative
				);
				@result: if(@theme =light, @blended, @faded);
			}

			.accessible-fg-color(@bg, @light: #ececec, @dark: #0d0d0d) {
				/* set text/foreground to a light or dark preset color based on its contrast against the element's bg (using the default 43% threshold) */
				@result: contrast(@bg, @light, @dark);
			}
		}

		.colorize(@theme: dark) {
			@baseColors: #colorLib.defaults(@theme)[];
			@tintedBg: #colorLib.bgTint(@theme, @baseColors[@bg])[];
			@accessibleText: #colorLib.accessible-fg-color(@tintedBg)[];

			.apply() {
				background-color: @tintedBg !important;
				color: @accessibleText !important;
			}

			& when (@colorizePromptElements =1) {
				@media @sm-max {
					@{-sm--chat__prompt} {.apply()}
				} @media @md-up {
					@{-chat__prompt} {.apply()}
				}

				@{-sm--chat__prompt}, @{-chat__prompt} {
					button.rounded-full {
						&[disabled] {
							color: fadeout(@accessibleText, 65%);
							background-color: fadeout(@accessibleText, 85%) !important;
						} &:not([disabled]) {
							color: @accessibleText;
							background-color: inherit;
						}
					}
				}
			}

			& when (@colorizeMsgBubble =1) {
				@-msg-bubble: .relative.rounded-3xl;
				@media @sm-max {
					@{-sm--chat__entry--user} {
						/* only allowing the bubble to be colorized @ the smallest breakpoint for now (doesn't look too great a lot of the time) */
						@{-msg-bubble} {.apply()}
					}
				} @media @md-up {
					@{-chat__entry--user} {
						& when (@colorizeMsgFullEntry =1) {
							.apply();
							@{-msg-bubble} {
								@softBg: fade(softlight(@customColor, @tintedBg), 40%);
								background-color: @softBg;
							}
						}
						& when (@colorizeMsgFullEntry =0) {
							@{-msg-bubble} {
								.apply();
							}
						}
					}
				}
			}
		}

		/* MISC. UI FIXES/ENHANCEMENTS ******************/
		/* fixes recent UI bug where the left side of <ol> numbers are cut off in responses */
		@{-chat__entry--gpt} .prose :where(ol):not(:where([class~="not-prose"] *)) {
			padding-left: 1.85em;
		}
	}
}

Reviews

No reviews yet.