/* ==UserStyle== @name Trinket Catppuccin @namespace github.com/catppuccin/userstyles/styles/trinket @homepageURL https://github.com/catppuccin/userstyles/tree/main/styles/trinket @version 2025.09.06 @updateURL https://github.com/catppuccin/userstyles/raw/main/styles/trinket/catppuccin.user.less @supportURL https://github.com/catppuccin/userstyles/issues?q=is%3Aopen+is%3Aissue+label%3Atrinket @description Soothing pastel theme for Trinket @author Catppuccin @license MIT @preprocessor less @var select lightFlavor "Light Flavor" ["latte:Latte*", "frappe:Frappé", "macchiato:Macchiato", "mocha:Mocha"] @var select darkFlavor "Dark Flavor" ["latte:Latte", "frappe:Frappé", "macchiato:Macchiato", "mocha:Mocha*"] @var select accentColor "Accent" ["rosewater:Rosewater", "flamingo:Flamingo", "pink:Pink", "mauve:Mauve*", "red:Red", "maroon:Maroon", "peach:Peach", "yellow:Yellow", "green:Green", "teal:Teal", "blue:Blue", "sapphire:Sapphire", "sky:Sky", "lavender:Lavender", "subtext0:Gray"] ==/UserStyle== */ @import "https://userstyles.catppuccin.com/lib/lib.less"; @-moz-document domain("trinket.io") { @import url("https://unpkg.com/@catppuccin/highlightjs@1.0.0/css/catppuccin-variables.important.css"); :root { @media (prefers-color-scheme: light) { #catppuccin(@lightFlavor); } @media (prefers-color-scheme: dark) { #catppuccin(@darkFlavor); } } #catppuccin(@flavor) { #lib.palette(); #lib.defaults(); #lib.css-variables(); .ace_editor { background-color: @crust; color: @text; .ace_gutter { background: @mantle; color: @overlay1; } .ace_print-margin { background: @mantle; } .ace_marker-layer { .ace_active-line { background-color: fade(@yellow, 20%); } .highlight-line-error { background-color: fade(@red, 20%); } .ace_bracket { border-color: @overlay1; } } .ace_cursor { color: @text; } .ace_marker-layer .ace_selection { background: fade(@accent, 30%); } .ace_fold { background-color: @surface0; border-color: @surface1; } .ace_constant.ace_language, .ace_keyword, .ace_meta, .ace_variable.ace_language { color: @mauve; } .ace_line .ace_identifier:not(:first-of-type) { color: @blue; } .ace_paren { color: @red; } .ace_constant.ace_numeric { color: @peach; } .ace_entity.ace_other.ace_attribute-name, .ace_support.ace_constant, .ace_support.ace_function { color: @teal; } .ace_entity.ace_name.ace_tag, .ace_support.ace_class, .ace_support.ace_type { color: @blue; } .ace_storage { color: @peach; } .ace_string { color: @green; } .ace_comment { color: @overlay2; } .ace_indent-guide { @svg: escape( '' ); background-image: url("data:image/svg+xml;utf8,@{svg}"); } } #ace_settingsmenu { background-color: @mantle !important; box-shadow: none !important; color: @subtext0; } body { background-color: @base !important; color: @text !important; } h1, h2, h3, h4, h5, h6 { color: @text !important; } a { color: @accent; text-decoration-color: @accent; &:hover { color: @accent; } } hr, fieldset { border-color: @surface0 !important; } footer { border-top-color: @surface0 !important; background-color: @mantle !important; } code { background-color: @mantle !important; color: @text !important; } select { background-color: @crust !important; border-color: @surface0 !important; color: @text !important; } iframe[frameborder] { border-color: @surface0 !important; } label { color: @subtext0 !important; } table { background-color: @base !important; border-color: @surface0 !important; th, td { color: @text !important; } tr.even, tr.alt, tr:nth-of-type(2n) { background-color: @mantle !important; } thead { background-color: @mantle !important; } } input, textarea { background-color: @crust !important; color: @text !important; border-color: @surface0 !important; } textarea.lined { background-color: @base !important; } path[fill="#444444"] { fill: @text !important; } pre { border-color: @surface0 !important; background-color: @mantle !important; } #page.hfeed a:hover { border-bottom-color: @accent !important; } .author-section { box-shadow: none !important; } .code-editor .expander { background-image: linear-gradient( to right, fade(@mantle, 0%), @mantle 50% ) !important; } .sidebar-content a:hover { color: @accent !important; } .progress { border-color: @surface0 !important; background-color: @crust !important; color: @base !important; } .sidebar { box-shadow: 1px 0 15px fade(@crust, 50%) !important; background-color: @base !important; } .sidebar-top { background-color: @base !important; border-bottom-color: @surface0 !important; } .meter.green { background-color: @green !important; } .file-upload { background-color: @crust !important; border-color: @surface0 !important; color: @text !important; } .notifyjs-foundation-success, .alert-box.success { color: @base !important; background-color: @green !important; border-color: @green !important; } .alert-box.alert, .alert-box.code-error { color: @base !important; background-color: @red !important; border-color: @red !important; } .lineno, article .categories, article .date, article .date a { color: @subtext0 !important; &a:hover { color: @accent !important; } } .linedwrap .lines { border-right-color: @surface0; } .codelines { background-color: @mantle !important; } span.beta { color: @accent !important; } .resources a { color: @text !important; &:hover .book-item { box-shadow: 0 0 15px @surface0 !important; } } #trinket-gallery #trinketDetails a.closer { border-color: @surface0 !important; background-color: @crust !important; } .panel { background-color: @crust !important; color: @text !important; border-color: @surface0 !important; li { color: @subtext0 !important; } } .code-plan-colors, .code-label, .code-name, .codeplus-plan-colors, .codeplus-label, .codeplus-name, .connect-plan-colors, .connect-label, .connect-name, .classroom-plan-colors, .classroom-label, .classroom-name, i.trinket-key.logo { background-color: @accent !important; color: @base !important; } .code-plan-colors-inverted, .connect-plan-colors-inverted, .classroom-plan-colors-inverted { color: @accent; } .nav-wrapper, .entry-footer { border-bottom-color: @surface0 !important; } .top-bar, .top-bar-section ul li, .top-bar-section li:not(.has-form) a:not(.button, .faux-button), .name { background-color: @crust !important; } .top-bar-section li:not(.has-form) a:not(.button, .faux-button):hover { background-color: @mantle !important; } .angular-ui-tree-placeholder { background-color: @base !important; border-color: @surface0 !important; } .editable-click:hover, a.editable-click:hover { color: @accent !important; } .outline-list-item.lesson { border-bottom-color: @surface0 !important; } .intercom-namespace .intercom-o8wqhy { box-shadow: none; } .intercom-lightweight-app-launcher-icon-open svg path { fill: @base !important; } .intercom-lightweight-app-launcher { background-color: @accent !important; } .edit-material-title:hover { background-color: @crust !important; } a.dashboard-actions-link, a.edit-lesson-actions-link, a.edit-material-actions-link { i { color: @text !important; } &:hover { background-color: @mantle !important; } } .dashboard-content.dashboard-list { .submission-row, .user-row { border-bottom-color: @surface0 !important; &:not(.row-open):hover { background-color: @mantle !important; } } } .dashboard-content .material-row .material-name span { color: @text !important; } .chart-wrapper { background-color: @base !important; } .chart-segment { span { color: @base !important; } &.completed { background-color: @green !important; } &.submitted { background-color: @blue !important; } &.started { background-color: @yellow !important; } &.not-started { background-color: @text !important; background-image: repeating-linear-gradient( 135deg, @subtext1, @subtext1 10px, transparent 10px, transparent 30px ) !important; } } .outline-list { background-color: @mantle !important; } .outline-list-item.angular-ui-tree-node.isDraft { background-image: repeating-linear-gradient( 45deg, @base, @base 10px, transparent 10px, transparent 20px ) !important; } .top-bar .toggle-topbar.menu-icon a { color: @text !important; } .top-bar.expanded .toggle-topbar a span::after { box-shadow: 0 0 0 1px @text, 0 7px 0 1px @text, 0 14px 0 1px @text; } .button.dropdown-blue::after { border-top-color: @text !important; } .top-bar-section .title h5 a { color: @text !important; } .update-row { border-top-color: @surface2 !important; } .top-bar-section .divider { border-top-color: @surface0 !important; } nav.top-bar .top-bar-section .dropdown, nav.top-bar .top-bar-section body.course .dropdown-blue, body.course nav.top-bar .top-bar-section .dropdown-blue { border-color: @surface0 !important; } .content-heading { background-color: @mantle !important; } .top-bar-section ul li > a, #userdata, .subheader, .green-highlight:not(.disabled) > *, .tab-scroll-link, .closer, .entry-title a, .jqconsole-prompt, .jqconsole-old-prompt { color: @text !important; } .top-bar-section .has-dropdown > a::after { border-top-color: @text !important; } #loadingContent { background-color: @base !important; } .fa-spinner { color: @text !important; } button, .button, .faux-button { background-color: @crust !important; color: @text !important; border-color: @surface0 !important; &:hover { background-color: @mantle !important; } &:not(.disabled) { &.secondary, &.success { background-color: @surface0 !important; color: @text !important; border-color: @surface0 !important; // the :not() adds specificity to override the `!important` in the default styles &:hover:not(.disabled) { background-color: @green !important; color: @base !important; border-color: @surface0 !important; } } &.danger { background-color: @red !important; border-color: @red !important; color: @base !important; &:hover { background-color: darken(@red, 5%) !important; } } &.caution { border-color: @red !important; color: @red; &:hover { background-color: fade(@red, 40%) !important; } } } &#sidebar-link, &#sidebar-close { background-color: @base !important; } } .site-header { border-bottom-color: @surface0 !important; } .menu-icon { fill: @text !important; } .draft-message, .broadcast-message { color: @subtext0 !important; } .color-swatch { color: @surface0 !important; } #embed-documentation dd, dl#documentation dd { &, .methodHeader, .methodDocs { border-color: @surface0 !important; pre { background-color: @base !important; } } .methodHeader { background-color: @crust !important; } &.active a { border-bottom-color: @surface0 !important; } } .switch { label { background-color: @crust !important; &::after { background-color: @text !important; } } input:checked + label { background-color: @accent !important; &::after { background-color: @base !important; } } } .accordion { dd > a { background-color: @mantle !important; color: @text !important; } dd > .content.active { background-color: @mantle !important; } } .icon-bar { background-color: @base !important; > a { background-color: @crust !important; } > a:hover { background-color: @mantle !important; } .item, > * i { color: @text !important; } } .exit-off-canvas { box-shadow: -4px 0 4px @surface0, 4px 0 4px @surface0 !important; background-color: fade(@base, 50%) !important; } #trinket-gallery #trinketDetails .spotlight { background-color: fade(@base, 50%) !important; } .right-off-canvas-menu, .left-off-canvas-menu { background-color: @base !important; } .tab-nav { border-bottom-color: @base !important; .menu-button { background-color: @base !important; color: @text !important; } .tab { background-color: @crust !important; border-color: @surface0 !important; border-top-color: @crust !important; box-shadow: none !important; i.warning { color: @red !important; } a { color: @text !important; } &.active { background-color: @surface0 !important; span { background-color: @surface0 !important; } } } } .side-nav { border-color: @surface0 !important; li { border-top-color: @surface2 !important; } a { color: @accent !important; &.active { color: @text !important; } } } li.side-nav-heading { background-color: @mantle !important; } .decorated > span { &::before, &::after { border-bottom-color: @surface0; } } .tab-options, .f-dropdown.open { background-color: @base !important; border-color: @surface0 !important; &::before, &::after { border-bottom-color: @crust !important; } a { background-color: @crust !important; color: @text !important; } } .reveal-modal { background-color: @base !important; border-color: @surface0 !important; box-shadow: none !important; .close-reveal-modal { color: @subtext0 !important; } } ul.off-canvas-list li { a { border-bottom-color: @surface0 !important; color: @text !important; background-color: @base !important; } a:hover { background-color: @mantle !important; } label { background-color: @mantle !important; border-top-color: @surface0 !important; color: @subtext0 !important; } } .faux-input { background-color: @crust !important; border-color: @surface0 !important; box-shadow: none !important; color: @text !important; } .label:not(.last-saved) { background-color: @accent !important; color: @base !important; } .last-saved { color: @subtext0 !important; } .code-editor .info-area { border-top-color: @surface0 !important; background-color: @base !important; color: @text !important; } .injectionDiv { color: initial !important; } .pricing-table { border-color: @surface0 !important; .cta-button { background-color: @base !important; } .price { background-color: @base !important; color: @text !important; } .title { background-color: @mantle !important; } .description, .bullet-item { background-color: @base !important; color: @text !important; border-bottom-color: @surface2 !important; p { color: @subtext0 !important; } } } .blue-highlight:not(.disabled) { background-color: @accent !important; &, i.fa, label { color: @base !important; } } .featured-course-list li { border-color: @surface0 !important; } .course-title { background-color: @mantle !important; border-bottom-color: @surface0 !important; a { color: @text !important; } } .course-list li { border-color: @surface0 !important; &:hover { background-color: @mantle !important; } } .library-subnav { border-bottom-color: @surface0 !important; } .trinket-last-date { color: @subtext0 !important; } .fa { &.neutral { color: @subtext0 !important; } &.success { color: @green !important; } &.alert, &.caution { color: @red !important; } } .shared-modal ul#my-folders-list li.folder-item { border-top-color: @surface0 !important; } .trinket-stat .badge { background-color: @accent !important; background-image: none !important; color: @base !important; } .editable-empty { color: @subtext0 !important; } .breadcrumbs { background-color: @mantle !important; border-color: @surface0 !important; .editable { border-bottom-color: @subtext0 !important; &:hover { color: @accent !important; } } > .current { color: @text !important; } } .jqconsole-header { color: @subtext0 !important; } .jqconsole-output:not(.error) { color: @subtext1 !important; } .jqconsole-output.error, .jqconsole-error { background-color: @red !important; color: @base !important; } .draft-circle { background-color: @accent !important; } .MathJax_Preview { color: @subtext0 !important; } [data-magellan-expedition], [data-magellan-expedition-clone] { background-color: @base !important; } #trinkets-list, .trinkets-list { > li { border-color: @surface0 !important; box-shadow: none; } > li .snapshot .title { background-color: unset !important; border-top-color: @surface0 !important; } .dragging-trinket { background-color: @crust !important; border-color: @surface0 !important; color: @subtext0 !important; } } #sidebar-link:hover, #sidebar-close:hover { opacity: 100% !important; } #search-2 input { &, &:hover, &:focus { background-color: @crust !important; color: @text !important; border-color: @surface0 !important; } } #material-edit .toolbar { background-color: @mantle; border-top-color: @surface0; border-bottom-color: @surface0; } #outline { background-color: @mantle !important; border-right-color: @surface0 !important; ul { background-color: @mantle !important; } .outline-list-item.material.current { background-color: @crust !important; color: @text !important; } .info, .outline-list-item.lesson { border-bottom-color: @surface0 !important; } } #outline-expander { background-color: @accent !important; color: @base !important; } #class-progress { background-color: @surface0 !important; .percentage { background-color: @accent !important; } } #course-nav { background-color: @mantle !important; border-color: @surface0 !important; .title.breadcrumbs { background-color: @crust !important; } } #reset-output { color: @subtext0 !important; } #instructionsToolbar { border-bottom-color: @surface0 !important; } #instructionsContainer { background-color: @base !important; } #team { background-color: @mantle !important; img { box-shadow: 0 0 0 10px @accent !important; } a.social { background-color: @accent !important; i::before { color: @base !important; } } } #outputTabs { background-color: @crust !important; border-bottom-color: @surface0 !important; .active { background-color: @mantle !important; } #instructionsTab { border-left-color: @surface0 !important; } } #recent-trinkets .item a { background-color: @mantle !important; border-color: @surface0 !important; box-shadow: none !important; } #content-wrapper { border-color: @surface0 !important; } #wrapper { border-color: @surface0 !important; .trinket-content { border-top-color: @surface0 !important; } .trinket-wrapper .trinket-content { background-color: @base !important; } .trinket-label { color: @subtext0 !important; } &, .trinket-content-wrapper > :not(.codeOutput, #content-overlay) { background-color: @base; } .codeOutput { background-color: initial !important; } .left-menu-toggle { border-right-color: @surface0 !important; } .right-menu-toggle { border-left-color: @surface0 !important; } .icon-bar .item.split { &.button, &.faux-button { span { border-left-color: @surface0 !important; } span::after { border-top-color: @text !important; } } } } #content-overlay { background-color: fade(@base, 20%) !important; } #books-index .book-img { outline-color: @surface0 !important; &:hover { outline-color: @accent !important; } } #svg-logo .letters { fill: @text !important; } #svg-logo .yellow { fill: @yellow !important; } #svg-logo .blue { fill: @blue !important; } #svg-logo .green { fill: @green !important; } #svg-logo .white { fill: @base !important; } #blue-logo-circle { // There normally isn't an animation applied to this // element because the circle blends in to the background. opacity: 0; animation: RtL 1s 0.75s ease 1 forwards !important; } #hero { background-color: @mantle !important; } #graphic { /* This is the element for graphics output. If styled with Catppuccin, it may make graphics unviewable due to contrast issues. */ background-color: white !important; &, label { color: initial !important; } } @keyframes attention-error-border-pulse { 0% { box-shadow: inset 0 0 0 @red; } 40% { box-shadow: inset 0 0 0 @red; } 70% { box-shadow: inset 0 0 6px @red; } 100% { box-shadow: inset 0 0 0 @red; } } @keyframes bluePulseButton { 0% { box-shadow: 0 0 0 0 fade(@accent, 40%); background-color: @accent; } 70% { box-shadow: 0 0 0 10px fade(@accent, 0%); background-color: @accent; } 100% { box-shadow: none; background-color: @accent; } } img[src$="trinket-logo-notag.png"], img[src$="trinket-logo.png"] { @svg: escape( '' ); content: url("data:image/svg+xml,@{svg}"); } img[src$="trinket-logo-notag.png"] { margin: 50px 0 30px; padding-left: 300px; } img[src$="trinket-logo-circles.png"] { @svg: escape( '' ); content: url("data:image/svg+xml,@{svg}"); } #dragbar { @svg: escape( '' ); background-color: @surface0 !important; border-left-color: @surface0 !important; border-right-color: @surface0 !important; background-image: url("data:image/svg+xml;utf8,@{svg}") !important; } #output-dragbar { @svg: escape( '' ); background-color: @surface0 !important; border-top-color: @surface0 !important; border-bottom-color: @surface0 !important; background-image: url("data:image/svg+xml;utf8,@{svg}") !important; } .lang-sprite, #trinkets-list.list-view > li .snapshot .title::before, .trinkets-list.list-view > li .snapshot .title::before { @svg: escape( '' ); background-image: url("data:image/svg+xml;utf8,@{svg}"); } } }