@import url(https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700);
@import url(/images/icons/simple-line-icons/css/simple-line-icons.css);
@import url(/images/icons/themify-icons/themify-icons.css);
/*
@import url(/images/icons/material-design-iconic-font/css/materialdesignicons.min.css);
@import url(/images/icons/weather-icons/css/weather-icons.min.css);
@import url(/images/icons/flag-icon-css/flag-icon.min.css);
*/

:root {
    --fs-theme-navigation-background: #F1F0F0;
    --fs-theme-text-color: #444444;

    --fs-primary-background: #F1F0F0;
    --fs-primary-text: #666666;
    --fs-primary-hover: #ced9e4;
    --fs-primary-active: #ced9e4;
    --fs-primary-focus: #ced9e4;
    --fs-primary-disabled: #edf1f5;

    --fs-secondary-background: #f8f9fa;
    --fs-secondary-text: #666666;
    --fs-secondary-hover: #e1e6ea;
    --fs-secondary-active: #e1e6ea;
    --fs-secondary-focus: #e1e6ea;
    --fs-secondary-disabled: #ffffff;

    --fs-info-background: #17a2b8;
    --fs-info-text: #fff;
    --fs-info-hover: #148c9f;
    --fs-info-active: #148c9f;
    --fs-info-focus: #148c9f;
    --fs-info-disabled: #4696a2;

    --fs-danger-background: #E57373;
    --fs-danger-text: #fff;
    --fs-danger-hover: #df5353;
    --fs-danger-active: #df5353;
    --fs-danger-focus: #df5353;
    --fs-danger-disabled: #efa9a9;


    --breakpoint-xs: 0;
    --breakpoint-sm: 576px;
    --breakpoint-md: 768px;
    --breakpoint-lg: 992px;
    --breakpoint-xl: 1200px;

    --fs-left-navigation-width: 250px;
    --fs-font-family: "Poppins", sans-serif;
}


/* Dynamic Sizing CSS */
/*
.fixed-layout .page-wrapper.xs {padding-top: 6.5rem;}
.fixed-layout .page-wrapper.sm {padding-top: 6.5rem;}
.fixed-layout .page-wrapper.md {padding-top: 6.5rem;}
.fixed-layout .page-wrapper.lg {padding-top: 6.5rem;}
.fixed-layout .page-wrapper.xl {padding-top: 6.5rem;}
 */



/*********************************************************
    HTML
 *********************************************************/
html {

}

body {
    font-family: var(--fs-font-family);
    font-size: 14px;
    font-weight: 300;
    line-height: 1.5;
    -webkit-text-size-adjust: 100%;
    -ms-text-size-adjust: 100%;
    -ms-overflow-style: scrollbar;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
}

* {
    font-family: var(--fs-font-family);
    font-size: 14px;
    font-weight: 300;
}

/*********************************************************
    LINKS
 *********************************************************/
a {
    color: var(--fs-theme-text-color);
    text-decoration: none;
    background-color: transparent;
    -webkit-text-decoration-skip: objects
}

a:hover {
    color: #1d6d86;
    text-decoration: none;
}



/*********************************************************
    HEADERS
 *********************************************************/
.h1, h1 {
    font-size: 1.5rem;
}

.h2, h2 {
    font-size: 1.4rem;
}

.h3, h3 {
    font-size: 1.3rem;
}

.h4, h4 {
    font-size: 1.2rem;
}

.h5, h5 {
    font-size: 1.1rem;
}

.h6, h6 {
    font-size: 1.0rem;
}


/*********************************************************
    DARK MODE
 *********************************************************/
.dark-mode, .dark-mode *:not(aside):not(aside *):not(.btn-info):not(.btn-info *):not(.bg-info):not(.bg-info *):not(select):not(select *):not(.btn-danger):not(.btn-danger *) {
    background-color: #343434;
    color: white !important;
}

.dark-mode .left-sidebar,
.dark-mode .offcanvas,
.dark-mode .offcanvas-body {
    background-color: #262626 !important;
}

.dark-mode .result-mini-card-view .card,
.dark-mode .result-shadow-card-view .card,
.dark-mode .result-boxes-view .card {
    border-width: 1px !important;
    border-color: #444 !important;
}

/* Boxes view: 25% thinner border than the default border-2 utility (2px -> 1.5px) */
.result-boxes-view .card {
    border-width: 1.5px !important;
}

.dark-mode .btn-close {
    background-color: white !important;
}

.dark-mode .sidebar-nav ul li a.current,
.dark-mode .sidebar-nav ul li a.current i {
    background-color: #0d0d0d;
}

/* Keep modal containers transparent and backdrop semi-transparent so app content shows behind modals */
.dark-mode .modal,
.dark-mode .modal-dialog {
    background-color: transparent !important;
}

.dark-mode .modal-backdrop {
    background-color: #000;
    opacity: 0.5;
}

.dark-mode .card-body {
    border: 0.1px solid transparent;
}
.dark-mode .card {
    border: 0.1px solid grey;
}

.dark-mode .modal-content {
    background-color: #111 !important;
    border: none !important;
    box-shadow: none !important;
    outline: none !important;
}

.dark-mode .modal-header,
.dark-mode .modal-body,
.dark-mode .modal-footer {
    background-color: #111 !important;
    border: none !important;
}

.dark-mode .modal-content *:not(.btn-info):not(.btn-info *):not(.btn-danger):not(.btn-danger *):not(.btn-close):not(.dropdown-item):not(.dropdown-item *) {
    background-color: #111 !important;
}

.dark-mode .modal-content .dropdown-item,
.dark-mode .modal-content .dropdown-item * {
    background-color: #111 !important;
    color: white !important;
}

.dark-mode .modal-content .dropdown-item:hover,
.dark-mode .modal-content .dropdown-item:hover *,
.dark-mode .modal-content li.active > .dropdown-item,
.dark-mode .modal-content li.active > .dropdown-item * {
    background-color: #2a2a2a !important;
    color: white !important;
}

.dark-mode .modal-content .btn-close {
    filter: invert(1) !important;
    background-color: transparent !important;
    border: none !important;
    box-shadow: none !important;
}

/* Toggle switch circle - blue dot */
.dark-mode .modal-content .form-check-input[type="checkbox"],
.modal-content .form-check-input[type="checkbox"] {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%230dcaf0'/%3e%3c/svg%3e") !important;
}

/* Radio buttons - white ring unselected, teal when selected */
.dark-mode .modal-content .form-check-input[type="radio"] {
    background-color: transparent !important;
    border-color: white !important;
}

.dark-mode .modal-content .form-check-input[type="radio"]:checked {
    background-color: #0dcaf0 !important;
    border-color: #0dcaf0 !important;
}

.dark-mode .modal-content ::-webkit-scrollbar {
    width: 8px;
}

.dark-mode .modal-content ::-webkit-scrollbar-track {
    background: #111;
}

.dark-mode .modal-content ::-webkit-scrollbar-thumb {
    background-color: #0dcaf0;
    border-radius: 4px;
}

.dark-mode .bootstrap-select .dropdown-menu,
.dark-mode .bootstrap-select .dropdown-menu .inner,
.dark-mode .bootstrap-select div.inner,
.dark-mode .bootstrap-select .dropdown-menu li,
.dark-mode .bootstrap-select .dropdown-menu li a,
.dark-mode .bootstrap-select .dropdown-menu li a span,
.dark-mode .bootstrap-select .dropdown-menu .dropdown-header {
    scrollbar-color: #2a2a2a #111 !important;
    scrollbar-width: thin !important;
    background-color: #111 !important;
    color: white !important;
}

.dark-mode .bootstrap-select .dropdown-menu::-webkit-scrollbar,
.dark-mode .bootstrap-select .dropdown-menu .inner::-webkit-scrollbar,
.dark-mode .bootstrap-select div.inner::-webkit-scrollbar,
.dark-mode .bootstrap-select .dropdown-menu *::-webkit-scrollbar {
    width: 8px !important;
}

.dark-mode .bootstrap-select .dropdown-menu::-webkit-scrollbar-track,
.dark-mode .bootstrap-select .dropdown-menu .inner::-webkit-scrollbar-track,
.dark-mode .bootstrap-select div.inner::-webkit-scrollbar-track,
.dark-mode .bootstrap-select .dropdown-menu *::-webkit-scrollbar-track {
    background: #111 !important;
}

.dark-mode .bootstrap-select .dropdown-menu::-webkit-scrollbar-thumb,
.dark-mode .bootstrap-select .dropdown-menu .inner::-webkit-scrollbar-thumb,
.dark-mode .bootstrap-select div.inner::-webkit-scrollbar-thumb,
.dark-mode .bootstrap-select .dropdown-menu *::-webkit-scrollbar-thumb {
    background-color: #2a2a2a !important;
    border-radius: 4px !important;
}

.dark-mode .modal-content .bootstrap-select .dropdown-menu li a:hover,
.dark-mode .modal-content .bootstrap-select .dropdown-menu li a:hover span,
.dark-mode .modal-content .bootstrap-select .dropdown-menu li.active a,
.dark-mode .modal-content .bootstrap-select .dropdown-menu li:hover a,
.dark-mode .bootstrap-select .dropdown-menu li a:hover,
.dark-mode .bootstrap-select .dropdown-menu li a:hover span,
.dark-mode .bootstrap-select .dropdown-menu li:hover a {
    background-color: #2a2a2a !important;
    color: white !important;
}

