Mistral responsive + customizations

Mistral website is more suitable for wide screens.

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey, Greasemonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

/* ==UserStyle==
@name           Mistral responsive + customizations
@version        1.0.22
@description    Mistral website is more suitable for wide screens.
@author         BreatFR (https://breat.fr)
@namespace      https://gitlab.com/breatfr
@homepageURL    https://gitlab.com/breatfr/mistral
@supportURL     https://discord.gg/Q8KSHzdBxs
@license        AGPL-3.0-or-later; https://www.gnu.org/licenses/agpl-3.0.txt
@preprocessor   stylus

@var    checkbox    chatmode                "Chat mode"                             1
@var    checkbox    avatar                  "Custom avatar for us"                  0
@var    text        avatarurl               "Custom avatar URL"                     "URL between quotes"
@var    checkbox    cmmistralavatar         "Custom Mistral avatar"                 0
@var    text        cmmistralavatarurl      "Custom Mistral avatar URL"             "URL between quotes"
@var    text        cmmistralavatarsize     "Custom Mistral avatar size"            calc(100vh - 64px - 124px - 3em)
@var    text        cmmistralavatarcorner   "Custom Mistral avatar corner"          50%
@var    text        fontsize                "Custom font size"                      1.2rem
@var    checkbox    hidepro                 "Hide pro"                              1
@var    checkbox    widemode                "Wide mode"                             1
==/UserStyle== */

/* === Credits ===
Website         https://breat.fr
facebook        https://www.facebook.com/breatfroff
mastodon        https://mastodon.social/@breat_fr
telegram        https://t.me/breatfr
vk              https://vk.com/breatfroff
X (twitter)     https://x.com/breatfroff
=== Credits === */

