/* ==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}");
}
}
}