.dark-mode .result-icons-view * {
    border: none;
}

/* SweetAlert dark mode */
.dark-mode .swal2-container {
    background-color: rgba(0, 0, 0, 0.5) !important;
}

.dark-mode .swal2-popup {
    background-color: #111 !important;
    border: none !important;
    box-shadow: none !important;
}

.dark-mode .swal2-popup *:not(.swal2-confirm):not(.swal2-cancel) {
    background-color: #111 !important;
    color: white !important;
}

.dark-mode .swal2-actions {
    background-color: transparent !important;
}

.bootstrap-select .dropdown-menu li.selected a,
.bootstrap-select .dropdown-menu li.selected a span,
.bootstrap-select .dropdown-menu li.active a,
.bootstrap-select .dropdown-menu li.active a span {
    background-color: white !important;
    color: #333 !important;
}

.dark-mode #fullsort_search_block *:not(.link-select) {
    background-color: #0d0d0d !important;
}

.dark-mode ::placeholder {
    color: white !important;
    opacity: 1 !important;
}

.dark-mode #toggleLock {
    color: white !important;
}

.dark-mode .btn:hover, .dark-mode .btn:hover * {
    background-color: #0d0d0d !important;
}

.dark-mode .editable-submit, .dark-mode .editable-submit * {
    background-color: #0d0d0d !important;
}

.dark-mode .dropdown-item:hover, .dark-mode .dropdown-item:hover * {
    background-color: #3a3a3a !important;
}

.dark-mode .dropdown-item:hover {
    background-color: #3a3a3a !important;
}

.dark-mode .change-all-color, .dark-mode .change-color-hilite {
    background-color: #0d0d0d !important;
}

.dark-mode .feedback_trigger_text,
.dark-mode .feedback_content * {
    color: black !important;
}

.dark-mode .link-select {
    background-color: #0d0d0d !important;
}

.dark-mode .link-select:hover, .dark-mode .link-select:hover * {
    background-color: #262626 !important;
}

.dark-mode .current,
.dark-mode .current *,
.dark-mode .sidebar-nav,
.dark-mode .sidebar-nav * {
    color: white !important;
    background-color: transparent !important;
}

.dark-mode .sidebar-nav ul li:hover {
    background-color: #0d0d0d !important;
}



/*********************************************************
    LEFT NAVIGATION
 *********************************************************/
.left-sidebar {
    background: var(--fs-theme-navigation-background);
    position: fixed;
    width: var(--fs-left-navigation-width);
    height: 100%;
    top: 0px;
    z-index: 50;
}

.left-sidebar.show-sidebar {
    display: block;
}


@media (max-width:991px) {
    .left-sidebar {
        display: none;
    }
    .left-sidebar.show-sidebar {
        display: block;
    }
}
@media (min-width:992px) {
    .left-sidebar {
        display: block;
    }
}

.offcanvas {
    width: var(--fs-left-navigation-width)!important;
}

.offcanvas-body::-webkit-scrollbar {
    display: none;
}

.sidebar-nav ul li {
    list-style: none
}

.sidebar-nav ul li a {
    color: var(--fs-theme-text-color);
    padding: 7px 15px 7px 15px;
    display: block;
}

.sidebar-nav ul li a.current,
.sidebar-nav ul li a:hover,
.sidebar-nav ul li a.current i,
.sidebar-nav ul li a:hover i {
    background-color: #e7e5e4;
}

.sidebar-nav>ul>li>a i,
.sidebar-nav>ul>li>a .emoji-icon {
    width: 25px;
    display: inline-block;
    vertical-align: middle;
}

/* Color swatches keep their own fixed circular/square size (width:height
   must stay 1:1 or the shape distorts) - match the FA/emoji gutter with
   margin instead of stretching the box width. */
.sidebar-nav>ul>li>a .bucket-icon-color,
.sidebar-nav>ul>li>a .bucket-icon-color-square,
.sidebar-nav>ul>li>a .bucket-icon-color-triangle,
.sidebar-nav>ul>li>a .bucket-icon-color-diamond,
.sidebar-nav>ul>li>a .bucket-icon-color-star,
.sidebar-nav>ul>li>a .bucket-icon-color-arrow,
.sidebar-nav>ul>li>a .bucket-icon-color-arrow-skinny,
.sidebar-nav>ul>li>a .bucket-icon-color-rectangle,
.sidebar-nav>ul>li>a .bucket-icon-color-hexagon,
.sidebar-nav>ul>li>a .bucket-icon-color-pentagon,
.sidebar-nav>ul>li>a .bucket-icon-color-heart,
.sidebar-nav>ul>li>a .bucket-icon-color-plus,
.sidebar-nav>ul>li>a .bucket-icon-color-bucket {
    margin-right: 9px;
    vertical-align: middle;
}

.sidebar-nav ul li ul li a {
    padding: 10px 15px 10px 15px;
}

.sidebar-nav .has-arrow {
    position: relative
}

.sidebar-nav .has-arrow:after {
    position: absolute;
    content: '';
    width: 7px;
    height: 7px;
    border-width: 1px 0 0 1px;
    border-style: solid;
    right: 20px;
    -webkit-transform: rotate(135deg) translate(0, -50%);
    -ms-transform: rotate(135deg) translate(0, -50%);
    -o-transform: rotate(135deg) translate(0, -50%);
    transform: rotate(135deg) translate(0, -50%);
    -webkit-transform-origin: top;
    -ms-transform-origin: top;
    -o-transform-origin: top;
    transform-origin: top;
    top: 15px;
    -webkit-transition: all .3s ease-out;
    -o-transition: all .3s ease-out;
    transition: all .3s ease-out
}

.sidebar-nav .has-arrow[aria-expanded=true]:after,
.sidebar-nav li>.has-arrow.active:after {
    -webkit-transform: rotate(-135deg) translate(0, -50%);
    -ms-transform: rotate(-135deg) translate(0, -50%);
    -o-transform: rotate(-135deg) translate(0, -50%);
    top: 42%;
    width: 7px;
    transform: rotate(-135deg) translate(0, -50%)
}

#left-nav-create-bucket {
    cursor: pointer;
}



/*********************************************************
    TEMPLATE THEME
 *********************************************************/
.skin-default {}

.row {margin-left: 0rem; margin-right: 0rem;}

.hide {
    display: none
}

.editable {
    border-bottom: none !important;
}

.hide-caret:after { content: none!important; }
.hide-caret:before { content: none!important; }

.dropdown-menu .dropdown-item {
    padding: 7px 1.5rem;
}

.dropdown:hover .dropdown-menu {
    display: block;
}

.dropdown-menu .dropdown-item:hover {
    background-color: var(--fs-info-background);
    color: white;
}

.card {
    border: none;
    background-color: #fff;
    background-clip: border-box;
}

.card.hilite {
    background-color: #fafaaf;
    background-clip: border-box;
}

/* On mobile, two color-highlighted cards stacked back-to-back can blend
   into what looks like one card since they share the same background.
   Targets the .link-display WRAPPER (not just the inner .card) since
   that's what actually controls vertical stacking/spacing between
   items — margin on the inner card alone had no visible effect. */
@media (max-width: 767px) {
    .link-display:has(> .card.hilite) {
        margin-top: 0.5em;
    }
}

/* Icons view only: shrink the persistent "Color" highlight so it hugs
   the icon and title instead of filling the whole grid cell. Other
   views keep the full-width highlight. */
.result-icons-view .card.hilite {
    background-color: transparent !important;
}

.result-icons-view .card.hilite .card-body {
    background-color: #fafaaf !important;
    border-radius: 6px;
    padding: 4px 2% !important;
    width: fit-content;
    margin: 0 auto;
}

/* In dark mode a solid fill of the (usually pastel) hilite color reads
   as a thick, jarring block rather than an accent. Swap the fill for a
   thin colored outline instead - still clearly marks the link as
   colored, just lighter-touch against a dark card. */
body.dark-mode .result-icons-view .card.hilite .card-body {
    background-color: transparent !important;
    border: 1.5px solid #fafaaf;
    padding: 3px calc(2% - 1.5px) !important;
}

/* Every other card view (Mini, Boxes, Shadow, Vanilla, Masonry, etc.) -
   Icons view already gets its own colored-outline treatment above, so
   it's excluded here. Recolors whatever thin border the view's card
   already has (full border, or just border-bottom/border-end) to match
   the highlight color instead of leaving it the default grey. */
body.dark-mode .link-display:not(.result-icons-view) .card.hilite {
    border-color: #fafaaf !important;
}

/* Belt-and-suspenders for Vanilla/Masonry specifically: their cards use
   Bootstrap's .border utility, which also sets border-color via
   !important, so name these views explicitly to guarantee this wins
   regardless of selector-specificity ordering between the two. */
body.dark-mode .result-list-view .card.hilite,
body.dark-mode .result-masonry-view .card.hilite {
    border-color: #fafaaf !important;
}