@-moz-document domain("chat.mistral.ai") {
    /* Mistral Chat */
    /* Versions */
    :root {
        --themeversion: 'Theme v1.0.22 by BreatFR (https://breat.fr)';
        --install1: ' usercssjs.breat.fr ';
        --install2: ' gitlab.com/breatfr/mistral';
        --support1: ' ko-fi.com/breatfr ';
        --support2: ' paypal.me/breat';
    }

    @media (min-width: 900px) {
        body::before {
            background: linear-gradient(88.55deg, rgb(253, 73, 2) 22.43%, rgb(254, 206, 0) 92.28%);
            background-clip: text;
            -webkit-background-clip: text;
            color: transparent;
            content: var(--themeversion);
            display: flex;
            font-family: inherit;
            font-size: 1.2rem;
			height: 64px;
			left: 25%;
            line-height: 1.5;
            pointer-events: none;
            position: fixed;
            text-align: center;
			top: 1em;
            width: fit-content;
            white-space: wrap;
			z-index: 9999;
        }
    }
    
    body::after {
        background: linear-gradient(88.55deg, rgb(253, 73, 2) 22.43%, rgb(254, 206, 0) 92.28%);
        background-clip: text;
        -webkit-background-clip: text;
        color: transparent;
        content: 'Install: ' url("https://gitlab.com/breatfr/kindroid/-/raw/main/images/icon_breat.fr.png") var(--install1) url("https://gitlab.com/breatfr/kindroid/-/raw/main/images/icon_gitlab.png") var(--install2) '\ASupport me: ' url("https://gitlab.com/breatfr/kindroid/-/raw/main/images/icon_ko-fi.png") var(--support1) url("https://gitlab.com/breatfr/kindroid/-/raw/main/images/icon_paypal.png") var(--support2);
        display: block;
        font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
        font-size: 1.2rem;
        line-height: 1.5;
        pointer-events: none;
        position: fixed;
		right: 10%;
        text-align: center;
		top: 0;
        width: fit-content;
        white-space: pre-line;
		z-index: 9999;
    }
    
    body {
		height: 100vh;
        max-height: 100vh;
        overflow: hidden;
    }
    
    /* Textarea focused */
    body:has(.ProseMirror:focus) {
        [class="relative w-full overflow-hidden rounded-[12px] bg-card transition-colors duration-300 ease-in-out"] {
            border-radius: calc(var(--radius) + 4px);
            box-shadow: rgba(255, 149, 0, 0.4) -2px -2px 2px 2px,
                        rgba(255, 149, 0, 0.4) -2px 2px 2px 2px,
                        rgba(255, 69, 0, 0.4) 2px -2px 2px 2px,
                        rgba(255, 69, 0, 0.4) 2px 2px 2px 2px;
        }
    }
    
    /* Custom font size */
    .prose,
    code,
    textarea,
    .max-w-screen-md:has(textarea) button {
        font-size: fontsize !important;
        line-height: 1.5 !important;
    }
    textarea.py-2 {
        min-height: max-content !important;
    }
    
    if avatar {
        [class="flex w-full flex-row items-center justify-start gap-x-4"] > div:nth-of-type(1) {
            background: url(avatarurl) no-repeat center center / cover;
            border-radius: 50%;
            content: "";
            display: inline-block;
            height: 32px;
            width: 32px;
        }
    }
    
    if cmmistralavatar {
        /* Avatar new chat */
        [class="absolute bottom-[65%] flex w-full justify-center desktop-mac:drag"] {
            bottom: auto;
            max-width: 100%;
            top: 0px;
        }
        [class="absolute bottom-[65%] flex w-full justify-center desktop-mac:drag"] {
            height: auto;
            margin: 0;
            max-height: calc(100vh - 64px - 163.56px - .5rem) !important;
            overflow: hidden;
            position: absolute;
        }
        [class="absolute bottom-[65%] flex w-full justify-center desktop-mac:drag"] svg {
            aspect-ratio: 1 / 1;
            background: url(cmmistralavatarurl) no-repeat center center;
            background-size: cover;
            border-radius: cmmistralavatarcorner;
            height: 0;
            margin: 0 auto;
            padding-left: cmmistralavatarsize;
            padding-top: cmmistralavatarsize;
            width: 0;
        }
        /* Textarea new chat */
        [class="absolute flex w-full max-w-(--breakpoint-md) flex-col px-2"] {
            bottom: 5em !important;
            top: auto !important;
        }
		
		/* Avatar menu */
		[class="flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-sm bg-state-brand"] {
			aspect-ratio: 1 / 1;
            background: url(cmmistralavatarurl) no-repeat center center;
            background-size: cover;
            border-radius: cmmistralavatarcorner;
            height: 0;
            margin: 0 auto;
            padding-left: 32px;
            padding-top: 32px;
            width: 0;
		}
		[class*="flex aspect-square items-center justify-center rounded-sm text-xs font-semibold size-8 bg-brand-100/60 dark:bg-brand-900/60 text-brand-600"] > svg {
			display: none;
		}
		
		/* Avatar in textarea */
		[class="flex items-center justify-center bg-transparent"] { 
			aspect-ratio: 1 / 1;
            background: url(cmmistralavatarurl) no-repeat center center / cover;
            border-radius: var(--radius-md);
            height: 0;
            padding-left: 36px;
            padding-top: 36px;
            width: 0;
        }
        
        /* Avatar in chat */
		[class="flex items-center justify-center bg-brand-500"] {
			background-color: transparent;
		}
        [class="flex items-center justify-center bg-brand-500"] {
            aspect-ratio: 1 / 1;
            background: url(cmmistralavatarurl) no-repeat center center / cover;
            border-radius: var(--radius-md);
            height: 0;
            padding-left: 20px;
            padding-top: 20px;
            width: 0;
        }
    }
	data-radix-popper-content-wrapper > div {
		width: 100% !important;
	}
    
    if chatmode {
        [data-message-author-role="assistant"],
 		[data-message-author-role="user"] {
            max-width: 80%;
        }
		[data-message-author-role="user"] {
			margin-left: auto;
		}
		[data-message-author-role="user"] [class="flex flex-shrink-1 flex-row flex-wrap items-start gap-1 pb-1"] {
			justify-content: space-evenly;
		}
        code[style*="white-space: pre"],
        code[style*="white-space:pre"] {
            white-space: break-spaces !important;
        }
    }
    
    if hidepro {
        [data-sidebar="menu"] > li:nth-of-type(3) {
            display: none;
        }
    }
    
    if widemode {
        .max-w-\\(--breakpoint-md\\) {
            max-width: 98%;
        }
        .max-h-\\[300px\\]:has(textarea) {
            max-height: 50vh !important;
        }
        .max-w-screen-md:has(textarea) {
            padding: 1em 1.75em;
        }
        
        /* Avatars */
        .h-7 {
            height: 32px;
        }
        .w-7 {
            width: 32px;
        }
        
        body:has(iframe[sandbox="allow-scripts allow-same-origin"]) {
            .cm-content {
                flex-shrink: 1;
            }
            .cm-line {
                white-space: wrap;
                width: 100% !important;
            }
        }
        
        /* Generated images */
        [class="group flex w-full gap-3"] > div:nth-of-type(2) p:has(img) {
            margin-left: auto;
            margin-right: auto;
        }
        
        /* Textarea box */
        [class="relative overflow-hidden mb-2 min-h-10 w-full"] {
            margin-bottom: 0 !important;
        }
        
        /* Scroll down icon */
        button:has(svg.lucide-arrow-down) {
            height: 40px;
            width: 40px;
        }
        svg.lucide-arrow-down path {
            stroke: rgb(255, 69, 0);
        }
        
        /* Small space between date and edit button */
        [aria-label="Edit question"] {
            margin-left: 1em !important;
        }
        
        /* Search box */
        div[role="dialog"][style="pointer-events: auto;"] {
            max-height: 90%;
            max-width: 90%;
        }
		[class="flex flex-col md:flex-row h-full max-h-[82vh] w-full max-w-[52rem] overflow-hidden"] {
			max-height: 100%;
			max-width: 100%;
		}
        
        /* Documentation et contact */
        [class="fixed right-3 bottom-3 z-40 hidden gap-2 sm:flex"],
        [class="fixed right-3 bottom-3 z-40 hidden gap-2 md:flex"],
        [class="fixed right-3 bottom-3 z-40 hidden gap-2 lg:flex"] {
            left: calc(var(--spacing)*3);
            right: auto;
        }
		
		[class="absolute flex w-full max-w-(--breakpoint-md) flex-col px-2"] {
			bottom: 2em !important;
			justify-content: flex-end;
			padding-right: 1.5em;
			top: auto !important;
		}
		
    }
}

@-moz-document domain("console.mistral.ai") {
    /* Mistral Console */
    button[class*="flex w-full items-center gap-3 rounded px-3 py-2"] > div:nth-of-type(1),
    .user-initials {
        background: transparent !important;
        color: transparent;
    }
    button[class*="flex w-full items-center gap-3 rounded px-3 py-2"] > div:nth-of-type(1)::before,
    .user-initials::before {
        background: url(avatarurl) no-repeat center center / cover;
        border-radius: 50%;
        content: "";
        display: inline-block;
        height: 32px;
        width: 32px;
    }
}