Kindroid mobile customizations v1.xx

Kindroid mobile website is more customizable (theme) + add new features (scripts).

Versión del día 18/11/2024. Echa un vistazo a la versión más reciente.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

/* ==UserStyle==
@name            Kindroid mobile customizations v1.xx
@description     Kindroid mobile website is more customizable (theme) + add new features (scripts).
@version         1.0.3
@author          BreatFR (https://breat.fr)
@namespace       https://gitlab.com/breatfr
@homepageURL     https://gitlab.com/breatfr/kindroid
@supportURL      https://discord.gg/fSgDHmekfG
@license         BY-NC-ND; https://creativecommons.org/licenses/by-nc-nd/4.0/
@preprocessor    stylus

@var select     actionsstyle                        "Actions texts style" {
    "Default": "actionsdefault",
    "Asterisks": "asterisks",
    "Asterisks + bold": "asterisksbold",
    "Asterisks + bold + no italic": "asterisksboldnoitalic",
    "Bold": "bold",
    "Bold + no italic": "boldnoitalic",
    "No italic": "noitalic"
}
@var color      actionscolor                        "Actions texts color choice"            rgb(136, 136, 136)
@var checkbox   avatarchoice                        "Avatar changer"                        0
@var text       avatarchoiceurl                     "Avatar changer URL"                    "URL between quotes"
@var checkbox   avatarcircle                        "Avatar circle"                         0
@var select     bgchoice                            "Background choice" {
    "❤️ Hearts": "heartbg",
    "⬜ None": "nobg",
    "❔ Custom": "custombg"
}
@var color      bgcolor                             "Background color"                      #101010
@var text       custombgurl                         "Background URL"                        "URL between quotes"
@var checkbox   blurcontent                         "Blur content"                          0
@var color      bubblescolor                        "Bubbles font color"                    #CBCBCB
@var text       fontsize                            "Custom font size"                      1.2rem
@var checkbox   gradientregenerate                  "Gradient regenerate icon"              1
@var checkbox   hidenames                           "Hide names in bubbles"                 1
@var checkbox   manuallyedited                      "Manually edited"                       1
@var color      kinbubblesbgcolor                   "Kin bubbles background color"          rgb(33, 27, 25)
@var text       kinbubblesbgurl                     "Kin bubbles background URL"            "URL between quotes"
@var color      ourbubblesbgcolor                   "Our bubbles background color"          rgb(27, 28, 30)
@var text       ourbubblesbgurl                     "Our bubbles background URL"            "URL between quotes"
@var checkbox   hidetrialbar                        "Hide trial bar"                        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("kindroid.ai") {
/* ===================================================================================================================================
    Whole kindroid domain
=================================================================================================================================== */
    /* Loading bar */
    #nprogress .bar {
        background: linear-gradient(88.55deg, rgb(139, 109, 255) 22.43%, rgb(254, 132, 132) 92.28%);
        background: -moz-linear-gradient(88.55deg, rgb(139, 109, 255) 22.43%, rgb(254, 132, 132) 92.28%);
    }
    
    /* Actions texts */
    if (actionsstyle=="actionsdefault") || actionscolor {
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            color: actionscolor !important;
        }
    }
    if (actionsstyle=="asterisks") {
        .css-1cki8gt > span:before,
        .css-1cki8gt > span:after,
        .css-1joa3p8 > span:before,
        .css-1joa3p8 > span:after {
            content: "*" !important;
        }
    }
    if (actionsstyle=="asterisksbold") {
        .css-1cki8gt > span:before,
        .css-1cki8gt > span:after,
        .css-1joa3p8 > span:before,
        .css-1joa3p8 > span:after {
            content: "*" !important;
        }
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            font-weight: bold !important;
        }
    }
    if (actionsstyle=="asterisksboldnoitalic") {
        .css-1cki8gt > span:before,
        .css-1cki8gt > span:after,
        .css-1joa3p8 > span:before,
        .css-1joa3p8 > span:after {
            content: "*" !important;
        }
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            font-style: normal !important;
            font-weight: bold !important;
        }
    }
    /* if (actionsstyle=="asterisksboldsamecolor") {
        .css-1cki8gt > span:before,
        .css-1cki8gt > span:after,
        .css-1joa3p8 > span:before,
        .css-1joa3p8 > span:after {
            content: "*" !important;
        }
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            color: var(--chakra-colors-secondaryWhite) !important;
            font-weight: bold !important;
        }
    }
    if (actionsstyle=="asterisksboldnoitalicsamecolor") {
        .css-1cki8gt > span:before,
        .css-1cki8gt > span:after,
        .css-1joa3p8 > span:before,
        .css-1joa3p8 > span:after {
            content: "*" !important;
        }
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            color: var(--chakra-colors-secondaryWhite) !important;
            font-style: normal !important;
            font-weight: bold !important;
        }
    } */
    if (actionsstyle=="bold") {
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            font-weight: bold !important;
        }
    }
    if (actionsstyle=="boldnoitalic") {
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            font-style: normal !important;
            font-weight: bold !important;
        }
    }
    /* if (actionsstyle=="boldsamecolor") {
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            color: var(--chakra-colors-secondaryWhite) !important;
            font-weight: bold !important;
        }
    }
    if (actionsstyle=="boldnoitalicsamecolor") {
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            color: var(--chakra-colors-secondaryWhite) !important;
            font-style: normal !important;
            font-weight: bold !important;
        }
    } */
    if (actionsstyle=="noitalic") {
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            font-style: normal !important;
        }
    }
    /* if (actionsstyle=="samecolor") {
        .css-1cki8gt > span,
        .css-1joa3p8 > span {
            color: var(--chakra-colors-primaryWhite) !important;
        }
    }*/
    
    /* Background */
    .css-1yee3lj {
        height: calc(100% - 45px);
    }
    if (bgchoice=="heartbg") {
        .css-1lbk8wf,
        .css-1qpmsp4,
        .css-16qnjy5,
        .css-uf0eqr {
            background: url("https://gitlab.com/breatfr/kindroid/-/raw/main/images/heart-pattern.png") bgcolor no-repeat 100% !important;
            background-size: cover !important;
        }
    }    
    if (bgchoice=="nobg") {
        /* No background */
        .css-1lbk8wf,
        .css-1qpmsp4,
        .css-16qnjy5,
        .css-uf0eqr {
            background: var(--chakra-colors-secondaryBlack) !important;
        }
    }    
    if (bgchoice=="custombg") {
        /* Custom background */
        .css-1lbk8wf,
        .css-1qpmsp4,
        .css-16qnjy5,
        .css-uf0eqr {
            background: url(custombgurl) bgcolor no-repeat 100% !important;
            background-size: cover !important;
        }
    }
    if bgcolor {
        .css-1lbk8wf,
        .css-1qpmsp4,
        .css-16qnjy5,
        .css-uf0eqr {
            background-color: bgcolor;
        }
    }
}