.card-title {
    color:#444444;
}

.modal-title {
    color:#444444;
}

.card-footer, .modal-footer {
    background-color: inherit;
    border-top: none;
}
.dark-mode .card-footer {
    border-top: 1px solid transparent !important;
}

.line-clamp-2 {
    overflow: hidden;
    display: -webkit-box!important;
    -webkit-box-orient: vertical;
    /* truncate to 2 lines */
    -webkit-line-clamp: 2;
}

.line-clamp-1 {
    overflow: hidden;
    display: -webkit-box!important;
    -webkit-box-orient: vertical;
    /* truncate to 1 line */
    -webkit-line-clamp: 1;
}

/* The whole-card stretched-link overlay (see the card's own title anchor)
   otherwise sits above everything else in the card, including the
   description text below it - so a real mouse hover over the description
   never actually reaches it, silently breaking the hover-to-expand-full-
   description behavior. Lift the description above that overlay so hover
   events land on it directly again. */
.results-show-description {
    position: relative;
    z-index: 3;
}

.tt-dataset {
    margin-bottom: 20px;
}

.master-backdrop {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1060;
    background-color: #EAE7E6
}

.master-backdrop.fade {
    opacity: 0
}

.master-backdrop.show {
    opacity: 0.2
}

.card-background-shadow {
    background-color: #fbfbfb;
}


/*********************************************************
    HEADER
 *********************************************************/
.topbar {
    position: fixed;
    z-index: 50;
    width: 100%;
    background-color: #fff;
    max-height: 4.5rem;
}

@media (min-width:992px) {
    .topbar {padding-left: var(--fs-left-navigation-width); }
}

.input-group > .twitter-typeahead {
    flex: 1 1 auto;
    width: auto;
}

@media (max-width:991px) {
    #fullsort_search {padding-bottom: 0.5rem; padding-top: 0.5rem;}
    #fullsort_search_block {width: 100%;}
}
@media (min-width:992px) {
    #fullsort_search_block {width: 50%!important;}
}

#quick_search_string, #fullsort_search {
    height: 26.5px;
}


.twitter-typeahead .tt-menu .tt-suggestion {
    padding: 0.5rem 0.75rem 0.5rem 0.75rem;
}

.tt-suggestion:hover {
    background-color: var(--fs-info-background) !important;
}

/*********************************************************
    PAGE BODY
 *********************************************************/
.page-wrapper {
    padding-top: 4.5rem;
}

@media (min-width:992px) {
    .page-wrapper {
        margin-left: var(--fs-left-navigation-width)
    }
}

.link-sortable-placeholder {
    border: 2px dashed #aaa;
    height: 90px;
    width: 90px;
}

.bucket-sortable-placeholder {
    border: 2px dashed #aaa;
    height: 40px;
}

/* ============================================================
   LOCKED — hover/tap tint (day + dark mode). Confirmed final by
   user. DO NOT modify any rule in this block without asking the
   user first, even to "improve" or "simplify" it. See memory:
   feedback-hover-colors-locked.md
   ============================================================ */

/* card-overlay div disabled everywhere: hover/tap tint is applied directly
   to the card's own background-color instead of a layered semi-transparent
   div, so text/icons/favicon stay at full brightness (not dimmed). */
.card-overlay { display: none !important; }

/* Fix intermittent "second tap does nothing" on mobile: rapid taps on the
   same spot can be interpreted by the browser as a double-tap-to-zoom
   gesture, silently swallowing the second tap's click event before it
   ever reaches JS. touch-action:manipulation disables that disambiguation
   delay so consecutive taps register immediately and reliably. */
.link-display .card,
.link-display .list2-item,
.link-display .vintage-row,
.link-display .card a,
.link-display .list2-item a,
.link-display .vintage-row a {
    touch-action: manipulation;
}


/* Controls column sits above card content so ellipsis/checkbox stay visible.
   pointer-events:none on the column itself means blank padding within it
   doesn't block clicks meant for the card's stretched-link underneath —
   only the actual interactive children (re-enabled below) capture clicks.
   Matches both col-5 (Vanilla/Masonry's actions column before the Mini/
   Masonry title-widening change) and col-3 (Mini/Masonry after it) - the
   col-5-only version of this selector silently broke Mini/Masonry's
   ellipsis button when that column was narrowed. */
.link-display .card .col-5.position-relative,
.link-display .card .col-3.position-relative,
.link-display .list2-item .list2-actions { position: relative; z-index: 3; pointer-events: none; }
.link-display .card .col-5.position-relative > *,
.link-display .card .col-3.position-relative > *,
.link-display .list2-item .list2-actions > * { pointer-events: auto; }

/* When a card's menu is open (hover or touch-active), its controls must win
   the stacking fight against the NEXT card's controls, which share the same
   z-index and would otherwise paint over the open dropdown (same DOM tier,
   ties break by DOM order). Bump the active one way above everything else. */
.link-display .card:hover .col-5.position-relative,
.link-display .card:hover .col-3.position-relative,
.link-display .list2-item:hover .list2-actions,
.link-display .card.card-touch-active .col-5.position-relative,
.link-display .card.card-touch-active .col-3.position-relative,
.link-display .list2-item.card-touch-active .list2-actions { z-index: 1000; }

/* Hover/tap: light grey tint in day mode — DO NOT CHANGE, see memory */
.link-display .card:hover,
.link-display .list2-item:hover,
.link-display .vintage-row:hover,
.link-display .card.card-touch-active,
.link-display .list2-item.card-touch-active,
.link-display .vintage-row.card-touch-active {
    background-color: #f2f2f2 !important;
    border-color: rgba(0,0,0,0.5) !important;
}

/* Hover/tap: black tint in dark mode — covers every view type (card, list2, vintage) */
body.dark-mode .link-display .card:hover,
body.dark-mode .link-display .list2-item:hover,
body.dark-mode .link-display .vintage-row:hover,
body.dark-mode .link-display .card.card-touch-active,
body.dark-mode .link-display .list2-item.card-touch-active,
body.dark-mode .link-display .vintage-row.card-touch-active {
    background: #262626 !important;
    background-color: #262626 !important;
    border-color: #777 !important;
    box-shadow: inset 0 0 0 1px #777 !important;
}

/* ============================================================
   LOCKED — checkbox vertical position, confirmed exact by user
   ("perfect!!!!"). DO NOT change vertical-align/top without
   asking the user first, even for unrelated requests that touch
   nearby styles. See memory: feedback-hover-colors-locked.md
   ============================================================ */
.linkCheckbox {
    vertical-align: middle;
    position: relative;
    top: -3px;
}
/* ============================================================
   END LOCKED checkbox position
   ============================================================ */

/* Bootstrap's checkbox has its own white box background by default —
   make it transparent so it blends into the black card instead of
   standing out as a separate light patch. */
body.dark-mode .link-display .card:hover .linkCheckbox,
body.dark-mode .link-display .list2-item:hover .linkCheckbox,
body.dark-mode .link-display .vintage-row:hover .linkCheckbox,
body.dark-mode .link-display .card.card-touch-active .linkCheckbox,
body.dark-mode .link-display .list2-item.card-touch-active .linkCheckbox,
body.dark-mode .link-display .vintage-row.card-touch-active .linkCheckbox {
    background-color: #262626 !important;
    border-color: #777 !important;
}

/* Ellipsis button: ensure no stray background of its own */
body.dark-mode .link-display .card:hover .dropdown-toggle,
body.dark-mode .link-display .list2-item:hover .dropdown-toggle,
body.dark-mode .link-display .vintage-row:hover .dropdown-toggle,
body.dark-mode .link-display .card.card-touch-active .dropdown-toggle,
body.dark-mode .link-display .list2-item.card-touch-active .dropdown-toggle,
body.dark-mode .link-display .vintage-row.card-touch-active .dropdown-toggle {
    background-color: transparent !important;
}

/* Force EVERY descendant within a hovered/touch-active card transparent.
   Root cause of the "patchy" look: a blanket dark-mode rule
   (".dark-mode *:not(...)") gives nearly every element its own #343434
   background, including the Bootstrap .row wrapping the title/controls.
   A wildcard here catches all of them, not just the few container
   classes we happened to name before. More specific overrides below
   (checkbox, dropdown-toggle) still win due to higher specificity. */
body.dark-mode .link-display .card:hover *,
body.dark-mode .link-display .card.card-touch-active *,
body.dark-mode .link-display .list2-item:hover *,
body.dark-mode .link-display .list2-item.card-touch-active *,
body.dark-mode .link-display .vintage-row:hover *,
body.dark-mode .link-display .vintage-row.card-touch-active * {
    background-color: transparent !important;
}
/* ============================================================
   END LOCKED hover/tap tint block
   ============================================================ */

/* Icons view only: shrink hover/tap highlight so it hugs the icon
   and title (plus a small margin) instead of filling the whole
   grid cell. Cancels the full-card tint above and re-applies the
   same colors to a fit-content box around the card body. Other
   views are untouched. */
.result-icons-view .card:hover,
.result-icons-view .card.card-touch-active {
    background-color: transparent !important;
    border-color: transparent !important;
}

