Kindroid mobile customizations v1.xx

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

/* ==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/ionicons@7.1.0/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;
    }
}