@-moz-document url-prefix("https://kindroid.ai/home") {
/* ===================================================================================================================================
    Chat page
=================================================================================================================================== */

/* ========================================================================
   Header and menu
======================================================================== */
    if hidetrialbar {
        .css-r1nv3m {
            display: none;
        }
    }
    
    /* Put Log out in orange */
    .css-yk3l44 > h2:nth-child(3) {
        color: var(--chakra-colors-orange);
    }

    /* Put Biling in yellow */
    .css-1fu7n7b > div > p {
        color: var(--chakra-colors-yellow-400);
    }

    /* Put User Guide and Announcements and Terms in blue */
    .css-yk3l44 > h2,
    .css-j7qwjs > div:nth-child(7) > p {
        color: var(--chakra-colors-blue-400);
    }

    /* Put email and timer in white */
    .css-1dodils,
    .css-1g7lxfg {
        color: var(--chakra-colors-secondaryWhite);
        margin-top: 10px;
    }

    /* Put Upload Photo text in custom avatar in white to be more visible */
    .css-1jcj2pk {
        color: var(--chakra-colors-secondaryWhite);
    }

    /* Billing error box */
    .css-dixmdy {
        background-color: #161616;
        border: 1px solid #6C6C6C;
        border-radius: 10px;
        color: var(--chakra-colors-secondaryWhite);
    }
    
    /* Add some arrows when needed */
    button > .css-1cfkm3f::after {
        background-image: url("https://unpkg.com/[email protected]/dist/svg/chevron-down-outline.svg");
        background-size: contain;
        background-repeat: no-repeat;
        content: "";
        display: inline-block;
        filter: invert(79%) sepia(6%) saturate(37%) hue-rotate(161deg) brightness(92%) contrast(86%);
        height: 20px;
        width: 20px;
    }

    /* Danger zone: delete account */
    .css-yk3l44 {
        bottom: 150px;
    }
    .css-19zv6py {
        font-weight: 600;
        font-size: 18px;
        width: max-content;
    }

    /* Removes top right icons in header */
    header > div:nth-of-type(2) {
        display: none !important;
    }

/* ===================================================================================================================================
    Chat
=================================================================================================================================== */    
    /* Add border to textarea when focus */
    textarea:focus {
        border: 0;
        border-radius: 32px;
        box-shadow: 0 0 0 1px rgb(139, 109, 255), 0 0 0 2px rgb(254, 132, 132);
    }
    /* Remove the resize icon on textarea on chat page */
    textarea:not(:focus),
    textarea:focus {
        resize: none;
    }

    /* Hide reduce button on avatar */
    @media screen and (min-width: 900px) {
        ion-app > div > div > div > div:nth-of-type(1) > div > div:nth-of-type(1) > div > div {
            display: none;
        }
    }
    
    /* Modification of date for our bubbles */
    ion-app > .ion-page > .css-ab8yd1 > .css-bvm5am > .css-1yee3lj > .css-zjyen2 > .css-1lbk8wf > .css-1dhayxc > .css-v3ipd1 > .css-70qvj9 > .css-dhnoom {
        padding-bottom: 5px;
    }

    /* Modification of rounded corners for our bubbles */
    .css-1dhayxc > div:nth-of-type(2) {
        border-radius: 20px 8px 20px 20px !important;
    }

    /* Modification of rounded corners for AI bubbles */
    .css-yhhl9h > div:nth-of-type(1) {
        border-radius: 8px 20px 20px 20px;
    }

    /* Modification of date for AI bubbles */
    ion-app > .ion-page > .css-ab8yd1 > .css-bvm5am > .css-1yee3lj > .css-zjyen2 > .css-1lbk8wf > .css-yhhl9h > .css-ip0f2e > .css-70qvj9 > .css-dhnoom {
        margin-left: 30px;
        padding-bottom: 5px;
    }
    
    if bubblescolor {
        .css-1dhayxc > div:nth-of-type(2) > div:nth-of-type(2) > div,
        .css-yhhl9h > div:nth-of-type(1) > div:nth-of-type(3) > div {
            color: bubblescolor;
        }
    }
    
    /* Bigger text in bubbles and textarea */
    .css-1dhayxc *,
    .css-yhhl9h *,
    .css-dhnoom,
    textarea {
        font-size: fontsize !important;
        line-height: 1.5 !important;
    }
    textarea::placeholder {
        line-height: 1.5 !important;
    }
    
    if kinbubblesbgcolor {
        ion-app > div > div > div > div:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(1) > .css-yhhl9h > div:nth-of-type(1) {
            background-color: kinbubblesbgcolor;
        }
    }
    if kinbubblesbgurl {
        ion-app > div > div > div > div:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(1) > .css-yhhl9h > div:nth-of-type(1) {
            background-color: kinbubblesbgcolor;
            background-image: url(kinbubblesbgurl);
            background-size: cover;
        }
    }
    if ourbubblesbgcolor {
        ion-app > div > div > div > div:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(1) > .css-1dhayxc > div:nth-of-type(2) {
            background: ourbubblesbgcolor;
        }
    }
    if ourbubblesbgurl {
        ion-app > div > div > div > div:nth-of-type(1) > div > div:nth-of-type(2) > div:nth-of-type(1) > .css-1dhayxc > div:nth-of-type(2) {
            background-color: ourbubblesbgcolor;
            background-image: url(ourbubblesbgurl);
            background-size: cover;
        }
    }

    /* Put a not allowed cursor on spinner, microphone icon, play button, picture generating when needed */
    .chakra-spinner,
    .css-zkr1dl,
    .css-jy2vee,
    .css-kjafn5 [disabled] + button {
        cursor: not-allowed;
    }
    
    if gradientregenerate {
        /* Regenerate icon */
        img[alt="regenerate"] {
            display: none !important;
        }
        [aria-label="Regenerate or suggest a change"]:nth-child(1) {
            background: url("https://gitlab.com/breatfr/kindroid/-/raw/main/images/gradient-regenerate.svg") no-repeat;
            border-radius: 50%;
        }
    }
    
    /* Avatar choice */
    if avatarchoice {
        .css-oies6c,
        .css-1bwrjj6 {
            height: 0;
        }
        .css-13tht1l {
            background: url(avatarchoiceurl) no-repeat;
            background-size: cover;
            max-width: avatarsize;
        }
    }
    
    if avatarcircle {
        .css-13tht1l,
        .css-g2goff {
            border-radius: 50%;
        }
    }
    
    if blurcontent {
        ion-app > div > div > div > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-child(odd) > div:nth-of-type(2) p,
        ion-app > div > div > div > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-child(even) > div:nth-of-type(1) p {
            filter: blur(8px);
            -moz-filter: blur(8px);
            -webkit-filter: blur(8px);
        }
    }
    
    /* Hide names in bubbles to save place */
    if hidenames {        
        .css-ppua9z,
        .css-19hb772 {
            display: none;
        }
        .css-127w3cl {
            margin-left: 0;
        }
    }
    
    /* Suggest message button */
    .css-b9bzmp > div:nth-of-type(1) > div > div > button {
        top: 50%;
        transform: translateY(-50%);
    }
    
    /* Manually edited */
    if manuallyedited {
        .css-ip0f2e {
            position: relative;
        }
        .css-yhhl9h > div > p {
                bottom: 0;
                position: absolute;
                right: -7em;
                &::before {
                    background: linear-gradient(88.55deg, rgb(139, 109, 255) 22.43%, rgb(254, 132, 132) 92.28%);
                    background-clip: text;
                    -webkit-background-clip: text;
                    color: transparent;           
                    content: "Manually edited";
                    justify-content: end;
                    font-size: 14px;
                    visibility: visible;
                }
                & {
                    visibility: hidden;
                }
        }
    }
}