.result-icons-view .card:hover .card-body,
.result-icons-view .card.card-touch-active .card-body {
    background-color: #f2f2f2 !important;
    border-radius: 6px;
    padding: 4px 2% !important;
    width: fit-content;
    margin: 0 auto;
}

body.dark-mode .result-icons-view .card:hover,
body.dark-mode .result-icons-view .card.card-touch-active {
    background: transparent !important;
    background-color: transparent !important;
    border-color: transparent !important;
    box-shadow: none !important;
}

body.dark-mode .result-icons-view .card:hover .card-body,
body.dark-mode .result-icons-view .card.card-touch-active .card-body {
    background: #262626 !important;
    background-color: #262626 !important;
    border-radius: 6px;
    padding: 4px 2% !important;
    width: fit-content;
    margin: 0 auto;
}

/* The "..." controls box sits invisibly (opacity:0) at the very top of
   every icon-view card, positioned absolute so it's removed from flow -
   but the blanket dark-mode rule still gives it a solid #343434
   background, which silently covers the top of the icon underneath in
   dark mode (only "uncovered" on hover, when a different rule makes
   every descendant transparent). Keep it transparent always, not just
   on hover, so the icon is never covered. */
body.dark-mode .result-icons-view .card .position-absolute.text-end {
    background-color: transparent !important;
}

/* ============================================================
   LOCKED — dropdown menu appearance inside hovered/touch-active
   cards (dark mode). Confirmed final by user. DO NOT modify
   without asking the user first. See memory:
   feedback-hover-colors-locked.md
   ============================================================ */

/* Exception to the locked wildcard above: the open dropdown menu itself
   must stay opaque even though it's a descendant of a hovered/touch-active
   card — otherwise card text bleeds through it. Higher specificity (6
   identifiers) than the wildcard (5) so this wins. */
body.dark-mode .link-display .card:hover .dropdown-menu,
body.dark-mode .link-display .card.card-touch-active .dropdown-menu,
body.dark-mode .link-display .list2-item:hover .dropdown-menu,
body.dark-mode .link-display .list2-item.card-touch-active .dropdown-menu,
body.dark-mode .link-display .vintage-row:hover .dropdown-menu,
body.dark-mode .link-display .vintage-row.card-touch-active .dropdown-menu,
body.dark-mode .table-row-item:hover .dropdown-menu {
    background-color: #111 !important;
}

/* Same exception for individual item hover — the wildcard was also killing
   this highlight for dropdown menus opened from inside a hovered card. */
body.dark-mode .link-display .card:hover .dropdown-item:hover,
body.dark-mode .link-display .card.card-touch-active .dropdown-item:hover,
body.dark-mode .link-display .list2-item:hover .dropdown-item:hover,
body.dark-mode .link-display .list2-item.card-touch-active .dropdown-item:hover,
body.dark-mode .link-display .vintage-row:hover .dropdown-item:hover,
body.dark-mode .link-display .vintage-row.card-touch-active .dropdown-item:hover,
body.dark-mode .link-display .card:hover .dropdown-item:hover *,
body.dark-mode .link-display .card.card-touch-active .dropdown-item:hover *,
body.dark-mode .link-display .list2-item:hover .dropdown-item:hover *,
body.dark-mode .link-display .list2-item.card-touch-active .dropdown-item:hover *,
body.dark-mode .link-display .vintage-row:hover .dropdown-item:hover *,
body.dark-mode .link-display .vintage-row.card-touch-active .dropdown-item:hover *,
body.dark-mode .table-row-item:hover .dropdown-item:hover,
body.dark-mode .table-row-item:hover .dropdown-item:hover * {
    background-color: #3a3a3a !important;
    color: #fff !important;
}
/* ============================================================
   END LOCKED dropdown-in-hovered-card block
   ============================================================ */

/* Dark mode: dropdown menus match modal background */
.dark-mode .dropdown-menu { background-color: #111 !important; border-color: #333 !important; }
.dark-mode .dropdown-menu * { color: #ddd !important; background-color: transparent !important; border-color: rgba(255,255,255,0.2) !important; }
.dark-mode .dropdown-menu .dropdown-item:hover,
.dark-mode .dropdown-menu .dropdown-item:hover * { background-color: #3a3a3a !important; color: #fff !important; }
.dark-mode .dropdown-menu .dropdown-divider {
    height: 0 !important;
    background-color: transparent !important;
    border: none !important;
    border-top: 1px solid rgba(255,255,255,0.12) !important;
    margin: 4px 0 !important;
    padding: 0 !important;
    opacity: 1 !important;
}

/* Plain view: hide inner card border. Vanilla (.result-list-view) used
   to be included here too, but that actually hid its grid lines
   (border-end/border-bottom) entirely, contradicting this comment's
   own "keep grid lines only" intent - removed so Vanilla's border
   shows again. */
.result-headline-view .card { border-color: transparent !important; }
.dark-mode .result-headline-view .card { border-color: transparent !important; }

/*********************************************************
    FOOTER
 *********************************************************/
.footer {
    bottom: 0;
    left: 0px;
    right: 0;
}



/*********************************************************
    THEME PRELOADER
 *********************************************************/
.preloader {
    width: 100%;
    height: 100%;
    top: 0px;
    position: fixed;
    z-index: 99999;
    background: #fff
}

.preloader .cssload-speeding-wheel {
    position: absolute;
    top: calc(50% - 3.5px);
    left: calc(50% - 3.5px)
}

.loader,
.loader__figure {
    position: absolute;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    -moz-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    -o-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%)
}

.loader {
    overflow: visible;
    padding-top: 2em;
    height: 0;
    width: 2em
}

.loader__figure {
    height: 0;
    width: 0;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    border: 0 solid #1976d2;
    border-radius: 50%;
    -webkit-animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1);
    -moz-animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1);
    animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1)
}

.loader__label {
    float: left;
    margin-left: 50%;
    -webkit-transform: translateX(-50%);
    -moz-transform: translateX(-50%);
    -ms-transform: translateX(-50%);
    -o-transform: translateX(-50%);
    transform: translateX(-50%);
    margin: 0.5em 0 0 50%;
    font-size: 0.875em;
    letter-spacing: 0.1em;
    line-height: 1.5em;
    color: #1976d2;
    white-space: nowrap;
    -webkit-animation: loader-label 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1);
    -moz-animation: loader-label 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1);
    animation: loader-label 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1)
}

@-webkit-keyframes loader-figure {
    0% {
        height: 0;
        width: 0;
        background-color: #1976d2
    }
    29% {
        background-color: #1976d2
    }
    30% {
        height: 2em;
        width: 2em;
        background-color: transparent;
        border-width: 1em;
        opacity: 1
    }
    to {
        height: 2em;
        width: 2em;
        border-width: 0;
        opacity: 0;
        background-color: transparent
    }
}

@-moz-keyframes loader-figure {
    0% {
        height: 0;
        width: 0;
        background-color: #1976d2
    }
    29% {
        background-color: #1976d2
    }
    30% {
        height: 2em;
        width: 2em;
        background-color: transparent;
        border-width: 1em;
        opacity: 1
    }
    to {
        height: 2em;
        width: 2em;
        border-width: 0;
        opacity: 0;
        background-color: transparent
    }
}

@keyframes loader-figure {
    0% {
        height: 0;
        width: 0;
        background-color: #1976d2
    }
    29% {
        background-color: #1976d2
    }
    30% {
        height: 2em;
        width: 2em;
        background-color: transparent;
        border-width: 1em;
        opacity: 1
    }
    to {
        height: 2em;
        width: 2em;
        border-width: 0;
        opacity: 0;
        background-color: transparent
    }
}

@-webkit-keyframes loader-label {
    0% {
        opacity: 0.25
    }
    30% {
        opacity: 1
    }
    to {
        opacity: 0.25
    }
}

@-moz-keyframes loader-label {
    0% {
        opacity: 0.25
    }
    30% {
        opacity: 1
    }
    to {
        opacity: 0.25
    }
}

@keyframes loader-label {
    0% {
        opacity: 0.25
    }
    30% {
        opacity: 1
    }
    to {
        opacity: 0.25
    }
}


/*********************************************************
    LOGIN
 *********************************************************/
.login-box {
    width: 400px;
    margin: 0 auto;
}

#recoverform {
    display: none; }



/*********************************************************
    BUTTONS
 *********************************************************/
@media (min-width: 992px) and (max-width: 1226px) {
    .btn-custom {
        display: block;
        font-size: 0.875rem;
    }
}

@media (min-width: 1226px) {
    .btn-custom {
        font-size: 0.875rem;
    }
}

.topView {
    border: none !important;
    outline: none !important;
    box-shadow: none !important;
}


.btn-block {
    display: block;
    width: 100%
}

.btn-primary, .btn-primary:active {
    color: var(--fs-primary-text)!important;
    background-color: var(--fs-primary-background)!important;
    border-color: var(--fs-primary-background)!important;
}

.btn-primary:hover {
    color: var(--fs-primary-text);
    background-color: var(--fs-primary-hover);
    border-color: var(--fs-primary-hover)
}