@-moz-document url-prefix("https://kindroid.ai/groupchat/") {
/* ===================================================================================================================================
    Group chat
=================================================================================================================================== */
    /* Add border to textarea when focus */
    textarea:focus {
        border: 0;
        border-radius: 32px;
        box-shadow: 0 0 0 1px rgb(139, 109, 255), 0 0 0 2px rgb(254, 132, 132);
    }
    /* Remove the resize icon on textarea on chat page */
    textarea:not(:focus),
    textarea:focus {
        resize: none;
    }

    /* Hide voice counter and reduce button on avatar */
    /* Text button */
    .css-2bir3m,
    /* Voice button */
    .css-y0ybx5,
    /* Reduce button */
    .css-fk8dne {
        display: none;
    }
    
    /* Modification of date for our bubbles */
    ion-app > .ion-page > .css-ab8yd1 > .css-bvm5am > .css-1qpmsp4 > .css-zjyen2 > .css-i6vm4m > .css-1dhayxc > .css-v3ipd1 > .css-70qvj9 > .css-dhnoom {
        font-size: fontsize;
        padding-bottom: 5px;
    }
    
    /* Modification of rounded corners for our bubbles */
    .css-1dhayxc > div:nth-of-type(2) {
        border-radius: 20px 8px 20px 20px !important;
    }

    /* Modification of rounded corners for AI bubbles */
    .css-yhhl9h > div:nth-of-type(1) {
        border-radius: 8px 20px 20px 20px;
    }
    
    if bubblescolor {
        .css-1dhayxc > div:nth-of-type(2) > div:nth-of-type(2) > div,
        .css-yhhl9h > div:nth-of-type(1) > div:nth-of-type(3) > div {
            color: bubblescolor;
        }
    }
    
    /* Bigger text in bubbles and textarea */
    .css-1dhayxc *,
    .css-yhhl9h *,
    input,
    textarea {
        font-size: fontsize !important;
        line-height: 1.5 !important;
    }
    textarea::placeholder {
        line-height: 1.5 !important;
    }
    
    if kinbubblesbgcolor {
        ion-app > div > div > div > div > div > div:nth-of-type(2) > .css-yhhl9h > div:nth-of-type(2) {
            background-color: kinbubblesbgcolor;
        }
    }
    if kinbubblesbgurl {
        ion-app > div > div > div > div > div > div:nth-of-type(2) > .css-yhhl9h > div:nth-of-type(2) {
            background-color: kinbubblesbgcolor;
            background-image: url(kinbubblesbgurl);
            background-size: cover;
        }
    }
    if ourbubblesbgcolor {
        ion-app > div > div > div > div > div > div:nth-of-type(2) > .css-1dhayxc > div:nth-of-type(2) {
            background: ourbubblesbgcolor;
        }
    }
    if ourbubblesbgurl {
        ion-app > div > div > div > div > div > div:nth-of-type(2) > .css-1dhayxc > div:nth-of-type(2) {
            background-color: ourbubblesbgcolor;
            background-image: url(ourbubblesbgurl);
            background-size: cover;
        }
    }

    /* Put a not allowed cursor on spinner, microphone icon, play button, picture generating when needed */
    .chakra-spinner,
    .css-zkr1dl,
    .css-jy2vee,
    .css-kjafn5 [disabled] + button {
        cursor: not-allowed;
    }
    
    if gradientregenerate {
        /* Regenerate icon */
        .css-1wmt28i [alt="regenerate"] {
            display: none;
        }
        .css-1jby15f > .css-100dd8p > .css-1wmt28i:nth-child(1) {
            background: url("https://gitlab.com/breatfr/kindroid/-/raw/main/images/gradient-regenerate.svg") no-repeat;
            border-radius: 50%;
        }
    }
    
    if blurcontent {
        .css-1hmzamm,
        .css-gnnge1,
        .css-reootw,
        .css-v3ipd1 > .css-0 > p,
        .css-ip0f2e > .css-0 > p {
            filter: blur(8px);
            -moz-filter: blur(8px);
            -webkit-filter: blur(8px);
        }
    }
    
    if hidenames {
        /* Hide names in bubbles to save place */
        .css-ppua9z,
        .css-19hb772 {
            display: none;
        }
        .css-127w3cl {
            margin-left: 0;
        }
    }
    
    /* 3 dots */
    .css-1y2ps2x:hover {
        background: linear-gradient(88.55deg, rgb(139, 109, 255) 22.43%, rgb(254, 132, 132) 92.28%);
        background: -moz-linear-gradient(88.55deg, rgb(139, 109, 255) 22.43%, rgb(254, 132, 132) 92.28%);
        background-clip: text;
        color: transparent;
        -moz-background-clip: text;
        -moz-text-fill-color: transparent;
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
    }
    
    /* Suggest message button */
    .css-b9bzmp > div:nth-of-type(1) > div > div > button {
        top: 50%;
        transform: translateY(-50%);
    }
}