.btn-primary.focus,
.btn-primary:focus {
    -webkit-box-shadow: 0 0 0 0.2rem var(--fs-primary-focus);
    box-shadow: 0 0 0 0.2rem var(--fs-primary-focus);
}

.btn-primary.disabled,
.btn-primary:disabled {
    color: var(--fs-primary-text);
    background-color: var(--fs-primary-disabled);
    border-color: var(--fs-primary-disabled)
}

.btn-secondary {
    color: var(--fs-secondary-text);
    background-color: var(--fs-secondary-background);
    border-color: var(--fs-secondary-background);
}

.btn-secondary:hover {
    color: var(--fs-secondary-text);
    background-color: var(--fs-secondary-hover);
    border-color: var(--fs-secondary-hover);
}

.btn-secondary.focus,
.btn-secondary:focus {
    -webkit-box-shadow: 0 0 0 0.2rem var(--fs-secondary-focus);
    box-shadow: 0 0 0 0.2rem var(--fs-secondary-focus);
}

.btn-secondary.disabled,
.btn-secondary:disabled {
    color: var(--fs-secondary-text);
    background-color: var(--fs-secondary-disabled);
    border-color: var(--fs-secondary-disabled);
}

.btn-info {
    color: var(--fs-info-text);
    background-color: var(--fs-info-background);
    border-color: var(--fs-info-background)
}

.btn-info:hover {
    color: var(--fs-info-text);
    background-color: var(--fs-info-hover);
    border-color: var(--fs-info-hover);
}

.btn-info.focus,
.btn-info:focus {
    -webkit-box-shadow: 0 0 0 0.2rem var(--fs-info-focus);
    box-shadow: 0 0 0 0.2rem var(--fs-info-focus);
}

.btn-info.disabled,
.btn-info:disabled {
    color: var(--fs-info-text);
    background-color: var(--fs-info-disabled);
    border-color: var(--fs-info-disabled)
}

.btn-danger {
    color: var(--fs-danger-text);
    background-color: var(--fs-danger-background);
    border-color: var(--fs-danger-background);
}

.btn-danger:hover {
    color: var(--fs-danger-text);
    background-color: var(--fs-danger-hover);
    border-color: var(--fs-danger-hover);
}

.btn-danger.focus,
.btn-danger:focus {
    -webkit-box-shadow: 0 0 0 0.2rem var(--fs-danger-focus);
    box-shadow: 0 0 0 0.2rem var(--fs-danger-focus);
}

.btn-danger.disabled,
.btn-danger:disabled {
    color: var(--fs-danger-text);
    background-color: var(--fs-danger-disabled);
    border-color: var(--fs-danger-disabled);
}

.btn-facebook, .btn-facebook:hover {
    color: #fff;
    background-color: #3b5998
}


.btn-twitter, .btn-twitter:hover {
    color: #fff;
    background-color: #55acee
}

.btn-linkedin, .btn-linkedin:hover {
    color: #fff;
    background-color: #007bb6
}

.btn-googleplus, .btn-googleplus:hover {
    color: #fff;
    background-color: #dd4b39
}


/*********************************************************
    VANILLA VIEW (result-list-view)
 *********************************************************/
.result-list-view .linkName {
    font-size: 14.3px;
}

.result-list-view .results-show-description .card-text {
    font-size: 13.2px;
}

/* Cards were flush against each other (m-0, only a border line as a
   divider) and Bootstrap's py-3 padding made each row taller than
   needed - Bootstrap utility classes carry !important, so this needs
   it too to actually win. Shrinks padding and adds a small 3px gap
   between consecutive cards. */
.result-list-view .card {
    padding-top: 3px !important;
    padding-bottom: 3px !important;
    margin-bottom: 3px !important;
}

/*********************************************************
    MASONRY VIEW (result-masonry-view)
 *********************************************************/
/* #sortable_links/#curated_links is one shared .row container reused by
   every view (individual .link-display items just toggle show/hide per
   active view) - CSS multi-column layout needs the container itself to
   not be a flex container, so this only applies when the JS view
   switcher has set data-view="masonry" on it, leaving every other view's
   shared-container layout untouched. */
#sortable_links[data-view="masonry"],
#curated_links[data-view="masonry"] {
    display: block !important;
    column-count: 1;
    column-gap: 1rem;
    padding-left: 5px;
    padding-right: 5px;
}

@media (min-width: 576px) {
    #sortable_links[data-view="masonry"],
    #curated_links[data-view="masonry"] {
        column-count: 2;
    }
}

@media (min-width: 992px) {
    #sortable_links[data-view="masonry"],
    #curated_links[data-view="masonry"] {
        column-count: 3;
    }
}

@media (min-width: 1400px) {
    #sortable_links[data-view="masonry"],
    #curated_links[data-view="masonry"] {
        column-count: 4;
    }
}

.result-masonry-view {
    display: inline-block;
    width: 100%;
    break-inside: avoid;
    -webkit-column-break-inside: avoid;
    margin-bottom: 1rem;
}

.result-masonry-view .linkName {
    font-size: 13px;
}

.result-masonry-view .results-show-description .card-text {
    font-size: 12px;
}

/* News Feed modal (Start Page widget) */
.news-feed-list {
    display: flex;
    flex-direction: column;
}

.news-feed-item {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 12px 4px;
    border-bottom: 1px solid #eaecef;
    text-decoration: none;
    color: inherit;
    /* iOS Safari's default tap-highlight flash renders as a tight grey
       box around just the text content on this flex layout instead of
       the whole row - the site-wide reset on <body> isn't reaching
       content injected into the modal at runtime. Override directly. */
    -webkit-tap-highlight-color: transparent;
}

.news-feed-item-title,
.news-feed-item-source {
    -webkit-tap-highlight-color: transparent;
}

.news-feed-item:last-child {
    border-bottom: none;
}

.news-feed-item:hover {
    background-color: #f7f7f7;
    text-decoration: none;
}

.news-feed-item-title {
    font-size: 14px;
    font-weight: 600;
    color: #1a1d23;
    line-height: 1.4;
}

.news-feed-item-source {
    font-size: 11px;
    font-weight: 500;
    color: #8a8f9a;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

/* #modal-news-feed prefix (an ID) guarantees these beat the blanket
   dark-mode modal rule, which forces #111 backgrounds on nearly
   everything inside any modal and isn't aware of this new content. */
#modal-news-feed.dark-mode .news-feed-item,
.dark-mode #modal-news-feed .news-feed-item {
    border-bottom-color: rgba(255,255,255,0.12);
}

.dark-mode #modal-news-feed .news-feed-item:hover {
    background-color: #2a2a2a !important;
}

/* Same root cause fixed before elsewhere: the blanket dark-mode modal
   rule gives the title/source spans their own #111 background,
   painting over the row's hover color in patches instead of one
   solid fill. Force them transparent while their row is hovered. */
.dark-mode #modal-news-feed .news-feed-item:hover * {
    background-color: transparent !important;
}

.dark-mode #modal-news-feed .news-feed-item-title {
    color: #e8eaf0 !important;
}

.dark-mode #modal-news-feed .news-feed-item-source {
    color: #8a8f9a !important;
}

/*********************************************************
    CARDS-VIEW
 *********************************************************/
.card-img-container {
    height: 110px;
    padding-top: 1rem;
}

.fs-card-img {
    max-height: 90px;
    max-width: 100%;
    width: auto;
}

/*********************************************************
    ICONS-VIEW
 *********************************************************/
.icons-img {
    width: 20px;
    height: 20px;
}

.icons-bg {
    background-color: transparent;
}

/* Many favicons carry their own white square background baked into the
   image. That's invisible against the white page in light mode, but in
   dark mode it reads as a broken/cut-off white box around the icon.
   Rounding the image's own corners makes it read as a deliberate icon
   chip instead, in both modes. */
.result-icons-view .results-show-cover img {
    border-radius: 8px;
}

.icons-title {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 7em;
    font-size: 1rem;
    font-weight: 400;
}

@media (min-width:1400px) {
    .icons-title {
        max-width: 6em;
        font-size: .85rem;
        font-weight: 400;
    }
}

.result-icons-view {
    width: 16%;
}

@media (max-width: 768px) {
    .result-icons-view {
        width: 33%;
    }
}

/*********************************************************
    BACKGROUNDS
 *********************************************************/
.bg-primary {
    background-color: var(--fs-primary-background)!important;
}

.bg-secondary {
    background-color: var(--fs-secondary-background)!important;
}

.bg-info {
    background-color: var(--fs-info-background)!important;
}

.bg-warning {
    background-color: transparent!important;
}

.bg-danger {
    background-color: var(--fs-danger-background)!important;
}



/*********************************************************
    FORMS
 *********************************************************/
.form-group {
    margin-bottom: 2.5rem;
}

@media (max-width:991px) {
    .form-group {
        margin-bottom: 2.0rem
    }
}

.form-control {
    min-height: 38px;
}

.form-control-sm {
    min-height: 20px!important;
}

.form-material .form-group {
    overflow: hidden
}

.form-material .form-control {
    background-color: rgba(0, 0, 0, 0);
    background-position: center bottom, center calc(100% - 1px);
    background-repeat: no-repeat;
    background-size: 0 2px, 100% 1px;
    padding: 5;
    -webkit-transition: background 0s ease-out 0s;
    -o-transition: background 0s ease-out 0s;
    transition: background 0s ease-out 0s
}

.form-material .form-control,
.form-material .form-control.focus,
.form-material .form-control:focus {
    background-image: -webkit-gradient(linear, left top, left bottom, from(var(--fs-theme-text-color)), to(var(--fs-theme-text-color))), -webkit-gradient(linear, left top, left bottom, from(#e9ecef), to(#e9ecef));
    background-image: -webkit-linear-gradient(var(--fs-theme-text-color), var(--fs-theme-text-color)), -webkit-linear-gradient(#e9ecef, #e9ecef);
    background-image: -o-linear-gradient(var(--fs-theme-text-color), var(--fs-theme-text-color)), -o-linear-gradient(#e9ecef, #e9ecef);
    background-image: linear-gradient(var(--fs-theme-text-color), var(--fs-theme-text-color)), linear-gradient(#e9ecef, #e9ecef);
    border: 0 none;
    border-radius: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
    float: none
}

.form-material .form-control.focus,
.form-material .form-control:focus {
    background-size: 100% 2px, 100% 1px;
    outline: 0 none;
    -webkit-transition-duration: 0.3s;
    -o-transition-duration: 0.3s;
    transition-duration: 0.3s
}

.form-check-input:checked {
    background-color: #148c9f;
    border-color: #148c9f;
}



/*********************************************************
    Nested Bucket Display
 *********************************************************/
.option-me-1 { margin-left: 1.25rem; }
.option-me-2 { margin-left: 2.5rem; }
.option-me-3 { margin-left: 3.75rem; }
.option-me-4 { margin-left: 5rem; }
.option-me-5 { margin-left: 6.25rem; }
.option-me-6 { margin-left: 7.5rem; }
.option-me-7 { margin-left: 8.75rem; }



/*********************************************************
    TABS
 *********************************************************/


/*********************************************************
    Vintage View
 *********************************************************/
.result-vintage-view {
    border: none !important;
}

#vintage-bucket-list {
    padding: 4px 8px;
    overflow-x: hidden;
}

.vintage-bucket-section {
    margin-bottom: 12px;
}

.vintage-bucket-name {
    font-weight: bold;
    font-size: 1.125rem;
    margin-bottom: 0.5em;
    margin-top: 4px;
    padding-left: 20px;
}

/* Same irradiation-effect compensation as .vintage-link — white bold
   text on dark backgrounds reads heavier than the same weight on light. */
.dark-mode .vintage-bucket-name {
    font-weight: 600;
}
.vintage-row {
    padding: 1px 8px 1px 20px;
    line-height: 1.4;
    position: relative;
}

/* Bucket-list Retro view only: hover should hug the text, not span the
   full row width. Scoped here so it doesn't affect the other Retro view
   (.vintage-row with d-flex/space-between for title+controls layout),
   which needs the full row width. */
#vintage-bucket-list .vintage-row {
    display: block;
    width: fit-content;
    max-width: 100%;
}

.vintage-row:hover .vintage-menu-btn {
    opacity: 1 !important;
}

/* Retro bucket-list hover — matches the same hover colors used elsewhere
   (day: light grey, dark: #262626). This view isn't wrapped in
   .link-display, so it needs its own rule separate from the locked
   .link-display .vintage-row hover block. */
#vintage-bucket-list .vintage-row:hover {
    background-color: #f2f2f2;
}
body.dark-mode #vintage-bucket-list .vintage-row:hover {
    background-color: #262626;
}

.vintage-link {
    color: #0000EE;
    text-decoration: underline;
    font-size: 1.125rem;
    font-weight: 500;
    word-break: break-word;
}

.vintage-link:visited {
    color: #551A8B;
}

.vintage-link:hover {
    color: #0000EE;
}

/* White text on a dark background reads as bolder than the same weight
   does on light (irradiation effect) — lighten it to compensate. */
.dark-mode .vintage-link {
    font-weight: 400;
}

/* List2 view */
.list2-item {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    padding: 13px 20px 13px 0px;
    border-bottom: 1px solid #eaecef;
    background: #fff;
    position: relative;
}
.list2-thumb { flex-shrink: 0; width: 44px; height: 44px; border-radius: 6px; display: flex; align-items: center; justify-content: center; overflow: hidden; position: relative; z-index: 1; pointer-events: none; }
.list2-thumb a { pointer-events: auto; }
.list2-favicon { width: 24px; height: 24px; object-fit: contain; }
.list2-body { flex: 1 1 auto; min-width: 0; position: relative; z-index: 1; pointer-events: none; }
.list2-title a { pointer-events: auto; }
.list2-actions { flex-shrink: 0; display: flex; align-items: center; position: relative; z-index: 1; }
.list2-title { font-size: 14px; font-weight: 700; color: #1a1d23; line-height: 1.4; margin-bottom: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.list2-title a { color: inherit; text-decoration: none; font-weight: 700; }
.list2-title a:hover { text-decoration: underline; }
.list2-desc { font-size: 12px; color: #1a1d23; line-height: 1.5; margin-bottom: 5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.list2-meta { display: flex; align-items: center; gap: 6px; }

/* List's Bucket/Domain/Date + Tags line - same pipe-joined format and
   right-aligned/truncating Tags as Mini/Masonry (see the shared
   .mini-meta rules and JS separator logic). Replaces the old
   dot-marker bucket + always-visible domain/date styling now that all
   three are opt-in fields joined the same way everywhere. */
.result-list2-view .mini-meta {
    font-size: 11px;
    color: #8a8f9a;
}

.result-list2-view .mini-meta * {
    font-size: inherit !important;
}

.result-list2-view .tagRow {
    font-size: 11px;
}

.result-list2-view .tagRow * {
    font-size: inherit !important;
}

/* On phone, clamp the description to 3 lines with an ellipsis; tap
   it to expand the full text in place (card grows to fit). */
@media (max-width: 767px) {
    .list2-desc {
        white-space: normal;
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 3;
        pointer-events: auto;
        cursor: pointer;
    }
    .list2-desc.expanded {
        overflow: visible;
        display: block;
        -webkit-line-clamp: unset;
    }
}

.list2-item.hilite { background: #fafaaf; }

.dark-mode .list2-item { background: #20242e; border-bottom: 1px solid rgba(255,255,255,0.12); }
.dark-mode .list2-item.hilite { background: #fafaaf; }
.dark-mode .list2-title { color: #e8eaf0; }
.dark-mode .list2-desc { color: #9aa0b0; }
.dark-mode .list2-sep { color: #3a4050; }
.dark-mode .list2-domain { color: #5b9bd5; }
.dark-mode .list2-date { color: #5c6272; }

/* Table view (test) - dense spreadsheet-style rows */
.table-row-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 5px 16px;
    border-bottom: 1px solid #eaecef;
    background: #fff;
    position: relative;
    font-size: 12px;
}

/* Every row is position:relative with no explicit z-index, so with
   auto stacking a LATER row in the list paints over an EARLIER row's
   open "..." menu (same stacking level - DOM order wins). Lift the
   whole row above its neighbors while its own menu is open, on both
   click (mobile) and hover (desktop). */
.table-row-item:has(.dropdown-menu.show) {
    z-index: 1000;
}
.table-row-icon { flex-shrink: 0; width: 18px; height: 18px; position: relative; z-index: 1; pointer-events: none; }
.table-row-favicon { width: 18px; height: 18px; object-fit: contain; border-radius: 3px; }
.table-row-title {
    flex: 1 1 260px;
    min-width: 0;
    font-weight: 500;
    color: #1a1d23;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    position: relative;
    z-index: 1;
    pointer-events: none;
}
.table-row-bucket {
    flex: 0 1 130px;
    min-width: 0;
    color: #8a8f9a;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.table-row-domain {
    flex: 0 1 160px;
    min-width: 0;
    color: #5b9bd5;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.table-row-date { flex: 0 0 92px; color: #a0aec0; text-align: right; white-space: nowrap; }
.table-row-tags {
    flex: 0 1 160px;
    min-width: 0;
    color: #8a8f9a;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Bucket/Domain/Date/Tags at 90% of the title's size (they inherit
   the same 12px base as .table-row-title, so 0.9em lands there
   directly). Tags' own <span> tags need the inherit !important - the
   site's global "* { font-size: ... }" rule (near the top of this
   file) sets font-size directly on every element, so without this
   they'd ignore their parent's smaller size the same way Mini's
   Bucket/Domain/Date spans originally did. */
.table-row-bucket,
.table-row-domain,
.table-row-date,
.table-row-tags {
    font-size: 0.9em;
}

.table-row-tags * {
    font-size: inherit !important;
}

.table-row-tags span {
    text-decoration: underline;
}
.table-row-tags span:not(:last-child)::after {
    content: ", ";
    text-decoration: none;
}
.table-row-actions { flex-shrink: 0; position: relative; z-index: 1; pointer-events: none; }
.table-row-actions > * { pointer-events: auto; }
.table-row-actions .dropdown-menu {
    max-height: 70vh;
    overflow-y: auto;
    overscroll-behavior: contain;
}

/* Hover: same light grey tint as everywhere else, reveal the select
   checkbox (not the "..." menu - stays hidden), and let the whole row
   navigate (not just the domain text). */
.table-row-item:hover {
    background-color: #f2f2f2 !important;
}
body.dark-mode .table-row-item:hover {
    background: #262626 !important;
    background-color: #262626 !important;
}
body.dark-mode .table-row-item:hover * {
    background-color: transparent !important;
}
.table-row-item:hover .linkCheckbox,
.table-row-item:hover .dropdown-toggle {
    opacity: 1 !important;
}

@media (max-width: 991px) {
    /* Phone and tablet: drop bucket/domain/date/tags entirely rather
       than squeezing them in - gives the title room to breathe instead
       of fighting over limited width. */
    .table-row-bucket, .table-row-domain, .table-row-date, .table-row-tags { display: none; }
    .table-row-title { flex: 1 1 auto; }
    /* Pull the "..." button/checkbox out of the flex flow (overlaying the
       row instead) so they don't reserve layout width for a control
       that's invisible until tapped anyway. */
    .table-row-actions {
        position: absolute;
        right: 4px;
        top: 50%;
        transform: translateY(-50%);
    }
    .table-row-actions .btn.dropdown-toggle { padding: 4px; min-width: 0; }
    .table-row-actions .linkCheckbox { width: 16px; height: 16px; margin: 0; }
}

.table-row-item.hilite { background: #fafaaf; }

.dark-mode .table-row-item { background: #20242e; border-bottom: 1px solid rgba(255,255,255,0.12); }
.dark-mode .table-row-item.hilite { background: #fafaaf; }
.dark-mode .table-row-title { color: #e8eaf0; }
.dark-mode .table-row-bucket { color: #8a8f9a !important; }
.dark-mode .table-row-domain { color: #5b9bd5 !important; }
.dark-mode .table-row-date { color: #5c6272 !important; }
.dark-mode .table-row-tags { color: #8a8f9a !important; }

/* Start Grid view */
.start-grid-container {
    display: flex;
    align-items: flex-start;
    touch-action: pan-y;
    gap: 20px;
    padding: 10px 15px;
}

/* Desktop only: nudge the grid right, away from the sidebar edge */
@media (min-width: 992px) {
    .start-grid-container { padding-left: 35px; }
}

.start-grid-col {
    flex: 1;
    min-width: 0;
}

@media (max-width: 800px)  { .start-grid-container { flex-wrap: wrap; } .start-grid-col { flex: 1 1 45%; } }
@media (max-width: 500px)  {
    .start-grid-col { flex: 1 1 100%; }
    /* Links were shrink-wrapping to their own text width (align-items:
       flex-start), leaving a big empty gap on the right on phone - the
       single column should use the full width it's given. */
    .start-grid-links { align-items: stretch !important; }
}

.start-grid-bucket {
    margin-bottom: 20px;
    background: transparent;
    border: none;
    border-radius: 0;
    overflow: visible;
}

.start-grid-bucket-header {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 2px 0 6px 0;
    background: transparent;
    border-bottom: none;
    font-weight: 700;
    font-size: 0.95rem;
    color: #111;
}

.start-grid-bucket-icon {
    width: 16px;
    height: 16px;
    object-fit: contain;
}

.start-grid-bucket-icon-default {
    font-size: 14px;
    color: #666;
}

.start-grid-bucket-name {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-weight: 600;
    font-size: 0.95rem;
    color: #111;
}

.start-grid-links {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    padding: 4px 0;
}

.start-grid-link {
    display: flex;
    align-items: center;
    position: relative;
    cursor: grab;
    gap: 6px;
    padding: 3px 4px;
    color: #333;
    touch-action: pan-y;
    text-decoration: none;
    font-size: 0.8rem;
    line-height: 1.3;
}

/* Same fix as Table view: every card is position:relative with no
   explicit z-index, so a LATER card in the list paints over an EARLIER
   card's open "..." menu (and moving the mouse onto that later card
   makes ITS ellipsis hover-reveal and intercept clicks meant for the
   open menu). Lift the whole card above its neighbors while its own
   menu is open. */
.start-grid-link:has(.dropdown-menu.show) {
    z-index: 1000;
}

.start-grid-link-actions {
    flex-shrink: 0;
    position: relative;
    z-index: 1;
    pointer-events: none;
}

.start-grid-link-actions > * {
    pointer-events: auto;
}

.start-grid-link-actions .dropdown-toggle {
    opacity: 0;
    padding: 2px 4px;
    pointer-events: auto;
}

.start-grid-link:hover .start-grid-link-actions .dropdown-toggle {
    opacity: 1;
}

.start-grid-link-actions .dropdown-item:hover,
.start-grid-link-actions .dropdown-item:active {
    background-color: #17a2b8;
    color: #fff;
}

.start-grid-link-placeholder {
    border: 1px dashed #17a2b8;
    border-radius: 4px;
    margin: 2px 4px;
}

.dark-mode .start-grid-link-placeholder {
    border-color: #17a2b8;
}

.start-grid-link:hover {
    background: #f0f0f0;
    color: #000;
    text-decoration: none;
}

/* Bucket | Domain | Date line (Mini, Masonry, ...) - about 70% of the
   description text's size. Uses em (not a flat px/rem) so it scales
   along with the site's font-size setting instead of a fixed value
   that would look right at one text-size setting and wrong at
   others. The site's own "* { font-size: ... }" rule (near the top
   of this file) sets font-size directly on every element, including
   the spans inside .mini-meta - so setting this on the wrapping div
   alone doesn't reach them via inheritance. The child spans are
   explicitly set to "inherit" here so they pick up the div's already
   -scaled-down size instead of the global rule's own value. */
.result-mini-card-view .mini-meta,
.result-masonry-view .mini-meta {
    font-size: 0.8em !important;
}

.result-mini-card-view .mini-meta *,
.result-masonry-view .mini-meta * {
    font-size: inherit !important;
}

/* Tags sit on the same line as Bucket/Domain/Date - matching that
   line's size (same reasoning/fix as .mini-meta above). */
.result-mini-card-view .tagRow,
.result-masonry-view .tagRow {
    font-size: 0.8em !important;
}

.result-mini-card-view .tagRow *,
.result-masonry-view .tagRow * {
    font-size: inherit !important;
}

/* Vanilla: same treatment, but 10% larger across the board (title,
   description, and this Bucket/Domain/Date/Tags line) per explicit
   request - kept as its own rule instead of joining Mini/Masonry's
   0.8em above since only Vanilla's sizing changed here. */
.result-list-view .mini-meta {
    font-size: 0.88em !important;
}

.result-list-view .mini-meta * {
    font-size: inherit !important;
}

.result-list-view .tagRow {
    font-size: 0.88em !important;
}

.result-list-view .tagRow * {
    font-size: inherit !important;
}

/* The Bucket/Domain/Date + Tags row otherwise sits right under the
   title/description, wherever that content happens to end - leaving a
   big empty gap below it on short cards, since .card-body itself
   isn't a flex container and nothing pushes this row down. Making it
   one and pinning this specific row to the bottom (margin-top: auto)
   keeps it flush with the card's bottom edge no matter how short the
   title/description above it is, or how tall the row's card-height
   neighbors force the card to be. */
.result-mini-card-view .card-body,
.result-list-view .card-body,
.result-masonry-view .card-body {
    display: flex;
    flex-direction: column;
}

.result-mini-card-view .card-body > .row:last-child,
.result-list-view .card-body > .row:last-child {
    margin-top: auto;
}

/* Bricks: Tags got split into its own row above Bucket/Domain/Date (was
   sharing a line with them), so the two are wrapped in one plain div to
   keep them moving down together as a unit - :last-child here targets
   that wrapper instead of a .row directly. */
.result-masonry-view .card-body > div:last-child {
    margin-top: auto;
}

/* DataTables pagination (admin tables) - the active page number
   defaults to Bootstrap's blue, which doesn't match the site's own
   teal "info" buttons (e.g. the "Bucket"/"Link" add buttons right
   above it). Match that color instead. */
.dataTables_wrapper .page-item.active .page-link {
    background-color: var(--fs-info-background) !important;
    border-color: var(--fs-info-background) !important;
}

/*********************************************************
    TOAST NOTIFICATIONS
 *********************************************************/
/* jquery.toast.css hardcodes a flat 250px width with no responsive
   handling at all - same width on a phone as a desktop monitor.
   Widened here instead of editing the vendor plugin file directly, so
   longer messages wrap less. On phones, scale to the viewport instead
   of a flat number so it can't get too close to (or past) the screen
   edges on a narrow/older phone. */
.jq-toast-wrap {
    width: 320px;
}

@media (max-width: 767px) {
    .jq-toast-wrap {
        width: calc(100vw - 40px);
        max-width: 320px;
    }
    .jq-toast-wrap.bottom-right,
    .jq-toast-wrap.top-right {
        right: 20px;
    }
    .jq-toast-wrap.bottom-left,
    .jq-toast-wrap.top-left {
        left: 20px;
    }
}

/* jquery.toast.css hardcodes success toasts to Bootstrap's bright blue
   (#0d6efd). Overridden here to a muted, darker teal instead of the
   site's full-saturation accent teal (#0dcaf0), which read as too
   bright/eye-catching for a routine "saved" notification. */
.jq-icon-success {
    background-color: #2b6e72;
    border-color: #2b6e72;
}

.start-grid-link.hilite {
    background: #fafaaf;
    border-radius: 4px;
}

.dark-mode .start-grid-link.hilite {
    background: #fafaaf;
}

.start-grid-favicon {
    width: 14px;
    height: 14px;
    touch-action: pan-y;
    object-fit: contain;
    flex-shrink: 0;
}

.start-grid-favicon-default {
    font-size: 12px;
    color: #767676;
    flex-shrink: 0;
}

.start-grid-link-name {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    touch-action: pan-y;
}

/* Dark mode */
.dark-mode .start-grid-bucket {
    background: transparent;
    border: none;
}

.dark-mode .start-grid-bucket-header {
    background: transparent;
    border: none;
    color: #fff;
}

.dark-mode .start-grid-link {
    color: #ddd;
}

/* Dark mode: top nav buttons hover — matches bucket menu/links/start grid hover */
.dark-mode .topLink:hover,
.dark-mode .topGear:hover,
.dark-mode .topView:hover,
.dark-mode .topEllip:hover,
.dark-mode .topLink.btn-primary,
.dark-mode .topGear.btn-primary,
.dark-mode .topView.btn-primary,
.dark-mode .topEllip.btn-primary {
    background-color: #262626 !important;
    color: #fff !important;
    border-color: transparent !important;
    box-shadow: none !important;
}

/* Sidebar toggle button */
#sidebar-toggle {
    display: none;
    position: fixed;
    top: 82px;
    left: var(--fs-left-navigation-width);
    transform: translateX(-50%);
    z-index: 100;
    background-color: #e8e8e8;
    background-image: radial-gradient(circle, #aaa 1px, transparent 1px);
    background-size: 4px 4px;
    border: 1px solid #ccc;
    border-radius: 3px;
    width: 18px;
    height: 18px;
    font-size: 11px;
    line-height: 18px;
    cursor: pointer;
    padding: 0;
    color: #767676;
    transition: left 0.2s;
}
#sidebar-toggle:hover { background-color: #d0d0d0; background-image: radial-gradient(circle, #767676 1px, transparent 1px); background-size: 4px 4px; color: #555; }
.dark-mode #sidebar-toggle { background-color: #3a3a3a; background-image: radial-gradient(circle, rgba(255,255,255,0.5) 1px, transparent 1px); background-size: 4px 4px; border-color: #555; color: #bdbdbd; width: 18px; height: 18px; }
.dark-mode #sidebar-toggle:hover { background-color: #444; background-image: radial-gradient(circle, rgba(255,255,255,0.5) 1px, transparent 1px); background-size: 4px 4px; color: #fff; }

@media (min-width: 992px) {
    #sidebar-toggle { display: block; }
}

/* Collapsed sidebar state */
#main-wrapper.sidebar-hidden .left-sidebar { display: none !important; }
#main-wrapper.sidebar-hidden .page-wrapper { margin-left: 0 !important; }
#main-wrapper.sidebar-hidden #sidebar-toggle { left: 10px; }

/*********************************************************
    CURATED GALLERY — hover matches other cards on the site
 *********************************************************/
.bucket-display .card:hover {
    background-color: #f2f2f2 !important;
    border-color: rgba(0,0,0,0.5) !important;
}
body.dark-mode .bucket-display .card:hover {
    background-color: #262626 !important;
    border-color: #777 !important;
}
/* Fill the whole box uniformly in dark mode — same wildcard-transparency
   approach used for link cards, so no child element shows its own patch
   of the old background color. */
body.dark-mode .bucket-display .card:hover * {
    background-color: transparent !important;
}
/* Exceptions: the open dropdown menu (Follow/Share/Copy) and its item
   hover must stay opaque, same as elsewhere on the site. */
body.dark-mode .bucket-display .card:hover .dropdown-menu {
    background-color: #111 !important;
}
body.dark-mode .bucket-display .card:hover .dropdown-item:hover,
body.dark-mode .bucket-display .card:hover .dropdown-item:hover * {
    background-color: #3a3a3a !important;
}

/* Curated gallery: hide the row-divider line (from .border-bottom on the
   grid wrapper) in dark mode — keep it in day mode. */
body.dark-mode .bucket-display.border-bottom {
    border-bottom-color: transparent !important;
}

/*********************************************************
    EMOJI BUCKET ICONS
 *********************************************************/
.emoji-icon {
    display: inline-block;
    font-size: 1.2em;
    line-height: 1;
    vertical-align: middle;
}

/* View menu: fixed-width icon slot so labels all line up regardless of
   whether the icon is an emoji, a font icon, or the custom box shape. */
.view-menu-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    margin-right: 6px;
}

/* View menu "Boxes" icon: colored hollow rectangle (no matching emoji exists) */
.view-menu-box-icon {
    display: inline-block;
    width: 14px;
    height: 11px;
    border: 2px solid #17a2b8;
    border-radius: 2px;
    vertical-align: middle;
}

/* Bookmark import modal: square radio buttons with a barely-visible black outline
   instead of Bootstrap's default filled circle */
#bookmark_import_form .form-check-input[type="radio"] {
    border-radius: 2px;
    border-color: rgba(0, 0, 0, 0.25);
}

/* Icon picker (bucket icon selector): the library's hover highlight sets
   background:#fff with no !important, so the site's blanket dark-mode rule
   (background:#343434 !important on every element) swallows it - the
   hovered icon just blends into the dark modal background. Give it a
   visible highlight in dark mode. */
body.dark-mode #IconPickerModal .ip-icons-content .ip-icons-area > i:hover {
    background-color: #17a2b8 !important;
    color: #fff !important;
}

/* Admin > Manage Default Bucket/Links: "view links" modal rows */
#view-default-links {
    display: flex;
    flex-direction: column;
    gap: 4px;
    width: 100%;
}

.default-link-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 4px;
    border-bottom: 1px solid #eaecef;
}

.default-link-row:last-child {
    border-bottom: none;
}

.default-link-favicon {
    width: 22px;
    height: 22px;
    object-fit: contain;
    border-radius: 4px;
    flex-shrink: 0;
}

.default-link-info {
    flex: 1 1 auto;
    min-width: 0;
}

.default-link-name {
    font-weight: 500;
    color: #1a1d23;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.default-link-favorite-star {
    color: #f5b301;
}

.default-link-url {
    font-size: 12px;
    color: #8a8f9a;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.default-link-description {
    font-size: 12px;
    color: #a0aec0;
    margin-top: 2px;
    overflow: hidden;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
}

.default-link-actions {
    flex-shrink: 0;
    display: flex;
}

.dark-mode .default-link-row {
    border-bottom-color: rgba(255, 255, 255, 0.12);
}

.dark-mode .default-link-name {
    color: #e8eaf0;
}

.dark-mode .default-link-url {
    color: #9aa0ab;
}

.dark-mode .default-link-description {
    color: #7a8290;
}

/* Start Grid dark mode hover - placed at the end of the file with extra
   specificity (matching the real .start-grid-link ancestor explicitly,
   not just relying on a shorter chain) to definitively beat any other
   dark-mode dropdown-item/card hover rule elsewhere in this file,
   regardless of source order. */
body.dark-mode .start-grid-link.start-grid-link:hover,
body.dark-mode .start-grid-link.start-grid-link:hover * {
    background-color: #454545 !important;
    color: #fff !important;
}

body.dark-mode .start-grid-link .start-grid-link-actions .dropdown-item:hover,
body.dark-mode .start-grid-link .start-grid-link-actions .dropdown-item:hover * {
    background-color: #17a2b8 !important;
    color: #fff !important;
}

/* Search results: reveal an edit pencil on hover instead of the old
   "Edit Links" checkbox mode, so editing a link found via search doesn't
   require a separate toggle to remember is on/off. */
.tt-suggestion .search-edit-link {
    display: inline-block;
    margin-left: 7ch;
    opacity: 0;
    transition: opacity 0.15s ease-in-out;
    cursor: pointer;
    color: #6c757d;
}
.tt-suggestion:hover .search-edit-link {
    opacity: 1;
}
.tt-suggestion .search-edit-link:hover {
    color: #fff;
}

/* Gear/Settings dropdown: fixed-width icon slot so item labels all line up,
   since the mixed icon fonts/emoji used in that menu have different glyph
   widths and a plain margin-right doesn't equalize them. */
#fs-site-options-dropdown ~ .dropdown-menu .dropdown-item > i.me-1,
#fs-site-options-dropdown ~ .dropdown-menu .dropdown-item > span.me-1 {
    display: inline-block;
    width: 20px;
    margin-right: 0 !important;
    text-align: center;
}

/* Child bucket badges (buckets nested inside a bucket): darken slightly on
   hover so it reads as clickable, matching the hover language used
   elsewhere instead of a plain opacity fade (which reads as "disabled"). */
#child_buckets .badge.bg-info {
    transition: background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
#child_buckets .badge.bg-info:hover {
    background-color: #1cb2c9 !important;
    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
}