@-moz-document url-prefix("https://kindroid.ai/selfies") {
/* ===================================================================================================================================
    Selfies page
=================================================================================================================================== */
    /* Hide reddit, discord, kindroid logos */
    header > div > .css-1rdhwuq {
        display: none;
    }

    /* Load More button */
    .css-1m67823 {    
        background: linear-gradient(88.55deg, rgb(139, 109, 255) 22.43%, rgb(254, 132, 132) 92.28%);
        background: -moz-linear-gradient(88.55deg, rgb(139, 109, 255) 22.43%, rgb(254, 132, 132) 92.28%);
        background: -webkit-linear-gradient(88.55deg, rgb(139, 109, 255) 22.43%, rgb(254, 132, 132) 92.28%);
        border-radius: 56px;
        color: var(--chakra-colors-pureWhite);
        font-size: 18px;
        height: fit-content;
        padding-bottom: var(--chakra-space-2);
        padding-top: var(--chakra-space-2);
        width: 120px;
    }
    .css-1m67823:hover {
        text-decoration: none;
    }

    /* Put delete image button in red */
    .css-chdrwy > .css-1icfsi7 > .css-r6z5ec > .css-do4s31,
    .css-chdrwy > .css-1icfsi7 > .css-r6z5ec > .css-do4s31 > .css-94x4at {
        background: var(--chakra-colors-secondaryBlack);
    }
    .css-chdrwy > .css-1icfsi7 > .css-r6z5ec > .css-do4s31 > .css-94x4at > .css-nvswzl {
        color: var(--chakra-colors-red);
    }
    
    /* Blur content */
    if blurcontent {
        .css-1regj17,
        .css-pyo214 {
            filter: blur(50px);
            -moz-filter: blur(50px);
            -webkit-filter: blur(50px);
        }
    }
}

@-moz-document url-prefix("https://kindroid.ai/call") {
/* ===================================================================================================================================
    Call page
=================================================================================================================================== */
    /* Bigger text */
    .css-7wdzg1,
    .css-14mmx5r,
    .css-1vqt2yh {
        font-size: 18px;
    }
    
    /* Avatar choice */
    if avatarchoice {
        ion-app > div > div > div > div > div:nth-of-type(2) > div:first-child,
        ion-app > div > div > div > div > div:nth-of-type(2) > div:first-child > div:nth-of-type(3) {
            height: 512px !important;
            margin-top: 5%;
            width: 512px !important;
        }
        [alt="avatar"] {
            background: url(avatarchoiceurl) border-box;
            background-size: cover;
            border-color: rgb(40, 40, 40);
            border-radius: 50%;
            border-style: solid;
            height: 512px;
            width: 512px;
        }
    }
        
    /* Removes top right icons in header */
    header > div > div:nth-of-type(2) {
        display: none !important;
    }
}