﻿/* GENERATED FILE - do not edit directly. Edit the partials in css/custom/ and run devops/build-custom-assets.ps1. Last built: 2026-08-16 04:33:16 UTC. */

.body-sign .card-sign .card-title-sign .title {
    background-color: var(--orange) !important;
    color: white !important;
}

.body-sign .card-sign .card-body {
    border-top-color: var(--orange) !important;
}

/* Select2 optgroup headings — mirror the .text-orange branding utility.
   The project's .v3 .text-orange rule is scoped to .v3, but Select2 portals
   its dropdown to <body> (outside .v3) so the rule never reaches the headings.
   Hardcode the orange here for the same reason — CSS variables declared on
   .v3 don't resolve from the body-level dropdown. */
.select2-results__group {
    color: #f95602 !important;
}

/* Toggle Switch (BS4 compatible) */
.toggle-switch input[type="checkbox"] {
    opacity: 0;
    width: 0;
    height: 0;
    position: absolute;
}
.toggle-switch label {
    display: inline-flex;
    align-items: center;
    cursor: pointer;
    margin-bottom: 0;
    gap: 10px;
}
.toggle-track {
    display: inline-block;
    width: 40px;
    height: 22px;
    background-color: #ccc;
    border-radius: 34px;
    position: relative;
    transition: background-color 0.2s;
    flex-shrink: 0;
}
.toggle-track::after {
    content: '';
    position: absolute;
    top: 3px;
    left: 3px;
    width: 16px;
    height: 16px;
    background: #fff;
    border-radius: 50%;
    transition: transform 0.2s;
}
.toggle-switch input[type="checkbox"]:checked + label .toggle-track {
    background-color: #0088cc;
}
.toggle-switch input[type="checkbox"]:checked + label .toggle-track::after {
    transform: translateX(18px);
}


/* Board Drive inline edit inputs */
.upload-field-edit input.form-control {
    background: rgba(255, 255, 255, 0.5);
    border: none;
    border-bottom: 1px solid #aaa;
    border-radius: 0;
    box-shadow: none;
    padding-left: 0;
    padding-right: 0;
}
.upload-field-edit input.form-control:focus {
    background: rgba(255, 255, 255, 0.7);
    border-bottom-color: #0088cc;
    box-shadow: none;
    outline: none;
}

#upload-name-input {
    font-family: var(--font-montserrat, 'Montserrat', sans-serif);
    font-size: 20.8px;
    font-weight: 700;
    color: rgb(36, 36, 36);
    height: auto;
}
#upload-description-input {
    font-size: 1rem;
    color: #6c757d;
    height: auto;
}

.table-hover.table-bordered tbody tr:hover td, .table-hover.table-bordered tbody tr:hover th {
  background-color: var(--light-orange);
  transition: 0.3s;
}
.log li {
    border-bottom: solid 1px #ecebeb;
    padding: 10px;
    content: "";
    clear: both;
    display: table;
    width: 100%;
}

.log .icon i {
    font-size: 20px;
    color: #b7b5b5;
}
.log li:hover {
    background-color: #ecebeb;
    transition: 0.3s;
}
.log li div {
    float: left;
}

.log .date {
    margin: 0 15px;
    color: #F97702;
}

.log .message {
    margin-left: 15px;
}

.opacity-25{opacity: 0.25;}
.opacity-50 {opacity: 0.5;}
.opacity-75 {opacity: 0.75;}


.ws-2 li{ width: 50%;}
.ws-3 li { width: 33.3%;}
.ws-4 li { width: 25%;}
.ws-5 li { width: 20%;}
.ws-6 li { width: 16.66%;}
.ws-7 li { width: 14%;}
.ws-8 li {width: 12.5%;}
.ws-9 li {width: 11%;}

.progress-label small {line-height: 14px;}
@media print{
    .pagebreak{
        clear:both;
        page-break-after:always;
    }
}
th.sortable {
    cursor: pointer;
}

ul.subTaskList .btn-group .btn-default.active.Completed {
    background-color: #47a447;
    border-color: #47a477 #47a447 #388038;
    color: #ffffff;
}

ul.subTaskList .btn-group btn-default.active.Pending {
    background-color: #FD5400;
    color: #fff;
    border: #FD5400;
}
html .wizard-progress .wizard-steps#launchTimeline li.completed a span {
    background-color: #47a447;
    border-color: #47a447;
}
/* Launch Timeline */
.launchTimeline h4 {
    display: block;
    color: #000;
    font-size: 24px;
    font-weight: 600;
    border-bottom: solid 1px #e2e2e2 !important;
    line-height: 45px;
    margin-top: 0px;
}

.launchTimeline .release-date {
    color: #999;
    font-size: 0.9em;
}

.launchTimeline .label {
    display: inline-block;
    min-width: 100px;
}


.launchTimeline .subTaskList li a {
    color: #777
}

.launchTimeline .subTaskList li a:hover {
    color: #0088cc !important;
}
.launchTimeline .text-answer {
    color: #bbbebf !important;
    font-size: 1.2em !important;
}

/* Add here all your CSS customizations */
.control-radio label {margin-right:15px !important;}
.page-header .help-icon i { 
	vertical-align: middle !important;
	margin-right:10px;
}
.hide{display:none;}
.video-thumbnail {
    position: relative;
    display: inline-block;
    cursor: pointer;
    border-bottom: solid #fff 2px;
}
.video-thumbnail:before {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    -webkit-transform: translate(-50%, -50%);
    content: "\f144";
    font-family: "Font Awesome 5 Free";
    color: #fff;
    opacity: .4;
    text-shadow: 0px 0px 30px rgba(0, 0, 0, 0.5);
}
.video-thumbnail:hover:before {
    color: #eee;
    opacity: .9
}
.video-thumbnail + .card-body {
    border-top: solid 2px #FD5400;
    border-radius: 0 0 5px 5px;
}
.col-md-12 .video-thumbnail:before {
    font-size: 105px;
}
.col-md-6 .video-thumbnail:before {
    font-size: 35px;
}
.col-md-4 .video-thumbnail:before {
    font-size: 50px;
}
.col-md-3 .video-thumbnail:before {
    font-size: 35px;
}
.media-gallery .mg-files .thumbnail {
    border-radius: 5px 5px 0 0 !important;
    margin-bottom: 0px !important;
}
.file-footer {
    border: solid 1px #e2e2e2;
    border-top: 0px;
}

.mg-files .file-icon {
    width: 100%px;
    height: 175px;
    text-align: center !important;
}
.mg-files .file-icon i {
    position: relative;
    top: 50%;
    height: 100px;
    margin-top: -50px;
}
.mg-files a label {
    color: #fff !important;
}
html.fixed .content-with-menu-has-toolbar .inner-body {
    border-top-width: 113px;
}
.mfp-document .mfp-content {
    width: 95%;
    height: 95%;
    max-width: none;
}
.mfp-document .mfp-close {
    color: #fff;
    font-size: 40px;
}
iframe.full-Window-Embed {
    position: absolute;
    background: #000;
    border: none;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 90vh;
}
iframe.action-plan-embed {
    height: calc(100vh - 110px) !important;
}
.btn-group .btn-default.active {
    background-color: #FD5400;
    color: #fff;
    border: #FD5400;
    box-shadow: inset 0 0 5px 5px;
}
.timeline {
    width: 100%;
}
.notifications > li .notification-icon .badge {
    background: #FD5400;
}

#programSwitcher #mieActiveProgramSearchUL li, #programSwitcher #miePotentialProgramSearchUL li {
    border-bottom: 1px dotted #dddada;
    height: 50px;
    line-height: 50px;
    padding: 0 10px;
    position: relative;
    font-size: 16px;
    font-size: 1rem;
}

#programSwitcher #mieActiveProgramSearchUL li a.heading, #programSwitcher #miePotentialProgramSearchUL li a.heading {
    font-weight: 600;
    color: #212529;
    cursor: default;
    text-decoration: none;
}
html body .nav-tabs li.active .nav-link{
    border-top-color: #0088cc !important;
    color: #0088cc !important;
}

.page-header .sidebar-right-toggle {
    width: 70px !important;
}

/* ------------------------------------------------------------------ */
/* Flush card panel - the CEO Plus card standard (docs/design/cards.md) */
/* ------------------------------------------------------------------ */
/* One class instead of "mb-0 rounded-0" on the card + "rounded-0" on the
   body (+ "mt-0" on followers): square corners, no bottom margin, and
   adjacent flush cards butt together into one connected panel. Works on an
   alert too (its header/body child rules simply don't match). */
html .v3 .card-flush {
    border-radius: 0 !important;
    margin-bottom: 0 !important;
}
html .v3 .card-flush > .card-header,
html .v3 .card-flush > .card-body {
    border-radius: 0 !important;
}
html .v3 .card-flush + .card-flush {
    margin-top: 0 !important;
}

/* ------------------------------------------------------------------ */
/* Brand progress bar - light-orange fill on a light-gray track        */
/* ------------------------------------------------------------------ */
html .v3 .progress-brand {
    background-color: #e9ecef !important;
}
html .v3 .progress-brand .progress-bar {
    background-color: var(--light-orange) !important;
}

/* ------------------------------------------------------------------ */
/* Region footprint map - usable OUTSIDE a .region-dashboard wrapper    */
/* ------------------------------------------------------------------ */
/* ProgramFootprintMap / ProgramContactMap render a `.region-map` div; the sizing lived under
   `.region-dashboard` (130-region-dashboard.css). Generalize it so the reusable map works anywhere
   (e.g. the Program Launch "Launch Tasks" page). When a `.region-dashboard` ancestor IS present its
   more-specific rules win with the same values - no conflict. */
html .v3 .region-map {
    width: 100%;
    height: 460px;
}
html .v3 .region-map img {
    max-width: none !important;   /* the theme caps img width and tears the map tiles apart */
}
html .v3 .region-map .region-map-info-logo {
    display: block;
    max-width: 150px !important;
    height: auto;
}
html .v3 .region-map .region-map-school {
    font-family: var(--font-montserrat);
    font-weight: 600;
    font-size: 13px;
    color: var(--off-black);
    white-space: nowrap;
}
/* Extranet header (App_Data/Razor/ExtraNet/Layout/Header.cshtml) mobile tweaks.
   Overrides the theme's .userbox so the user box sits compactly on the right on phones. Loaded after
   theme.css (custom partials always do), so plain .userbox wins inside the media query. */

@media only screen and (max-width: 767px) {
    .userbox {
        float: right;
        margin: 18px 0 0 12px;
        position: relative;
        width: 147px;
    }

    /* The theme HIDES the header dividers on mobile (theme.css ~3936: display:none). Show them again
       so they create the correct spacing between the Ask Craig button and the user box. Loaded after
       theme.css, so this wins. */
    .header .search,
    .header .separator {
        display: inline-block;
    }

    /* ...but hide the FIRST separator (the one before the Ask Craig button) - it just clutters the
       left edge on mobile. */
    .header .separator:first-child {
        display: none;
    }

    /* Space the Ask Craig button off the left edge on mobile. */
    .craig-launch-btn {
        margin-left: 20px;
    }
}
/* Application Styling */

.thin-bar {
    height: 5px !important;
    margin: 4px 0;
}

    .thin-bar span.progress-bar-tooltip::after {
        right: 6px !important;
        left: auto;
    }

blockquote.student {
    border-left: 5px solid #55b776;
}

blockquote.school-contact {
    border-left: 5px solid #868380;
}

input.ratingSlider {
    width: 90%;
    margin-right: 7px;
}

@media only screen and (max-width: 768px) {
    div.featured-box-secundary div.box-content {
        padding: 15px !important;
    }

    input.ratingSlider {
        width: 81%;
    }
}

.btn-primary:active,
.pagination > .active > a:active,
.btn-primary:focus,
.pagination > .active > a:focus {
    border-color: #0077b3 !important;
    background-color: #0077b3 !important;
}

/*Progress Bar Styling*/

.progressbar {
    margin: 0;
    padding: 0;
    counter-reset: step;
    min-height: 95px;
}

    .progressbar li {
        list-style-type: none;
        width: 16.66%;
        float: left;
        font-size: 12px;
        position: relative;
        text-align: center;
        text-transform: uppercase;
        color: #7d7d7d;
        padding: 0 5px;
    }

    .progressbar.ref-app li {
        width: 33% !important;
    }

@media (max-width: 768px) {
    .progressbar li {
        visibility: hidden;
        width: 0;
        padding: 0px !important;
    }

    .progressbar.ref-app li {
        visibility: visible;
        width: 33% !important;
    }

    .progressbar li.active, .progressbar li:first-child, .progressbar li:last-child {
        visibility: visible;
        width: 33%;
    }
}

.progressbar li:before {
    width: 30px;
    height: 30px;
    content: counter(step);
    counter-increment: step;
    line-height: 27px;
    border: 2px solid #7d7d7d;
    display: block;
    text-align: center;
    margin: 0 auto 10px auto;
    border-radius: 50%;
    background-color: white;
}

.progressbar li:after {
    width: 100%;
    height: 2px;
    content: '';
    position: absolute;
    background-color: #7d7d7d;
    top: 15px;
    left: -50%;
    z-index: -1;
}

.progressbar li:first-child:after {
    content: none;
}

.progressbar li.active, .progressbar li.completed, .progressbar li.completed a {
    color: green;
}

    .progressbar li.active:before, .progressbar li.completed:before {
        border-color: #55b776;
    }

    .progressbar li.active + li:after, .progressbar li.completed + li:after {
        background-color: #55b776;
    }

    .progressbar li.completed:before {
        background-color: #55b776;
        color: #fff;
    }


.progress-bar.reference {
    background-color: #ccc !important;
}
.progress-bar.schoolref {
    background-color: #868380 !important;
}
.progress-bar.student {
    background-color: #55b776 !important;
}
.progress-bars .progress {
    background-color: #FAFAFA !important;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.10) inset;
}
/* Full Screen Modal */
#programSwitcher{ padding: 0px !important}
.modal-dialog-full-width {
    width: 100% !important;
    height: 100% !important;
    margin: 0 !important;
    padding: 10px !important;
    max-width:none !important;

}

.modal-content-full-width  {
    height: auto !important;
    min-height: 100% !important;
    border-radius: 0 !important;
    background-color: #fff !important 
}

.modal-header-full-width  {
    border-bottom: 1px solid #9ea2a2 !important;
}

.modal-footer-full-width  {
    border-top: 1px solid #9ea2a2 !important;
}

/* printable application css */

body.print .print-container{
       position: relative;
       width: 760px;
       margin: 0 auto;
       padding: 0;
}
@media print {
    body.print .no-print{
        display:none;
    }
}
body.print {
    background-color: #fff;
}
.print-container [class*="col-md"] {
    float: left;
}
body.print .pagebreak {
	page-break-after: always;
	margin-top: 30px;
}

/* Launch Timeline */
.launchTimeline h4 {
	display: block;
	color: #000;
	font-size: 24px;
	font-weight: 600;
	border-bottom: solid 1px #e2e2e2 !important;
	line-height:45px;
	margin-top:0px;
}

.launchTimeline .release-date {
	color: #999;
	font-size: 0.9em;
}

.launchTimeline .label {
	display: inline-block;
	min-width: 100px;
}
.launchTimeline .subTaskList li {
    border-bottom: 1px solid #f7f7f7;
    min-height: 50px;
    line-height: 50px;
    padding: 0px;
    position: relative;
    font-size: 16px;
    font-size: 1rem;
}
.launchTimeline .subTaskList li a {color:#777}
.launchTimeline .subTaskList li a:hover {color:#0088cc !important;}
/* Split-button dropdown menus in the doc list inherit the 50px line-height and
   1rem size from `.subTaskList li` above, which stretches each item tall. Reset
   to normal menu metrics so Edit/Archive read like a standard dropdown. */
.launchTimeline .subTaskList .dropdown-menu .dropdown-item {
    line-height: 1.5;
    font-size: 0.875rem;
    padding: 0.35rem 1.25rem;
    min-height: 0;
    color: #333;
}
.badge-orange{background-color:#FD5400 !important; color:#fff;}


.campaignList li{
    border-bottom:solid .5px #e2e2e2;
    padding:30px 30px 20px 30px;
	transition: 0.4s;
}
.campaignList li:hover{
	background:#f6f6f6;
}
.campaignList .campaignDetails h5{
    font-size:20px;
	color:#0088cc !important;
    margin-top:0px
}
.campaignList .campaignDetails p {
    margin:0px
}
.campaignList .campaignMetrics .amount{
    font-size:20px;
    font-weight:600 !important;;
}
.fileupload .uneditable-input {
    height: 38px !important;
}
.large-search{padding:0 30px;}
.large-search input{height:55px;font-size:20px !important;}
.large-search button{padding:0 30px;}
.changelog .badge-primary {
    padding: 4px 8px;
}

.widget-summary.email-sent-widget .summary-icon {
	width: 50px;
	height: 50px;
	line-height: 50px;
	font-size: 27.2px;
	font-size: 1.7rem;
}
.widget-summary.email-sent-widget .summary {
	margin-top: 0px;
	min-height: 47px;
}

.widget-summary.email-sent-widget .title {
	font-size: 1rem;
}

.widget-summary.email-sent-widget .amount {
	font-size: 1.5rem;
}
/* Tables - Actions */
    .table .actions-hover {
        vertical-align: middle;
    }


        .table .actions-hover .dropdown i {
            display: inline-block;
            margin-right: 5px;
            color: #666;
        }

            .table .actions-hover .dropdown i:last-child {
                margin-right: 0;
            }

            .table .actions-hover .dropdown i:hover {
                color: #333;
            }

        .table .actions-hover .dropdown i {
            opacity: 0;
        }

    .table tr:hover .actions-hover .dropdown i {
        opacity: 1;
    }

    .table .actions-fade .dropdown i {
        -webkit-transition: all .2s linear;
        transition: all .2s linear;
    }
	
	
    .invoice .invoice-items #qnty {
        width: 8%;
    }

    .invoice .invoice-items #editIcons{
        width:10%;
    }
    .invoice .invoice-items #cell-price{
        width:15%;
    }

/* Support Center editor — fullscreen toggle */
.sc-doc-editor-card {
    transition: all 0.3s ease;
}

.sc-doc-editor-card.fullscreen {
    position: fixed;
    left: 0;
    top: 0;
    z-index: 10000;
    width: 100%;
    height: 100%;
    overflow: auto;
}

.sc-doc-editor-card .expandfullscreenicon,
.sc-doc-editor-card .closefullscreenicon {
    cursor: pointer;
}
.sc-doc-editor-card.fullscreen .tox-tinymce {
    height: calc(100dvh - 150px) !important;
    transition: all 0.3s ease;
}

/* Board Meeting section cards — fullscreen toggle (parallel to Support Center) */
.board-section-card {
    transition: all 0.3s ease;
}

.board-section-card.fullscreen {
    position: fixed;
    left: 0;
    top: 0;
    z-index: 10000;
    width: 100%;
    height: 100%;
    overflow: auto;
    margin-top: 0px;
}

.board-section-card .expandfullscreenicon,
.board-section-card .closefullscreenicon {
    cursor: pointer;
}

/* Fullscreen TinyMCE height is measured per-card by sizeBoardSectionEditor()
   in custom.js — it sums header + content-above-notes + padding + button-row
   so the editor fits exactly without relying on a fixed calc() offset that
   would drift the moment something above the notes changes height (e.g.
   Old Business prior-meeting block, Adjournment time row). */
.board-section-card.fullscreen .tox-tinymce {
    transition: all 0.3s ease;
}

.board-section-card .board-section-toggle {
    cursor: pointer;
}

/* Notes wrapper inside each parliamentary card — top border separates the
   notes area from the checkpoints / time / prior-pull blocks above. */
.board-meeting-notes {
    border-top: 1px solid #e2e2e2;
}

/* Inner notes container — fills its parent .row so the TinyMCE editor and
   display alert can expand to the full card width. */
.board-section-notes {
    width: 100% !important;
}

/* Soften list text across the whole parliamentary card (saved notes, prior
   meeting follow-ups, any other rich-text content) so bulleted/numbered items
   match the muted body copy color used elsewhere on the page. */
.board-section-card ul,
.board-section-card li {
    color: #777;
}

/* Orange outline button variant — Bootstrap's btn-outline-* doesn't ship one
   for our brand orange. Used by the Board Meeting "Add Notes" buttons. The
   `html .v3` selector matches the existing extranet theme scoping so this
   wins over any base button color rules. */
html .v3 .btn-outline-orange {
    border-color: var(--orange) !important;
    color: var(--orange) !important;
}

/* Board Drive document preview — iframe inside the shared full-screen modal
   fills the modal body. Height accounts for the modal header only (the footer
   was removed so the preview can use as much vertical space as possible);
   the X button in the header still provides a close affordance, and Escape
   dismisses the modal. */
.board-doc-preview-frame {
    width: 100%;
    height: calc(100dvh - 80px);
    border: 0;
    display: block;
}

/* Learn More question-mark icon on every card header — pointer cursor since
   it triggers the shared Bootstrap modal. */
.board-section-learnmore {
    cursor: pointer;
}

/* ============================================================================
   Support Center document edit — Videos section
   Vimeo video cards under the document edit page (sibling to Attachments).
   ============================================================================ */
.sc-doc-video-card {
    background: #fff;
    border: 1px solid #e3e6ea;
    border-radius: 6px;
    overflow: hidden;
    transition: border-color .12s ease, box-shadow .12s ease;
}
.sc-doc-video-card:hover {
    border-color: #cbd5e0;
    box-shadow: 0 2px 6px rgba(0,0,0,.06);
}
.sc-doc-video-thumb {
    display: block;
    position: relative;
    width: 100%;
    padding-top: 56.25%; /* 16:9 */
    background: #1a202c;
    overflow: hidden;
    text-decoration: none;
    border: 0;
    padding-left: 0;
    padding-right: 0;
    cursor: pointer;
}
.sc-doc-video-thumb:focus { outline: 2px solid #2c5282; outline-offset: 2px; }
.sc-doc-video-play-icon {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 56px;
    height: 56px;
    border-radius: 50%;
    background: rgba(0, 0, 0, 0.55);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    transition: background-color .12s ease, transform .12s ease;
    pointer-events: none;
}
.sc-doc-video-thumb:hover .sc-doc-video-play-icon {
    background: rgba(44, 82, 130, 0.85);
    transform: translate(-50%, -50%) scale(1.08);
}
.sc-doc-video-thumb img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.sc-doc-video-thumb-fallback {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #4b5563;
    font-size: 36px;
    background: linear-gradient(135deg, #1f2937 0%, #111827 100%);
}
.sc-doc-video-thumb-fallback i { color: #9ca3af; }
.sc-doc-video-duration {
    position: absolute;
    bottom: 6px;
    right: 6px;
    background: rgba(0,0,0,.75);
    color: #fff;
    font-size: 11px;
    font-weight: 600;
    padding: 2px 6px;
    border-radius: 3px;
    letter-spacing: .3px;
}
.sc-doc-video-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
}
.sc-doc-video-title {
    flex: 1;
    min-width: 0;
    font-size: 13px;
    font-weight: 600;
    color: #1a202c;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.sc-doc-video-actions {
    flex-shrink: 0;
    display: flex;
    align-items: center;
}

/* Bootstrap modal hosting the inline Vimeo player. Sized "medium" — wider than the default
   500px because that's too small for a 16:9 video, but not full-screen wide. */
.sc-video-modal-dialog { max-width: 720px; }
@media (max-width: 768px) {
    .sc-video-modal-dialog { max-width: 96%; margin: 1rem auto; }
}
.sc-video-modal-frame-wrap {
    position: relative;
    width: 100%;
    padding-top: 56.25%; /* 16:9 */
    background: #000;
    border-bottom-left-radius: 4px;
    border-bottom-right-radius: 4px;
    overflow: hidden;
}
.sc-video-modal-frame {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    display: block;
}

/* Ask Craig citation modal — full-screen frame for in-place document/attachment/video preview.
   Uses the existing .modal-dialog-full-width / .modal-content-full-width classes from the
   programSwitcher pattern; this just sizes the iframe to fill what's left after the header. */
.ask-craig-citation-modal-frame {
    width: 100%;
    height: calc(100vh - 100px);
    min-height: 480px;
    border: 0;
    display: block;
    background: #fff;
}
#askCraigCitationModal .modal-header { padding: 12px 18px; }
#askCraigCitationModal .modal-title { font-size: 16px; }

/* Mirror the Ask Craig dock's left "separation lane" onto the full-screen citation
   modal, so opening a source reads as part of the same Ask Craig surface rather than
   a generic full-width modal. Same treatment as .craig-dock
   (110-ask-craig-sidebar.css:68-69): a neutral left lane + inset hairline divider.
   border-box keeps the 14px lane inside the viewport width. */
#askCraigCitationModal .modal-content {
    box-sizing: border-box;
    border-left: var(--craig-dock-gap, 14px) solid #e7ebf0;
    box-shadow: inset 1px 0 0 #d3dae2;
}

/* Bare-bones styles applied INSIDE the fragment iframe (sc-fragment-body) so the embedded
   article / video reads cleanly without the ExtraNet shell wrapping it. */
.sc-fragment-body {
    margin: 0;
    padding: 0;
    background: #fff;
    color: #1a202c;
    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
.sc-fragment-body .sc-article { max-width: 100%; padding: 8px 12px; }
.sc-fragment-video-wrap {
    position: relative;
    width: 100%;
    padding-top: 56.25%; /* 16:9 */
    background: #000;
}
.sc-fragment-video-wrap iframe {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    display: block;
}

/* ============================================================================
   Ask Craig mockup chat page
   Renders only on the support-center "Ask Craig" preview route.
   ============================================================================ */
.ask-craig-sidebar-link .badge {
    font-size: 9px;
    vertical-align: middle;
}

.ask-craig-shell {
    display: flex;
    flex-direction: column;
    background: #fff;
    border: 1px solid #e3e6ea;
    border-radius: 8px;
    box-shadow: 0 1px 3px rgba(0,0,0,.04);
    overflow: hidden;
    height: calc(100vh - 260px);
    min-height: 520px;
}

.ask-craig-header {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 18px;
    background: linear-gradient(135deg, #f6f8fb 0%, #eef2f7 100%);
    border-bottom: 1px solid #e3e6ea;
}

.craig-avatar {
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: #2c5282;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
    flex-shrink: 0;
}

.craig-header-text { flex: 1; min-width: 0; }
.craig-name { font-size: 16px; font-weight: 600; color: #1a202c; }
.craig-badge {
    display: inline-block;
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    background: #fef3c7;
    color: #92400e;
    padding: 2px 6px;
    border-radius: 3px;
    vertical-align: middle;
    margin-left: 6px;
    letter-spacing: .5px;
}
.craig-tagline { font-size: 12px; color: #6b7280; margin-top: 1px; }

.ask-craig-messages {
    flex: 1;
    overflow-y: auto;
    padding: 20px 18px;
    background: #fafbfc;
}

.craig-onboard {
    background: #fff;
    border: 1px solid #e3e6ea;
    border-radius: 8px;
    padding: 16px 18px;
    margin-bottom: 24px;
    max-width: 600px;
}
.craig-onboard-title {
    font-weight: 600;
    font-size: 15px;
    color: #1a202c;
    margin-bottom: 6px;
}
.craig-onboard p { font-size: 13.5px; color: #4a5568; margin-bottom: 6px; }

.msg { display: flex; margin-bottom: 18px; }
.msg-user { justify-content: flex-end; }
.msg-craig { justify-content: flex-start; }
.msg-craig .msg-content { max-width: 78%; }
.msg-user .msg-bubble { max-width: 70%; margin-left: auto; }

.msg-craig .msg-avatar {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: #2c5282;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    margin-right: 10px;
    flex-shrink: 0;
}

.msg-bubble {
    background: #fff;
    border: 1px solid #e3e6ea;
    border-radius: 10px;
    padding: 10px 14px;
    font-size: 14px;
    line-height: 1.5;
    color: #1a202c;
    box-shadow: 0 1px 1px rgba(0,0,0,.02);
    word-wrap: break-word;
}
.msg-bubble p { margin: 0 0 8px 0; }
.msg-bubble p:last-child { margin-bottom: 0; }
.msg-bubble-error {
    background: #fef2f2;
    border-color: #fecaca;
    color: #991b1b;
}
.msg-user .msg-bubble {
    background: #2c5282;
    color: #fff;
    border-color: #2c5282;
}

.msg-meta {
    font-size: 11px;
    color: #9ca3af;
    margin-top: 4px;
    display: flex;
    align-items: center;
    gap: 8px;
}
.msg-user .msg-meta { justify-content: flex-end; }

.msg-rating { margin-left: auto; }
.msg-craig .msg-rating { margin-left: 0; }
.btn-rate {
    background: none;
    border: none;
    color: #cbd5e0;
    cursor: pointer;
    padding: 2px 6px;
    font-size: 12px;
}
.btn-rate:hover { color: #2c5282; }

.msg-citations {
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px dashed #e3e6ea;
}
.msg-citations-label {
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .5px;
    color: #94a3b8;
    margin-bottom: 6px;
}
.citation-group { margin-bottom: 6px; }
.citation-group:last-child { margin-bottom: 0; }
.citation-attachments {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 4px;
    margin-left: 18px;
    padding-left: 10px;
    border-left: 2px solid #e2e8f0;
}
.citation-chip {
    display: inline-flex;
    align-items: center;
    font-size: 11px;
    background: #f1f5f9;
    color: #475569;
    padding: 3px 8px;
    border-radius: 12px;
    border: 1px solid #e2e8f0;
    text-decoration: none;
    transition: background-color .12s ease, border-color .12s ease;
}
a.citation-chip:hover {
    background: #e2e8f0;
    border-color: #cbd5e0;
    color: #1f2937;
    text-decoration: none;
}
.citation-document { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
a.citation-document:hover { background: #dbeafe; border-color: #93c5fd; color: #1e3a8a; }
.citation-attachment { background: #fff7ed; color: #9a3412; border-color: #fdba74; font-weight: 500; }
a.citation-attachment:hover { background: #ffedd5; border-color: #fb923c; color: #7c2d12; }
.citation-attachment-ext {
    margin-left: 4px;
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .3px;
    color: #c2410c;
    opacity: .8;
}
.citation-video {
    background: #ecfeff;
    color: #155e75;
    border-color: #67e8f9;
    font-weight: 500;
}
a.citation-video:hover {
    background: #cffafe;
    border-color: #22d3ee;
    color: #0e4a5e;
}
.citation-video-duration {
    margin-left: 6px;
    font-size: 10px;
    font-weight: 600;
    color: #0891b2;
    opacity: .85;
}
.citation-seasonal {
    margin-left: 6px;
    font-size: 10px;
    font-weight: 600;
    color: #92400e;
    opacity: .9;
}
.citation-seasonal i {
    margin-right: 3px;
}

.craig-staff-contacts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 10px;
    margin-top: 12px;
}
.craig-staff-card {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 12px;
    background: #f8fafc;
    border: 1px solid #e2e8f0;
    border-radius: 10px;
}
.craig-staff-photo {
    width: 80px;
    height: 80px;
    border-radius: 50%;
    object-fit: cover;
    flex-shrink: 0;
    background: #e2e8f0;
}
.craig-staff-photo-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    color: #94a3b8;
    font-size: 32px;
}
.craig-staff-info { min-width: 0; flex: 1; }
.craig-staff-name-row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
}
.craig-staff-name {
    font-size: 14px;
    font-weight: 600;
    color: #1a202c;
}
.craig-staff-badge {
    display: inline-flex;
    align-items: center;
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .4px;
    padding: 2px 7px;
    border-radius: 10px;
    border: 1px solid transparent;
}
.craig-staff-badge-regional-support {
    background: #ecfdf5;
    color: #047857;
    border-color: #a7f3d0;
}
.craig-staff-badge-midland-institute {
    background: #eff6ff;
    color: #1d4ed8;
    border-color: #bfdbfe;
}
.craig-staff-badge-midland-staff {
    background: #f1f5f9;
    color: #475569;
    border-color: #cbd5e0;
}
.craig-staff-title {
    font-size: 12px;
    color: #4a5568;
    margin-top: 2px;
}
.craig-staff-actions {
    display: flex;
    flex-direction: column;
    gap: 3px;
    margin-top: 6px;
}
.craig-staff-action {
    font-size: 12px;
    color: #2c5282;
    text-decoration: none;
    word-break: break-all;
}
.craig-staff-action:hover {
    color: #1a365d;
    text-decoration: underline;
}

.ask-craig-input {
    display: flex;
    gap: 10px;
    align-items: flex-end;
    padding: 12px 14px;
    background: #fff;
    border-top: 1px solid #e3e6ea;
}
.ask-craig-input textarea {
    resize: none;
    font-size: 14px;
}
.ask-craig-input button {
    align-self: stretch;
    white-space: nowrap;
}

.ask-craig-footer-note {
    text-align: center;
    font-size: 11px;
    color: #9ca3af;
    padding: 6px 10px 10px;
    background: #fff;
}

.craig-typing {
    display: inline-flex;
    gap: 4px;
    padding: 6px 0;
}
.craig-typing span {
    width: 6px;
    height: 6px;
    background: #cbd5e0;
    border-radius: 50%;
    animation: craigBlink 1.2s infinite ease-in-out;
}
.craig-typing span:nth-child(2) { animation-delay: .2s; }
.craig-typing span:nth-child(3) { animation-delay: .4s; }
@keyframes craigBlink {
    0%, 80%, 100% { opacity: .3; }
    40% { opacity: 1; }
}

/* ============================================================================
   Support Center Article view
   Public article reader for documents Craig cites (and direct links).
   ============================================================================ */
.sc-article { width: 100%; }
.sc-article-title { font-size: 26px; font-weight: 600; color: #1a202c; }
.sc-article-category { font-size: 12px; color: #6b7280; }
.sc-article-summary { font-size: 14px; color: #475569; }
.sc-article-body { font-size: 15px; line-height: 1.65; color: #1a202c; }
.sc-article-body h2 { font-size: 20px; margin-top: 22px; margin-bottom: 8px; }
.sc-article-body h3 { font-size: 17px; margin-top: 18px; margin-bottom: 6px; }
.sc-article-body h4 { font-size: 15px; margin-top: 14px; margin-bottom: 4px; }
.sc-article-body p { margin-bottom: 10px; }
.sc-article-body ul, .sc-article-body ol { margin-bottom: 10px; }
.sc-article-body table { border-collapse: collapse; margin: 10px 0; }
.sc-article-body table td, .sc-article-body table th { border: 1px solid #e2e8f0; padding: 6px 10px; }
.sc-article-body table th { background: #f8fafc; }

/* Craig callouts inside a rendered doc body.
   Note      -> Bootstrap .alert-secondary (grey)
   Important -> .alert-light-orange (brand light-orange bg + off-orange border) */
.alert-light-orange {
    background-color: var(--light-orange);
    border-color: var(--off-orange);
    color: var(--off-black);
}
.sc-article-body .alert {
    font-size: 14px;
    padding: 10px 14px;
    margin: 14px 0;
    border-radius: 6px;
}
.sc-article-body .alert > *:last-child { margin-bottom: 0; }
.sc-article-body .alert > *:first-child { margin-top: 0; }

.sc-article-attachments { padding-top: 16px; border-top: 1px solid #e3e6ea; }
.sc-attachment-row { padding: 4px 0; }
.sc-attachment-link {
    display: inline-flex;
    align-items: center;
    background: #fff7ed;
    color: #9a3412;
    border: 1px solid #fdba74;
    border-radius: 6px;
    padding: 6px 12px;
    text-decoration: none;
    font-size: 14px;
    font-weight: 500;
    transition: background-color .12s ease, border-color .12s ease, color .12s ease;
}
.sc-attachment-link:hover {
    background: #ffedd5;
    border-color: #fb923c;
    color: #7c2d12;
    text-decoration: none;
}
.sc-attachment-link i { color: #c2410c; }
.sc-attachment-link:hover i { color: #9a3412; }
.sc-attachment-ext {
    margin-left: 6px;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .3px;
    color: #c2410c;
    opacity: .85;
}
.sc-attachment-missing {
    background: #f8fafc;
    color: #94a3b8;
    border-color: #e2e8f0;
    cursor: default;
}
.sc-attachment-missing i,
.sc-attachment-missing .sc-attachment-ext { color: #94a3b8; }
.sc-attachment-missing:hover {
    background: #f8fafc;
    color: #94a3b8;
    border-color: #e2e8f0;
    text-decoration: none;
}
.sc-attachment-desc { color: #6b7280; font-size: 13px; margin-left: 8px; }

/* ============================================================================
   Support Center preview pages — attachment + video
   Reached via /attachment/{id} and /video/{id} sub-routes off the article page.
   ============================================================================ */
.sc-preview-card { min-height: calc(100vh - 160px); }
.sc-preview-header {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    padding-bottom: 12px;
    border-bottom: 1px solid #e3e6ea;
}
.sc-preview-title {
    flex: 1;
    min-width: 0;
    font-size: 16px;
    font-weight: 600;
    color: #1a202c;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.sc-preview-frame-wrap {
    width: 100%;
    height: calc(100vh - 260px);
    min-height: 480px;
    background: #f8fafc;
    border-radius: 4px;
    overflow: hidden;
}
.sc-preview-frame {
    width: 100%;
    height: 100%;
    border: 0;
    display: block;
}
.sc-preview-image-wrap {
    background: #f8fafc;
    padding: 24px;
    border-radius: 4px;
}
.sc-preview-image-wrap img {
    max-height: calc(100vh - 280px);
    max-width: 100%;
    object-fit: contain;
}
.sc-preview-video-wrap {
    width: 100%;
}
.sc-preview-description {
    font-size: 14px;
    line-height: 1.5;
    white-space: pre-line;
}

/* ============================================================================
   Training Module learner page (mockup)
   Styles for the per-step learner experience: progress bar + doc sidebar +
   Craig chat thread + footer prev/next. Page-scoped under .tm-* to avoid
   colliding with other extranet surfaces. Reuses .msg / .msg-craig / .msg-bubble
   from Ask Craig (custom.css lines ~1009+).
   ============================================================================ */

.tm-shell,
.tm-shell .card-header,
.tm-shell .card-body,
.tm-shell .card-footer {
    border-radius: 0 !important;
}
.tm-shell {
    border-left: 0;
    border-right: 0;
}

.tm-step-header {
    background: linear-gradient(135deg, #f6f8fb 0%, #eef2f7 100%);
    padding: 18px 24px;
}
.tm-step-progress-label {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: #6b7280;
    margin-bottom: 4px;
}
.tm-step-title {
    font-size: 22px;
    font-weight: 600;
    color: #1a202c;
}

.tm-progress-dots {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    align-items: center;
    gap: 24px;
}
.tm-progress-dot {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: #fff;
    border: 2px solid #cbd5e0;
    position: relative;
    flex-shrink: 0;
}
.tm-progress-dot + .tm-progress-dot::before {
    content: "";
    position: absolute;
    right: calc(100% + 2px);
    top: 50%;
    width: 24px;
    height: 2px;
    background: #cbd5e0;
    transform: translateY(-50%);
}
.tm-progress-dot-completed {
    background: #2c5282;
    border-color: #2c5282;
}
.tm-progress-dot-completed + .tm-progress-dot-completed::before,
.tm-progress-dot-current + .tm-progress-dot-completed::before {
    background: #2c5282;
}
.tm-progress-dot-current {
    background: #fff;
    border-color: #2c5282;
    box-shadow: 0 0 0 3px rgba(44, 82, 130, .15);
}
.tm-progress-dot-completed + .tm-progress-dot-current::before {
    background: #2c5282;
}

.tm-body-card,
.tm-body-card .card-header,
.tm-body-card .card-body,
.tm-body-card .card-footer {
    border-radius: 0 !important;
}
.tm-body-card {
    border-left: 0;
    border-right: 0;
}
.tm-body-row {
    min-height: calc(100vh - 360px);
}

.tm-doc-sidebar {
    background: #f7f9fc;
    border-right: 1px solid #e3e6ea;
    padding: 0;
}
.tm-doc-sidebar-title {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: #6b7280;
    padding: 14px 18px 12px 18px;
    border-bottom: 1px solid #e3e6ea;
    margin-bottom: 0;
    min-height: 47px;
    display: flex;
    align-items: flex-end;
}
.tm-doc-list {
    list-style: none;
    padding: 6px 0 0 0;
    margin: 0;
}
.tm-doc-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 18px;
    font-size: 14px;
    border-left: 3px solid transparent;
    color: #4a5568;
}
.tm-doc-item-completed { color: #1a202c; }
.tm-doc-item-completed .tm-doc-icon { color: #2f855a; }
.tm-doc-item-current {
    background: #fff;
    border-left-color: #2c5282;
    font-weight: 600;
    color: #1a202c;
}
.tm-doc-item-current .tm-doc-icon { color: #2c5282; }
.tm-doc-item-upcoming { color: #9ca3af; }
.tm-doc-item-upcoming .tm-doc-icon { color: #cbd5e0; }
.tm-doc-icon {
    font-size: 15px;
    flex-shrink: 0;
    width: 18px;
    text-align: center;
}
.tm-doc-name {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.tm-doc-refresh {
    background: transparent;
    border: 0;
    color: #9ca3af;
    padding: 4px 6px;
    border-radius: 4px;
    font-size: 12px;
    cursor: pointer;
    transition: color .15s, background .15s;
}
.tm-doc-refresh:hover {
    color: #2c5282;
    background: #edf2f7;
}

.tm-chat-area {
    background: #fafbfc;
    padding: 0;
}
.tm-chat-messages {
    padding: 24px 28px;
}

/* ── Stage area: single focused content region (deck OR questions) ────── */
.tm-stage-area {
    background: #fafbfc;
    padding: 0;
    display: flex;
    flex-direction: column;
}
.tm-stage {
    display: flex;
    flex-direction: column;
    flex: 1;
    min-height: 0;
}

/* Column header — matches .tm-doc-sidebar-title styling so the left sidebar
   and the right stage have a consistent top bar. Spans edge to edge with a
   bottom border separator. */
.tm-col-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 24px 12px 24px;
    border-bottom: 1px solid #e3e6ea;
    min-height: 47px;
}
.tm-col-header-text {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 1.2px;
    text-transform: uppercase;
}
.tm-col-header-label { color: #6b7280; }
.tm-col-header-sep { margin: 0 6px; color: #cbd5e0; }
.tm-col-header-doc { color: #2c5282; }
.tm-col-header-actions { display: flex; gap: 6px; }

.tm-stage-actions {
    margin: 18px 24px 24px 24px;
    display: flex;
    align-items: center;
    gap: 12px;
}
.tm-stage-actions-hint { font-size: 12px; }

.tm-doc-narration-tag {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .8px;
    text-transform: uppercase;
    color: #6b7280;
    margin-bottom: 4px;
}
.tm-doc-narration-tag-current { color: #2c5282; }

.tm-question-label {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .8px;
    text-transform: uppercase;
    color: #b45309;
    margin-bottom: 4px;
}
.tm-question-bubble {
    background: #fffbeb;
    border-color: #fde68a;
}
.tm-question-bubble-locked {
    background: #f7f9fc;
    border-color: #e3e6ea;
    opacity: .65;
}
.tm-question-text {
    font-weight: 600;
    color: #1a202c;
}
.tm-question-form { margin-top: 8px; }
.tm-question-textarea {
    border-color: #e3e6ea;
    margin-bottom: 8px;
    resize: vertical;
}
.tm-question-actions {
    display: flex;
    justify-content: flex-end;
}

.tm-mc-choices { display: block; }
.tm-mc-choice {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 12px;
    margin: 0 0 6px 0;
    background: #fff;
    border: 1px solid #e3e6ea;
    border-radius: 6px;
    cursor: pointer;
    font-weight: 400;
    color: #1a202c;
    font-size: 14px;
    transition: border-color .15s, background .15s;
}
.tm-mc-choice:hover {
    border-color: #2c5282;
    background: #f0f5fb;
}
.tm-mc-choice input[type=radio] {
    margin: 0;
    flex-shrink: 0;
}

.tm-footer-card,
.tm-footer-card .card-header,
.tm-footer-card .card-body,
.tm-footer-card .card-footer {
    border-radius: 0 !important;
}
.tm-footer-card {
    border-left: 0;
    border-right: 0;
    border-top: 0;
}
.tm-step-footer {
    background: #fff;
    padding: 14px 24px;
}
.tm-step-footer-progress {
    font-size: 13px;
    color: #6b7280;
}

@media (max-width: 767px) {
    .tm-doc-sidebar {
        border-right: 0;
        border-bottom: 1px solid #e3e6ea;
    }
    .tm-step-header { padding: 14px 18px; }
    .tm-step-title { font-size: 18px; }
    .tm-chat-messages { padding: 16px; }
    .tm-step-footer { padding: 12px 16px; }
    .tm-step-footer-progress { display: none; }
}

/* ============================================================================
   Training Module — slide deck per document
   Replaces the chat-bubble narration with a navigable slide deck. Each doc in
   a step renders as its own deck; the learner clicks Next through 3-5 slides
   before the "Got it - continue" button unlocks. Completed decks collapse to
   a one-line summary. Supports fullscreen for in-person presenter use.
   ============================================================================ */

.tm-deck-msg-content { max-width: 100% !important; flex: 1; min-width: 0; }

.tm-deck {
    background: #fff;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}
.tm-deck-fullstage {
    flex: 1;
    min-height: 420px;
}
.tm-deck-fullstage .tm-deck-stage { aspect-ratio: auto; min-height: 0; flex: 1; }
.tm-deck-fullstage .tm-deck-slide-title { font-size: 36px; }
.tm-deck-fullstage .tm-deck-slide-subtitle { font-size: 18px; }
.tm-deck-fullstage .tm-deck-slide-body { font-size: 18px; }
.tm-deck-fullstage .tm-deck-slide-bullets { font-size: 19px; }
.tm-deck-fullstage .tm-deck-quote { font-size: 32px; }
.tm-deck-fullstage .tm-deck-callout { font-size: 19px; padding: 20px 22px; }
.tm-deck-fullstage .tm-deck-slide { padding: 40px 48px; }

.tm-deck-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 14px;
    background: linear-gradient(135deg, #f6f8fb 0%, #eef2f7 100%);
    border-bottom: 1px solid #e3e6ea;
}
.tm-deck-header-title {
    font-size: 13px;
    font-weight: 600;
    color: #1a202c;
    letter-spacing: .3px;
}
.tm-deck-header-actions { display: flex; gap: 6px; }
.tm-deck-icon-btn {
    background: transparent;
    border: 1px solid transparent;
    color: #6b7280;
    width: 30px;
    height: 30px;
    border-radius: 6px;
    cursor: pointer;
    transition: background .15s, color .15s, border-color .15s;
}
.tm-deck-icon-btn:hover {
    background: #fff;
    border-color: #e3e6ea;
    color: #2c5282;
}

.tm-deck-stage {
    background: #fff;
    position: relative;
    aspect-ratio: 16 / 9;
    min-height: 280px;
    overflow: hidden;
}
.tm-deck-slides {
    list-style: none;
    padding: 0;
    margin: 0;
    height: 100%;
    width: 100%;
    position: relative;
}
.tm-deck-slide {
    position: absolute;
    inset: 0;
    padding: 32px 40px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    opacity: 0;
    visibility: hidden;
    transition: opacity .25s ease;
}
.tm-deck-slide.is-active {
    opacity: 1;
    visibility: visible;
}

.tm-deck-slide-eyebrow {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: #2c5282;
    margin-bottom: 12px;
}
.tm-deck-slide-title {
    font-size: 28px;
    font-weight: 700;
    color: #1a202c;
    line-height: 1.2;
    margin-bottom: 10px;
}
.tm-deck-slide-subtitle {
    font-size: 16px;
    color: #4a5568;
    line-height: 1.5;
}
.tm-deck-slide-body { font-size: 16px; color: #1a202c; line-height: 1.6; }
.tm-deck-slide-body p { margin-bottom: 12px; }
.tm-deck-slide-body p:last-child { margin-bottom: 0; }
.tm-deck-slide-bullets {
    list-style: none;
    padding: 0;
    margin: 0;
    font-size: 17px;
    color: #1a202c;
    line-height: 1.6;
}
.tm-deck-slide-bullets li {
    padding: 8px 0 8px 28px;
    position: relative;
}
.tm-deck-slide-bullets li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 18px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #2c5282;
}

.tm-deck-quote {
    font-size: 26px;
    font-weight: 600;
    font-style: italic;
    color: #2c5282;
    line-height: 1.3;
    margin-bottom: 14px;
    padding-left: 14px;
    border-left: 4px solid #2c5282;
}
.tm-deck-callout {
    background: #fffbeb;
    border: 1px solid #fde68a;
    border-left: 4px solid #d97706;
    padding: 16px 18px;
    border-radius: 6px;
    font-size: 17px;
    color: #78350f;
    font-weight: 500;
    line-height: 1.5;
    margin: 0;
}

.tm-deck-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 24px;
    border-top: 1px solid #e3e6ea;
    background: #fafbfc;
}
.tm-deck-progress {
    font-size: 13px;
    color: #6b7280;
    font-weight: 500;
}
.tm-deck-progress-current { color: #1a202c; font-weight: 700; }
.tm-deck-progress-sep { margin: 0 4px; }

.tm-deck-done-row {
    margin-top: 12px;
    display: flex;
    align-items: center;
}
.tm-deck-done-hint { font-size: 12px; }

/* ── Question card (when stage swaps to questions mode) ───────────────── */
.tm-question-card {
    background: #fffbeb;
    border: 0;
    border-bottom: 1px solid #fde68a;
    border-radius: 0;
    padding: 20px 24px;
    margin: 0;
}
.tm-question-card .tm-question-label {
    color: #b45309;
    margin-bottom: 6px;
}
.tm-question-card .tm-question-text {
    font-size: 17px;
    font-weight: 600;
    color: #1a202c;
    margin-bottom: 14px;
}
.tm-question-card-locked {
    background: #f7f9fc;
    border-color: #e3e6ea;
    opacity: .7;
}
.tm-question-card-locked .tm-question-label { color: #6b7280; }

/* ── Completed (collapsed) deck row ────────────────────────────────────── */
.tm-deck-completed {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 14px;
    background: #f0fdf4;
    border: 1px solid #bbf7d0;
    border-radius: 8px;
}
.tm-deck-completed-check {
    color: #15803d;
    font-size: 20px;
    flex-shrink: 0;
}
.tm-deck-completed-text { flex: 1; min-width: 0; }
.tm-deck-completed-title {
    font-size: 14px;
    font-weight: 600;
    color: #14532d;
}
.tm-deck-completed-meta {
    font-size: 12px;
    color: #4a5568;
}
.tm-deck-completed-action {
    padding: 4px 8px !important;
    font-size: 12px !important;
}

/* ── Fullscreen presenter mode ─────────────────────────────────────────── */
.tm-deck.is-fullscreen,
.tm-deck:fullscreen {
    border-radius: 0;
    border: 0;
    height: 100vh;
    width: 100vw;
    display: flex;
    flex-direction: column;
}
.tm-deck:fullscreen .tm-deck-stage,
.tm-deck.is-fullscreen .tm-deck-stage {
    flex: 1;
    aspect-ratio: auto;
}
.tm-deck:fullscreen .tm-deck-slide,
.tm-deck.is-fullscreen .tm-deck-slide {
    padding: 8vh 12vw;
    justify-content: center;
}
.tm-deck:fullscreen .tm-deck-slide-title,
.tm-deck.is-fullscreen .tm-deck-slide-title { font-size: 64px; }
.tm-deck:fullscreen .tm-deck-slide-subtitle,
.tm-deck.is-fullscreen .tm-deck-slide-subtitle { font-size: 28px; }
.tm-deck:fullscreen .tm-deck-slide-body,
.tm-deck.is-fullscreen .tm-deck-slide-body { font-size: 28px; }
.tm-deck:fullscreen .tm-deck-slide-bullets,
.tm-deck.is-fullscreen .tm-deck-slide-bullets { font-size: 30px; }
.tm-deck:fullscreen .tm-deck-quote,
.tm-deck.is-fullscreen .tm-deck-quote { font-size: 48px; }
.tm-deck:fullscreen .tm-deck-callout,
.tm-deck.is-fullscreen .tm-deck-callout { font-size: 30px; padding: 28px 32px; }
.tm-deck:fullscreen .tm-deck-slide-eyebrow,
.tm-deck.is-fullscreen .tm-deck-slide-eyebrow { font-size: 14px; }

@media (max-width: 767px) {
    .tm-deck-slide { padding: 20px 22px; }
    .tm-deck-slide-title { font-size: 22px; }
    .tm-deck-slide-subtitle { font-size: 14px; }
    .tm-deck-slide-body { font-size: 14px; }
    .tm-deck-quote { font-size: 18px; }
    .tm-deck-callout { font-size: 14px; padding: 12px 14px; }
}/* ============================================================================
   Craig Voice - per-page narration modal
   Full-screen "page help" modal opened from the HeaderPageTitle help-icon.
   Shows a Craig hero (photo + audio player + decibel meter) and any page
   training videos. Markup: App_Data/Razor/ExtraNet/Layout/CraigPageHelpModal.cshtml.
   Behaviour: js/custom/090-craig-voice.js.
   ============================================================================ */

.craig-voice-hero {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding: 32px 16px 8px;
}

/* Extra breathing room at the bottom of the Craig modal. */
#craigPageHelpModal .modal-body {
    padding-bottom: 40px;
}

.craig-voice-photo {
    width: 160px;
    height: 160px;
    border-radius: 50%;
    object-fit: cover;
    border: 4px solid #FD5400;
    filter: grayscale(1);
    background: #e9ecef;
}

.craig-voice-name {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    margin-top: 14px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #FD5400;
    font-size: 14px;
}

.craig-voice-play {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: #FD5400;
    color: #fff;
    cursor: pointer;
    transition: background-color 0.15s ease;
}

.craig-voice-play:hover {
    background: #d94900;
}

.craig-voice-play:focus {
    outline: 2px solid #fdb184;
    outline-offset: 2px;
}

.craig-voice-close {
    position: absolute;
    top: 12px;
    right: 16px;
    z-index: 2;
    font-size: 1.75rem;
    line-height: 1;
    opacity: 0.6;
}

.craig-voice-close:hover {
    opacity: 1;
}

/* Two-line "teleprompter" window: words reveal as the audio reaches them, and the
   container scrolls so the line being narrated sits up top with the next line previewed
   below - finished lines scroll up and off the top. */
.craig-voice-script {
    position: relative;
    max-width: 640px;
    margin: 32px auto 0;
    font-size: 1.25rem;
    line-height: 2rem;
    height: 4rem;          /* exactly two lines */
    overflow: hidden;
    scroll-behavior: smooth;
    text-align: center;
    color: #2d3748;
}

/* Narrated-text animation: each word starts dim and brightens as the audio reaches it.
   Progress is driven by the <audio> timeupdate handler in 090-craig-voice.js. */
.craig-voice-script .craig-voice-word {
    opacity: 0.25;
    transition: opacity 0.25s ease;
}

.craig-voice-script .craig-voice-word.is-spoken {
    opacity: 1;
}

/* Decibel / equalizer meter - a row of bars that animate while audio plays. */
.craig-voice-meter {
    display: flex;
    align-items: flex-end;
    justify-content: center;
    gap: 4px;
    height: 28px;
    margin: 18px auto 0;
}

.craig-voice-meter span {
    display: block;
    width: 4px;
    height: 6px;
    border-radius: 2px;
    background: #FD5400;
    opacity: 0.55;
}

.craig-voice-meter.is-playing span {
    animation: craigVoiceBar 0.9s ease-in-out infinite;
    opacity: 1;
}

.craig-voice-meter.is-playing span:nth-child(2) { animation-delay: 0.12s; }
.craig-voice-meter.is-playing span:nth-child(3) { animation-delay: 0.24s; }
.craig-voice-meter.is-playing span:nth-child(4) { animation-delay: 0.36s; }
.craig-voice-meter.is-playing span:nth-child(5) { animation-delay: 0.48s; }
.craig-voice-meter.is-playing span:nth-child(6) { animation-delay: 0.60s; }
.craig-voice-meter.is-playing span:nth-child(7) { animation-delay: 0.18s; }

@keyframes craigVoiceBar {
    0%, 100% { height: 6px; }
    50%      { height: 26px; }
}

/* Divider + heading above the page-training section inside the same modal. */
.craig-voice-training {
    margin-top: 28px;
    padding-top: 20px;
    border-top: 1px solid #e2e8f0;
}

.craig-voice-training-title {
    font-size: 16px;
    font-weight: 700;
    color: #2d3748;
    margin-bottom: 16px;
}

/* MIE-staff steering toggle ("Edit page notes for Craig"). The box + meta use Bootstrap
   (alert / small / text-muted) so this is the only custom rule needed. */
.craig-voice-staff-toggle {
    font-weight: 700;
    color: #FD5400;
    cursor: pointer;
}

.craig-voice-staff-toggle:hover {
    color: #d94900;
    text-decoration: underline;
}
/* ============================================================================
   Document with Craig
   Two-column layout on the Support Center New/Edit Document screen: the Craig
   drafting chat (left, collapsible) beside the TinyMCE SOP editor (right).
   Collapsing the chat hands the editor the full width. The chat bubbles
   themselves reuse the global .msg / .msg-bubble / .craig-typing styles from the
   Ask Craig section (060-ask-craig.css).

   Spacing: the chat panel is wrapped in the same form-group row > pt-2 label >
   col-lg-12 structure the TinyMceEditor helper uses, so its top/left/right
   spacing matches the editor on the right automatically.
   Height: the panel tracks the editor's .tox-tinymce height in both normal
   (500px) and fullscreen (calc(100dvh - 150px)) modes - see the rules below,
   which reuse the same values from 030-support-center-editor.css.
   ============================================================================ */

.dwc-row {
    position: relative;
}

/* ---- Chat column ------------------------------------------------------- */
.dwc-panel {
    display: flex;
    flex-direction: column;
    height: 500px; /* matches the editor's .tox-tinymce height (050-tinymce.js) */
    background: #fff;
    border: 1px solid #e3e6ea;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .04);
}

/* Track the TinyMCE editor when the Support Center card goes fullscreen. The
   editor sets .tox-tinymce to calc(100dvh - 150px) in fullscreen
   (030-support-center-editor.css); the chat panel uses the same value so the
   two columns stay the same height. Driven entirely by the .fullscreen class
   the existing 060-support-center.js toggles - no extra JS needed. */
.sc-doc-editor-card.fullscreen .dwc-panel {
    height: calc(100dvh - 150px) !important;
    transition: all 0.3s ease;
}

.dwc-header {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: linear-gradient(135deg, #f6f8fb 0%, #eef2f7 100%);
    border-bottom: 1px solid #e3e6ea;
}

.dwc-avatar {
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: #2c5282;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
    flex-shrink: 0;
    border: 2px solid var(--orange, #f95602); /* CEO+ brand orange ring */
    overflow: hidden; /* clip Craig's photo to the circle */
}

.dwc-avatar img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.dwc-header-text {
    flex: 1;
    min-width: 0;
}

.dwc-name {
    font-size: 15px;
    font-weight: 600;
    color: #1a202c;
}

.dwc-tagline {
    font-size: 12px;
    color: #6b7280;
    margin-top: 1px;
}

.dwc-collapse-btn {
    flex-shrink: 0;
    background: none;
    border: 0;
    color: #6b7280;
    cursor: pointer;
    padding: 4px 8px;
    font-size: 14px;
    border-radius: 4px;
}

.dwc-collapse-btn:hover {
    background: rgba(44, 82, 130, .08);
    color: #2c5282;
}

.dwc-messages {
    flex: 1;
    overflow-y: auto;
    padding: 16px 14px;
    background: #fafbfc;
}

.dwc-onboard {
    background: #fff;
    border: 1px solid #e3e6ea;
    border-radius: 8px;
    padding: 14px 16px;
    margin-bottom: 18px;
}

.dwc-onboard-title {
    font-weight: 600;
    font-size: 14px;
    color: #1a202c;
    margin-bottom: 5px;
}

.dwc-onboard p {
    font-size: 13px;
    color: #4a5568;
    margin-bottom: 0;
}

.dwc-input {
    display: flex;
    gap: 10px;
    align-items: flex-end;
    padding: 10px 12px;
    background: #fff;
    border-top: 1px solid #e3e6ea;
}

.dwc-input textarea {
    resize: none;
    font-size: 14px;
}

.dwc-input button {
    align-self: stretch;
    white-space: nowrap;
}

/* ---- Source document import -------------------------------------------- */
/* Sits just above the input row: a subtle "Add a source document" toggle that
   swaps to a URL field + Import button, and a chip once a document is imported. */
.dwc-source {
    padding: 8px 12px 0;
    background: #fff;
}

.dwc-source-toggle {
    background: none;
    border: 0;
    padding: 2px 0;
    font-size: 12px;
    font-weight: 600;
    color: #2c5282;
    cursor: pointer;
}

.dwc-source-toggle:hover {
    color: #234069;
    text-decoration: underline;
}

.dwc-source-form {
    display: none; /* toggled to flex by the client */
    gap: 8px;
    align-items: center;
}

.dwc-source-form input {
    flex: 1;
    min-width: 0;
    font-size: 13px;
}

.dwc-source-form button {
    white-space: nowrap;
}

.dwc-source-chip {
    display: none; /* shown by the client once a document is imported */
    align-items: center;
    gap: 8px;
    max-width: 100%;
    padding: 5px 6px 5px 12px;
    background: var(--light-orange, #fef0e6);
    border: 1px solid var(--off-orange, #f7bd97);
    border-radius: 16px;
    font-size: 12px;
    font-weight: 600;
    color: #7a3a10;
}

.dwc-source-chip i {
    flex-shrink: 0;
    color: var(--orange, #f95602);
}

.dwc-source-chip-label {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.dwc-source-chip-remove {
    flex-shrink: 0;
    background: none;
    border: 0;
    color: #7a3a10;
    font-size: 16px;
    line-height: 1;
    cursor: pointer;
    padding: 0 4px;
    opacity: .7;
}

.dwc-source-chip-remove:hover {
    opacity: 1;
}

/* ---- Draft-ready bar (hidden until Craig produces a draft) -------------- */
.dwc-draft-bar {
    display: none;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 10px 12px;
    background: #f0fdf4;
    border-top: 1px solid #bbf7d0;
}

.dwc-draft-bar-visible {
    display: flex;
}

.dwc-draft-status {
    font-size: 12px;
    font-weight: 600;
    color: #166534;
}

/* ---- Collapsed state --------------------------------------------------- */
.dwc-reopen {
    display: none;
    position: absolute;
    top: 6px;
    left: 20px;
    z-index: 3;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    background: #2c5282;
    color: #fff;
    border: 0;
    border-radius: 16px;
    font-size: 12px;
    font-weight: 600;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .15);
    cursor: pointer;
}

.dwc-reopen:hover {
    background: #234069;
    color: #fff;
}

.dwc-row.dwc-collapsed .dwc-reopen {
    display: inline-flex;
}

.dwc-row.dwc-collapsed .dwc-col {
    display: none;
}

.dwc-row.dwc-collapsed .dwc-editor-col {
    flex: 0 0 100%;
    max-width: 100%;
    padding-top: 40px; /* clear the floating "Draft with Craig" rail */
}

/* ---- Small screens: stack, let the panel breathe ----------------------- */
@media (max-width: 991.98px) {
    .dwc-col {
        margin-bottom: 16px;
    }

    .dwc-panel {
        height: 420px;
    }
}
/* ============================================================================
   Ask Craig - docked sidebar (CEO+ global)
   Chrome + reflow + launcher for the right-hand Craig dock. The message/bubble/
   citation/staff styling is REUSED from 060-ask-craig.css (.ask-craig-messages,
   .msg, .msg-bubble, .citation-*, .craig-staff-*, .craig-typing) - this partial
   only adds the dock shell, the open-state app reflow, and the header launcher.

   Reflow mirrors the Porto theme's html.sidebar-right-opened math (theme.css
   139-170, 276-290) but on our own html.craig-open class so it never collides
   with the MIE-staff programSwitcher sidebar. Desktop-only; mobile is a
   full-width overlay drawer with no app reflow.
   ============================================================================ */
:root {
    --craig-dock-width: 380px;
    --craig-dock-gap: 14px;
    --craig-anim: .28s ease;
}

/* ---- Header launcher pill -------------------------------------------------- */
.craig-launch-btn {
    display: inline-flex;
    align-items: center;
    height: 32px;
    padding: 0 14px;
    border: 1px solid #0088cc;
    border-radius: 16px;
    background: #0088cc;
    color: #fff;
    font-size: 13px;
    font-weight: 600;
    line-height: 1;
    cursor: pointer;
    white-space: nowrap;
    transition: background-color .12s ease, border-color .12s ease, box-shadow .12s ease;
}
.craig-launch-btn:hover,
.craig-launch-btn:focus {
    background: #0077b3;
    border-color: #0077b3;
    color: #fff;
    outline: none;
    box-shadow: 0 1px 4px rgba(0,0,0,.18);
}
html.craig-open .craig-launch-btn {
    background: #fff;
    color: #0077b3;
}

/* ---- The dock -------------------------------------------------------------- */
.craig-dock {
    box-sizing: border-box;
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    width: var(--craig-dock-width);
    max-width: 100%;
    margin-right: calc(-1 * var(--craig-dock-width));
    z-index: 1030; /* above header (1020), below Bootstrap modals (1040+) */
    display: flex;
    flex-direction: column;
    background: #fff;
    /* Separation lane: a neutral gutter on the dock's LEFT (drawn as a thick
       border, kept inside --craig-dock-width via border-box) makes the dock read
       as its own subpanel beside the app, not an overlay floating on top. The
       inset hairline is a crisp divider between the lane and the panel. No outer
       blur shadow - that's what made it look like it sat over the page. */
    border-left: var(--craig-dock-gap) solid #e7ebf0;
    box-shadow: inset 1px 0 0 #d3dae2;
    transition: margin-right var(--craig-anim), width var(--craig-anim), padding var(--craig-anim);
}
html.craig-open .craig-dock {
    margin-right: 0;
}

/* Full-screen mode (desktop): the dock covers the viewport and the chat sits in a
   centered column at 2/3 of the page width, with the remaining third split as
   padding on each side (16.6667% per side). Desktop-only - on mobile the dock is
   already full-width. */
@media only screen and (min-width: 768px) {
    html.craig-open.craig-fullscreen .craig-dock {
        width: 100%;
        border-left: none;
        box-shadow: none;
        padding-left: 16.6667%;
        padding-right: 16.6667%;
    }
}

/* Suppress the slide/reflow transition on a fresh page load when restoring the
   open state from sessionStorage (added by 110-ask-craig-sidebar.js for one frame). */
html.craig-no-anim .craig-dock,
html.craig-no-anim .header,
html.craig-no-anim .page-header,
html.craig-no-anim .content-body,
html.craig-no-anim .sidebar-left {
    transition: none !important;
}

.craig-dock-header {
    position: relative;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 14px 10px;
    background: #fff; /* clean - no header bar / line / shadow, like the EL "New chat" header */
    flex-shrink: 0;
    transition: padding .4s ease, gap .4s ease;
}
.craig-dock-header .craig-name {
    font-size: 17px;
}
.craig-dock-header .craig-avatar {
    overflow: hidden;
    border: 2px solid var(--orange); /* CEO brand orange ring around Craig's photo */
    background: #fff;
    transition: width .4s ease, height .4s ease, border-width .4s ease;
}
.craig-dock-header .craig-avatar img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* Welcome line - shown only in the big centered first-load state. */
.craig-welcome {
    display: none;
    margin: 0;
    font-size: 16px;
    line-height: 1.6;
    color: #344054;
    max-width: 300px;
}

/* ---- Welcome (first-load) state: large centered Craig, intro below ----------
   Mirrors the student-application stepper's .craig.hero treatment. On the first
   send, 110-ask-craig-sidebar.js drops .is-welcome and the avatar smoothly
   shrinks into the compact header row (transitions on width/height/padding). */
.craig-dock.is-welcome .craig-dock-header {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 16px;
    padding: 44px 20px 20px;
}
.craig-dock.is-welcome .craig-dock-header .craig-avatar {
    width: 120px;
    height: 120px;
    border-width: 3px;
}
.craig-dock.is-welcome .craig-header-text {
    flex: 0 0 auto;
}
.craig-dock.is-welcome .craig-name {
    display: none;
}
.craig-dock.is-welcome .craig-welcome {
    display: block;
}

/* Narrated welcome: words dim then brighten as Craig speaks (synced to the audio
   timeupdate in 110-ask-craig-sidebar.js). Same mechanic as the page-help modal's
   .craig-voice-script reveal. Only takes effect once the controller wraps the
   words in .craig-voice-word spans (on play); before that the text is plain
   full-opacity, so a blocked autoplay never leaves it stuck dim. */
.craig-welcome .craig-voice-word {
    opacity: .28;
    transition: opacity .25s ease;
}
.craig-welcome .craig-voice-word.is-spoken {
    opacity: 1;
}

/* Equalizer meter under the welcome - mirrors .craig-voice-meter (090) and reuses
   its craigVoiceBar keyframes. Shown only in the welcome state. */
.craig-dock-meter {
    display: none;
    align-items: flex-end;
    justify-content: center;
    gap: 4px;
    height: 22px;
    margin: 14px auto 0;
}
.craig-dock.is-welcome .craig-dock-meter {
    display: flex;
}
.craig-dock-meter span {
    display: block;
    width: 4px;
    height: 6px;
    border-radius: 2px;
    background: var(--orange);
    opacity: .5;
}
.craig-dock-meter.is-playing span {
    animation: craigVoiceBar .9s ease-in-out infinite;
    opacity: 1;
}
.craig-dock-meter.is-playing span:nth-child(2) { animation-delay: .12s; }
.craig-dock-meter.is-playing span:nth-child(3) { animation-delay: .24s; }
.craig-dock-meter.is-playing span:nth-child(4) { animation-delay: .36s; }
.craig-dock-meter.is-playing span:nth-child(5) { animation-delay: .48s; }
.craig-dock-meter.is-playing span:nth-child(6) { animation-delay: .60s; }
.craig-dock-meter.is-playing span:nth-child(7) { animation-delay: .18s; }


.craig-dock-close {
    position: absolute;
    top: 10px;
    right: 12px;
    z-index: 2;
    background: none;
    border: none;
    color: #9aa3ad;
    font-size: 22px;
    line-height: 1;
    padding: 2px 6px;
    cursor: pointer;
    flex-shrink: 0;
}
.craig-dock-close:hover {
    color: #4a5568;
}
.craig-dock-expand {
    position: absolute;
    top: 13px;
    right: 42px;
    z-index: 2;
    background: none;
    border: none;
    color: #9aa3ad;
    font-size: 15px;
    line-height: 1;
    padding: 4px 6px;
    cursor: pointer;
}
.craig-dock-expand:hover {
    color: #4a5568;
}

/* The dock reuses .ask-craig-messages / .ask-craig-footer-note from 060. The
   input is overridden below into a bigger, cleaner composer. */

/* Input: a roomier composer with no Send button (Enter sends). Overrides 060's
   compact flex-with-button layout for the dock only. */
.craig-dock .ask-craig-input {
    display: block;
    padding: 8px 14px 14px;
    background: #fff;
    border-top: none;
}
.craig-dock .ask-craig-input textarea {
    width: 100%;
    min-height: 76px;
    padding: 12px 14px;
    font-size: 14.5px;
    line-height: 1.45;
    border: 1px solid #d8dee5;
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(15, 23, 42, .04);
}
.craig-dock .ask-craig-input textarea:focus {
    border-color: var(--orange);
    box-shadow: 0 0 0 3px rgba(249, 86, 2, .12);
    outline: none;
}
.craig-dock .ask-craig-footer-note {
    border-top: none;
}

/* ---- Chat text: ElevenLabs-style, tuned for the narrow rail -----------------
   Craig's answers flow as plain text (no bubble, no per-message avatar), smaller
   and full-width so they fit the rail; the user's question stays a compact
   right-aligned pill. Overrides the bubbly 060 defaults for the dock only. */
.craig-dock .ask-craig-messages {
    padding: 16px 14px;
}
.craig-dock .msg {
    margin-bottom: 14px;
}
.craig-dock .msg-craig .msg-avatar {
    display: none;
}
.craig-dock .msg-craig .msg-content {
    max-width: 100%;
}
.craig-dock .msg-craig .msg-bubble {
    background: transparent;
    border: none;
    box-shadow: none;
    padding: 0;
    font-size: 13px;
    line-height: 1.5;
    color: #2d3748;
}
.craig-dock .msg-craig .msg-bubble p {
    margin: 0 0 8px;
}
.craig-dock .msg-craig .msg-bubble p:last-child {
    margin-bottom: 0;
}
.craig-dock .msg-bubble ul {
    margin: 6px 0;
    padding-left: 18px;
}
.craig-dock .msg-bubble li {
    margin-bottom: 4px;
    line-height: 1.45;
}
.craig-dock .msg-bubble strong {
    font-weight: 600;
    color: #1a202c;
}
.craig-dock .msg-user .msg-bubble {
    max-width: 85%;
    font-size: 13px;
    padding: 7px 11px;
    border-radius: 13px;
}
.craig-dock .msg-meta {
    font-size: 10.5px;
}

/* ---- Open-state app reflow (desktop only) ---------------------------------- */
@media only screen and (min-width: 768px) {
    .header,
    .page-header,
    .content-body {
        transition: right var(--craig-anim), margin-right var(--craig-anim);
    }

    /* Shrink the fixed top bars so they stop at the dock's left edge. */
    html.craig-open.fixed .header {
        right: var(--craig-dock-width);
    }
    html.craig-open.fixed .page-header {
        right: var(--craig-dock-width);
    }

    /* Pull the main content in so nothing sits under the dock - flush to the dock
       seam (the dock's left border + shadow are the divider). We do NOT touch
       .sidebar-left: the left nav stays put; the whole app just narrows. Framing
       the content as a floating rounded card is intentionally avoided - the fixed
       header/breadcrumb/nav can't follow it, so a flush reflow reads correctly. */
    html.craig-open.fixed .content-body {
        margin-right: var(--craig-dock-width);
    }
}

/* ---- Mobile: full-width overlay drawer, no reflow -------------------------- */
@media only screen and (max-width: 767px) {
    .craig-dock {
        width: 100%;
        margin-right: -100%;
        border-left: none;
    }
    .craig-dock-expand {
        display: none; /* dock is already full-width on mobile */
    }
}
/* ============================================================================
   Program Health Dashboard
   Per-program health grid under /extranet ... ProgramHealth.Dashboard.
   Red/yellow/green metric cells, composite score badge, and the per-program
   collapse drill-down. All scoped under .v3 so it out-specifies the theme.
   ============================================================================ */

.v3 .program-health .ph-toolbar-label {
    font-size: 12px;
    color: var(--mid-grey);
}

.v3 .program-health .ph-legend {
    font-size: 12px;
    color: var(--off-black);
}

.v3 .program-health .ph-legend-note {
    color: var(--mid-grey);
    font-style: italic;
}

/* Status dot - used in the legend, detail titles, and detail rows. */
.v3 .program-health .ph-dot {
    display: inline-block;
    width: 11px;
    height: 11px;
    border-radius: 50%;
    vertical-align: middle;
    margin-right: 4px;
    background: #bbbbbb;
}

.v3 .program-health .ph-dot.ph-green {
    background: #47a447;
}

.v3 .program-health .ph-dot.ph-yellow {
    background: #f0ad4e;
}

.v3 .program-health .ph-dot.ph-red {
    background: #d9534f;
}

.v3 .program-health .ph-dot.ph-unknown {
    background: #bbbbbb;
}

/* Metric cells - tinted background so the row reads as a heat strip. !important
   keeps the tint visible over the theme's striping/hover. */
.v3 .program-health-table td.ph-cell {
    font-size: 12px;
    vertical-align: middle;
}

.v3 .program-health-table td.ph-cell.ph-green {
    background: #e6f4e6 !important;
}

.v3 .program-health-table td.ph-cell.ph-yellow {
    background: #fcf3e3 !important;
}

.v3 .program-health-table td.ph-cell.ph-red {
    background: #fbe9e9 !important;
}

.v3 .program-health-table td.ph-cell.ph-unknown {
    background: #f3f3f3 !important;
    color: #999999;
}

/* Composite score badge. */
.v3 .program-health .ph-badge {
    display: inline-block;
    min-width: 36px;
    padding: 3px 8px;
    border-radius: 4px;
    font-weight: 700;
    color: #ffffff;
    background: #bbbbbb;
}

.v3 .program-health .ph-badge.ph-green {
    background: #47a447;
}

.v3 .program-health .ph-badge.ph-yellow {
    background: #f0ad4e;
    color: #242424;
}

.v3 .program-health .ph-badge.ph-red {
    background: #d9534f;
}

.v3 .program-health .ph-badge.ph-unknown {
    background: #bbbbbb;
}

/* Deferred cells/badge show a muted spinner until the AJAX fill replaces them. */
.v3 .program-health .ph-loading {
    background: transparent !important;
    color: #bbbbbb;
}

/* Drill-down toggle + detail panel. */
.v3 .program-health .ph-detail-toggle {
    color: var(--mid-grey);
}

.v3 .program-health .ph-detail-row > td {
    border-top: 0;
}

.v3 .program-health .ph-detail {
    background: #fafafa;
}

.v3 .program-health .ph-detail-metric {
    display: inline-block;
    vertical-align: top;
    width: 32%;
    min-width: 240px;
    margin: 0 1% 12px 0;
}

.v3 .program-health .ph-detail-title {
    font-family: var(--font-montserrat);
    font-size: 13px;
    font-weight: 700;
    margin-bottom: 6px;
}

.v3 .program-health .ph-detail-summary {
    display: block;
    font-family: var(--font-roboto);
    font-weight: 400;
    font-size: 12px;
    color: var(--mid-grey);
}

.v3 .program-health .ph-detail-table td {
    font-size: 12px;
    padding: 3px 6px;
}
/* ============================================================================
   Region Dashboard
   The "My Region" page (ExtraNet ... RegionalSupportDashboard.RegionDashboard):
   a section card per program in the region with facilitator/board-chair contacts,
   headline counters, recent Facebook news, and a schools list. Scoped under .v3
   so it out-specifies the theme.
   ============================================================================ */

/* Recent-news thumbnail - square crop above each article so the three columns line up
   regardless of the source image aspect ratio. */
.v3 .region-dashboard .region-news-thumb {
    width: 100%;
    aspect-ratio: 1 / 1;
    object-fit: cover;
    border-radius: 0.25rem;
    margin-bottom: 0.5rem;
}

/* Region map - fills the lower part of the region card. Each polygon is one CEO program;
   its vertices are the program's school addresses, geocoded client-side. */
.v3 .region-dashboard .region-map {
    width: 100%;
    height: 460px;
}

/* Google map tiles - the theme caps image width, which tears the tiles apart. */
.v3 .region-dashboard .region-map img {
    max-width: none !important;
}

/* Program popup - just the CEO logo, in the InfoWindow header row beside the close (X).
   Extra .region-map in the selector out-specifies the tile rule's max-width:none !important above. */
.v3 .region-dashboard .region-map .region-map-info-logo {
    display: block;
    max-width: 150px !important;
    height: auto;
}

/* Divider between the left column (contacts + news) and the right column (counters + schools) on the
   program cards (md+ only, where they sit side by side; the right column adds left padding via pl-md-4). */
@media (min-width: 768px) {
    .v3 .region-dashboard .region-program-side {
        border-left: 1px solid #dee2e6;
    }
}

/* Facilitator / board-chair photo - a slightly thicker orange ring than Bootstrap's 1px .border. */
.v3 .region-dashboard .region-contact-photo {
    border-width: 3px !important;
}

/* School popup - the school name shown when hovering a specific school marker. */
.v3 .region-dashboard .region-map-school {
    font-family: var(--font-montserrat);
    font-weight: 600;
    font-size: 13px;
    color: var(--off-black);
    white-space: nowrap;
}

/* MIE staff contact dashboard - keep the Start/End date pickers + Apply on ONE row on mobile.
   The two date fields share the remaining width (flex), the calendar-icon groups stay inline, and
   the labels/inputs tighten so the whole filter fits a phone width without wrapping. */
@media (max-width: 575.98px) {
    .mie-date-filter {
        flex-wrap: nowrap !important;
        align-items: center;
    }

    .mie-date-filter > label {
        flex: 0 0 auto;
        margin-right: .25rem !important;
        font-size: .8rem;
    }

    .mie-date-filter .mie-date-field {
        flex: 1 1 0;
        min-width: 0;
        margin-right: .35rem !important;
    }

    .mie-date-filter .mie-date-field .input-group {
        flex-wrap: nowrap;
        width: 100%;
    }

    .mie-date-filter .mie-date-field .input-group .form-control {
        min-width: 0;            /* allow the date input to shrink below its content width */
        padding-left: .35rem;
        padding-right: .25rem;
    }

    .mie-date-filter .mie-date-field .input-group-text {
        padding: .25rem .45rem;  /* tighten the calendar-icon prepend */
    }

    .mie-date-filter .btn {
        flex: 0 0 auto;
    }
}

/* Apply button on the MIE date filter - give it top/bottom padding so its height matches the
   date input-groups (which are taller than a default btn-sm because of the calendar-icon prepend).
   Scoped to the filter so it does not change other small buttons. */
.v3 .mie-date-filter .btn {
    padding: 9px 8px;
}
/* Program Contact Log - the Craig-led Log Contact modal + the recent-contacts strip on the region
   dashboard. Brand orange is hardcoded (#f95602) where it decorates Select2/modal chrome that can
   render outside the body.v3 scope (see docs/design/select-type-ahead.md + modals.md). */

/* bootstrap-datepicker popup must sit above the Bootstrap modal it is opened inside (the Date field in
   the Log Contact modal uses data-plugin-datepicker); the modal is z-index 1050+. */
.datepicker {
    z-index: 1600 !important;
}

/* Phase 1 - the Craig surface. */
.contact-log-craig-avatar {
    width: 96px;
    height: 96px;
    object-fit: cover;
    border: 3px solid #f95602;
}

.contact-log-craig-intro {
    max-width: 520px;
    margin-left: auto;
    margin-right: auto;
    color: #4d4d4d;
}

/* The two phases of the modal animate in with a simple fade so the reveal is not abrupt. */
.contact-log-phase {
    animation: contactLogFadeIn 0.25s ease;
}

@keyframes contactLogFadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

/* The recent-contacts strip in each program card's right column. */
.contact-log-recent {
    border-top: 1px solid #e2e2e2;
}

.contact-log-recent .js-contact-log-view-note,
.contact-log-recent .js-contact-log-view-all {
    color: #f95602;
}

/* History list inside the "view all" modal. */
.contact-log-history-item {
    padding: 16px 0;
    border-bottom: 1px solid #e2e2e2;
}

.contact-log-history-item:last-child {
    border-bottom: none;
}

/* The note leads each record, large + quoted, so it reads as what the person said about the contact. */
.contact-log-history-note {
    font-size: 1.25rem;
    line-height: 1.4;
    color: #242424;
    margin-bottom: 12px;
}

/* The date / type / topics / contacted metadata sits below the note as one inline, labeled list. */
.contact-log-history-meta {
    display: flex;
    flex-wrap: wrap;
    margin-bottom: 12px;
    color: #242424;
}

.contact-log-history-meta > span:not(:last-child)::after {
    content: "\00b7";
    color: #b3b3b3;
    margin: 0 8px;
}

.contact-log-history-meta .meta-label {
    color: #f95602;
    font-weight: 600;
}

/* The "logged by" contact card in the history modal. */
.contact-log-logger-photo {
    width: 40px;
    height: 40px;
    object-fit: cover;
}

/* Select2 highlighted option inside the Log Contact modal - hardcode the brand orange because the
   dropdown can render outside the .v3 scope where var(--orange) does not resolve. */
#logContactModal .select2-results__option--highlighted[aria-selected] {
    background-color: #f95602;
}

#logContactModal .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice {
    background-color: #fff1e8;
    border-color: #f95602;
    color: #242424;
}

/* Program Support Team staff cards (all-regions contact dashboard): per-status contact-count circles
   under a staffer's name - green = positive, yellow = some concerns, red = needs attention. */
.staff-health-circle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    font-size: 0.7rem;
    font-weight: 600;
    line-height: 1;
    color: #242424;
}

.staff-health-circle--green {
    background-color: rgba(40, 167, 69, 0.25);
}

.staff-health-circle--yellow {
    background-color: rgba(255, 193, 7, 0.3);
}

.staff-health-circle--red {
    background-color: rgba(220, 53, 69, 0.25);
}

/* Total-contact-count badge overlaid on the bottom-right of a staffer's photo (orange circle). */
.staff-team-photo-wrap {
    position: relative;
    display: inline-block;
    line-height: 0;
    flex-shrink: 0;
}

.staff-contact-badge {
    position: absolute;
    bottom: -2px;
    right: -2px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 22px;
    height: 22px;
    padding: 0 4px;
    border-radius: 11px;
    background-color: var(--orange);
    color: var(--white);
    font-size: 0.68rem;
    font-weight: 700;
    line-height: 1;
    text-align: center;
    border: 2px solid var(--white);
    box-sizing: border-box;
}

/* Regional Support card action buttons (Manage All Regions Contacts dashboard). The region title is
   plain text; two buttons below the card carry the navigation, each with an explicit destination:
   "Public Region Page" (.btn-outline-orange, white face + orange border; border/text defined in
   040-board-meeting.css) -> the parent My Region public dashboard; "Region Contacts" (.btn-light-orange,
   pale solid fill; defined in v3-branding.css) -> that region's contacts on this page. Inside body.v3
   so brand tokens resolve. Here we only force a white face on .btn-outline-orange and size the buttons
   to fit the narrow card. */
html .v3 .btn-outline-orange {
    background-color: var(--white) !important;
}

html .v3 .btn-outline-orange:hover,
html .v3 .btn-outline-orange:focus {
    background-color: var(--orange) !important;
    color: var(--white) !important;
}

.staff-region-btns {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
}

.staff-region-btns .btn {
    padding: 2px 8px;
    font-size: 0.7rem;
    line-height: 1.3;
    white-space: normal;
}

/* "Who contacted this program/region" avatar strip (Manage Region/Program Contacts): fixed-width cells
   so the photos line up in a wrapping grid with the name/role centered under each. Reuses
   .staff-team-photo-wrap + .staff-contact-badge (the orange count) from the all-regions team cards. */
.contacting-staff-item {
    width: 88px;
    margin-right: 0.75rem;
    margin-bottom: 0.75rem;
}

.contacting-staff-item .small {
    line-height: 1.2;
    word-break: break-word;
}

/* Region contact-health tally (Manage Region Contacts) - three status counts as badges. Bump the
   base Bootstrap badge a touch so the numbers read at a glance, and space them out. */
.region-health-badges .badge {
    font-size: 0.8rem;
    font-weight: 600;
    padding: 0.4em 0.7em;
    margin: 0 0.5rem 0 0;
}

/* Highlighted spans inside a Craig contact summary (marked by the prompt, wrapped by
   230-contact-summary.js): light red for needs-attention text, light yellow for some-concerns text -
   one color per summary, matching the health-badge severity. These are semantic status colors, so the
   literal hexes are the intended exception to the brand-token rule. box-decoration-break keeps the
   padding/rounding intact when a highlight wraps across lines. */
.contact-summary-flag {
    border-radius: 3px;
    padding: 0.05em 0.25em;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
}

.contact-summary-flag--red {
    background-color: #fbdedb;
}

.contact-summary-flag--yellow {
    background-color: #fdf0cf;
}

/* Optional log-hours section on the standalone Log Contact page (LogContact.cshtml, Regional Support
   contractors only). Hidden by default; 170-log-contact-page.js reveals it only when Craig detects
   time in the note (hours > 0). Light-orange left accent so it reads as a Craig-suggested add-on to
   the contact form, not a separate form. Renders inside body.v3, so brand tokens resolve. */
.log-hours-section {
    background-color: var(--light-orange);
    border-left: 3px solid var(--orange);
    border-radius: 4px;
    padding: 0.75rem 1rem;
    margin-top: 0.5rem;
}

.log-hours-icon {
    font-size: 1.25rem;
    margin-top: 0.15rem;
}

.log-hours-input {
    max-width: 220px;
}
/* ============================================================================
   Craig's Voice Demo - MIE staff dashboard
   Light styling for the sample list on the create/list dashboard.
   Markup: App_Data/Razor/ExtraNet/CraigVoiceDemo/Dashboard.cshtml
   ============================================================================ */

.craig-demo-table td {
    vertical-align: middle;
}

.craig-demo-name {
    font-weight: 600;
    color: #242424;
    margin-bottom: 6px;
}

.craig-demo-script {
    font-style: italic;
    margin-bottom: 8px;
}

.craig-demo-audio {
    width: 100%;
    max-width: 320px;
    height: 36px;
}

.craig-demo-actions .btn,
.craig-demo-actions form {
    margin-right: 6px;
}
/* ============================================================
   Investor Portal - Manage Settings
   Highlight block for the new past-due invoice reminder fields
   (RemindPastDueInvoices + PastDueReminderDays). Light-orange
   brand tint with a "New" badge above the fields.
   ============================================================ */
.v3 .investor-reminder-highlight {
    background-color: var(--light-orange);
    border: 1px solid var(--orange);
    border-radius: 6px;
    padding: 16px 18px;
    margin-top: 14px;
}

.v3 .investor-reminder-highlight .investor-reminder-badge {
    display: inline-block;
    background-color: var(--orange);
    color: #ffffff;
    font-family: 'Montserrat', sans-serif;
    font-weight: 700;
    font-size: 11px;
    line-height: 1;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    padding: 4px 10px;
    border-radius: 12px;
    margin-bottom: 12px;
}
/* ============================================================================
   Timeline Ask Craig panel
   The embedded, always-visible Craig chat on the potential-program timeline
   (subtask detail left column + timeline lister right column). Message bubbles
   and citation chips are inherited from 060-ask-craig.css; this file only adds
   the panel shell + welcome header + composer.
   ============================================================================ */

.timeline-craig {
    display: flex;
    flex-direction: column;
    background: #fff;
    border: 1px solid #e8eaed;
    border-radius: 6px;
    overflow: hidden;
}

.timeline-craig-header {
    display: flex;
    align-items: center;
    padding: 16px;
    border-bottom: 1px solid #f1f2f4;
}

.timeline-craig-avatar img {
    width: 64px;
    height: 64px;
    border-radius: 50%;
    border: 3px solid #f95602;
    object-fit: cover;
}

.timeline-craig-intro {
    margin-left: 14px;
}

.timeline-craig-name {
    font-family: "Montserrat", sans-serif;
    font-weight: 700;
    font-size: 1.1rem;
    color: #242424;
}

.timeline-craig-welcome {
    margin: 4px 0 0;
    color: #4d4d4d;
    font-size: 0.9rem;
    line-height: 1.4;
}

.timeline-craig-messages {
    padding: 12px 16px;
    max-height: 460px;
    min-height: 80px;
    overflow-y: auto;
}

.timeline-craig-messages:empty {
    display: none;
}

.timeline-craig-composer {
    padding: 12px 16px 14px;
    border-top: 1px solid #f1f2f4;
}

.timeline-craig-input {
    resize: vertical;
    border-radius: 6px;
}

.timeline-craig-input:focus {
    border-color: #f95602;
    box-shadow: 0 0 0 0.15rem rgba(249, 86, 2, 0.2);
}

.timeline-craig-foot {
    margin-top: 6px;
    font-size: 0.72rem;
    color: #9aa0a6;
}

.timeline-craig-locked {
    padding: 14px 16px 16px;
    color: #6b7280;
    font-size: 0.88rem;
    background: #fafbfc;
}

/* Guided-tour karaoke teleprompter (Craig narrates the linked doc) */
.timeline-craig-tour.tct {
    text-align: center;
    padding: 24px 16px 18px;
}

.tct-photo {
    width: 128px;
    height: 128px;
    border-radius: 50%;
    border: 3px solid #f95602;
    object-fit: cover;
    transition: box-shadow 0.3s ease;
}

.tct.is-playing .tct-photo {
    box-shadow: 0 0 0 6px rgba(249, 86, 2, 0.14);
}

/* Two-line window: fixed height, overflow clipped, edges faded so lines slide up and out. */
.tct-viewport {
    height: 3.6em;
    line-height: 1.8;
    overflow: hidden;
    margin: 18px auto 4px;
    max-width: 92%;
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 18%, #000 82%, transparent 100%);
    mask-image: linear-gradient(to bottom, transparent 0, #000 18%, #000 82%, transparent 100%);
}

.tct-caption {
    font-size: 1.1rem;
    transition: transform 0.5s ease;
    will-change: transform;
}

.tct-word {
    color: #c6cbd3;
    transition: color 0.25s ease;
}

.tct-word.is-spoken {
    color: #2d3748;
}

.tct-word.is-current {
    color: #f95602;
    font-weight: 600;
}

.tct-controls {
    margin-top: 14px;
}

.tct-ask {
    margin-left: 6px;
    color: #6b7280;
}

.d-none {
    display: none;
}

.timeline-craig .citation-row {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 6px;
}

/* Craig's message + its staff card / citations stack in one column at ~90% width, left-aligned,
   so the thread reads as a back-and-forth (the staff card sits below the message, not beside it). */
.timeline-craig .msg-craig .msg-content { max-width: 90%; }
.timeline-craig .msg-user .msg-bubble { max-width: 90%; }
.timeline-craig .craig-staff-contacts { margin-top: 10px; }

.timeline-craig-note-saved {
    margin: 2px 16px 10px;
    font-size: 0.82rem;
    color: #2e7d32;
}

/* Progress-notes journal list (sub-task detail + dashboard) */
.timeline-notes .timeline-note {
    padding: 10px 0;
    border-bottom: 1px solid #f1f2f4;
}
.timeline-notes .timeline-note:last-child { border-bottom: 0; }
.timeline-note-text { color: #2d3748; font-size: 0.95rem; line-height: 1.5; }
.timeline-note-meta { margin-top: 4px; font-size: 0.78rem; color: #9aa0a6; }
/* Date + author line sits ABOVE the note text, in off-orange. */
.timeline-note-meta-top { margin-top: 0; margin-bottom: 4px; color: #F97702; }
/* Sub-task label below the note - light-grey plain text (was a grey badge). */
.timeline-note-subtask { margin-top: 4px; font-size: 0.78rem; color: #adb5bd; }

/* Lister right-column variant: let it stick while the timeline scrolls. */
.timeline-craig-rail .timeline-craig {
    position: sticky;
    top: 20px;
}
/* ============================================================================
   Program switcher modal (#programSwitcher)
   Compact, Craig-headed modal: a search box + Program Type / State / Region
   filters over a scrollable, role-scoped program list.
   Markup: SideBarRight.cshtml. Behavior: js/custom/200-program-switcher.js.
   ============================================================================ */

/* Fixed height so the modal never resizes as search results come and go. */
.program-switcher .modal-dialog {
    height: 90vh;
}

.program-switcher .modal-content {
    border: none;
    border-radius: 10px;
    overflow: hidden;
    height: 100%;
    display: flex;
    flex-direction: column;
}

.program-switcher .modal-body {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.program-switcher-header {
    flex: 0 0 auto;
    align-items: center;
    background: var(--off-white, #f3f3f3);
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);
}

.program-switcher-craig-photo {
    width: 56px;
    height: 56px;
    border-radius: 50%;
    object-fit: cover;
    border: 3px solid var(--orange, #f95602);
    margin-right: 14px;
    flex: 0 0 auto;
}

.program-switcher-heading {
    flex: 1 1 auto;
}

.program-switcher-subtitle {
    font-size: 0.85rem;
    color: var(--mid-grey, #4d4d4d);
}

.program-switcher-search {
    border-radius: 8px;
}

/* The results region fills the remaining modal height and scrolls internally, so the
   modal's outer size stays constant while rows filter in and out. */
.program-switcher-scroll {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    border: 1px solid rgba(0, 0, 0, 0.06);
    border-radius: 8px;
}

.program-switcher-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    text-align: left;
    padding: 0.6rem 0.9rem;
    background: #fff;
    border: none;
    border-bottom: 1px solid rgba(0, 0, 0, 0.05);
    cursor: pointer;
    transition: background 0.12s ease;
}

.program-switcher-row:last-child {
    border-bottom: none;
}

.program-switcher-row:hover:not(:disabled) {
    background: var(--light-orange, #ffe1c8);
}

.program-switcher-row:disabled {
    opacity: 0.5;
    cursor: default;
}

.program-switcher-row.is-switching {
    background: var(--light-orange, #ffe1c8);
}

.program-switcher-row-name {
    font-weight: 600;
    color: var(--off-black, #242424);
    flex: 0 1 auto;
}

/* Program year sits immediately to the right of the name; margin-right:auto absorbs the
   remaining space so the state badge is pushed to the far right of the row. First-year rows
   color this label with the brand .text-off-orange utility (set in the razor). */
.program-switcher-row-year {
    margin-left: 0.5rem;
    margin-right: auto;
    flex: 0 0 auto;
    white-space: nowrap;
}

.program-switcher-row-state {
    margin-left: 0.75rem;
    flex: 0 0 auto;
}
/* ============================================================================
   Timeline primary-task per-program deadline editor
   Square (non-rounded) corners on the inline deadline datepicker input and its
   Save / Cancel buttons on the timeline Lister.
   ============================================================================ */

.js-deadline-editor .form-control,
.js-deadline-editor .btn {
    border-radius: 0;
}
/* ============================================================================
   Create Zoom Meeting dashboard
   Attendee type-ahead + chips + status, under ExtraNet/ZoomCalls/Dynamic.cshtml.
   Inside body.v3, so the brand tokens (var(--orange) etc.) resolve here - use them,
   don't hardcode hex.
   ============================================================================ */

.zoom-attendee-results {
    display: none;
    border: 1px solid var(--light-grey);
    border-top: none;
    border-radius: 0 0 4px 4px;
    max-height: 220px;
    overflow-y: auto;
    background: var(--white);
    box-shadow: 0 2px 6px rgba(0, 0, 0, .10);
}

.zoom-attendee-result {
    padding: 6px 10px;
    cursor: pointer;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.zoom-attendee-result:hover {
    background: var(--orange);
    color: var(--white);
}

/* Name + email grouped on the left; email truncates if long so the role/program stay put. */
.zoom-result-main {
    display: flex;
    align-items: baseline;
    min-width: 0;
    flex: 1;
}

/* Email just to the right of the name: the grey token, softened with opacity (like the role) so it
   reads as a light grey and stays quiet - the only lighter token, --light-grey, is a border tint
   that's illegible as text. */
.zoom-result-email {
    color: var(--mid-grey);
    opacity: .65;
    margin-left: 8px;
    font-size: 12px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* On hover the row fills brand orange, so lift the grey to a full-opacity off-white to stay readable. */
.zoom-attendee-result:hover .zoom-result-email {
    color: var(--off-white);
    opacity: 1;
}

.zoom-result-meta {
    display: flex;
    align-items: center;
    margin-left: 10px;
    flex-shrink: 0;
}

.zoom-result-role {
    font-size: 11px;
    opacity: .7;
    white-space: nowrap;
}

/* Program name next to the role, in the CEO off-orange (the brand's light-orange is a pale
   background tint and is illegible as text on white, so use the readable off-orange token). */
.zoom-result-program {
    font-size: 11px;
    color: var(--off-orange);
    margin-left: 8px;
    white-space: nowrap;
}

/* On hover the row fills brand orange, so flip the program text to white to keep it readable. */
.zoom-attendee-result:hover .zoom-result-program {
    color: var(--white);
}

.zoom-chips {
    margin-top: 8px;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.zoom-chip {
    display: inline-flex;
    align-items: center;
    background: var(--off-white);
    border: 1px solid var(--light-grey);
    border-radius: 14px;
    padding: 3px 6px 3px 12px;
    font-size: 13px;
}

.zoom-chip-remove {
    border: none;
    background: transparent;
    color: var(--mid-grey);
    font-size: 16px;
    line-height: 1;
    margin-left: 6px;
    cursor: pointer;
    padding: 0 4px;
}

.zoom-chip-remove:hover {
    color: var(--orange);
}

.zoom-badge-adopted {
    margin-left: 6px;
    font-size: 10px;
    text-transform: uppercase;
}

.zoom-calls-table td {
    vertical-align: top;
    font-size: 13px;
}

.zoom-create-status {
    font-size: 13px;
    min-height: 18px;
}

/* Status feedback: success/error keep semantic green/red (no brand token for those); info uses the grey token. */
.zoom-status-error {
    color: #c0392b;
}

.zoom-status-success {
    color: #1e7e34;
}

.zoom-status-info {
    color: var(--mid-grey);
}

/* Per-call People roster (RSVP status + actual attendance) in the Recent calls table. */
.zoom-people-summary {
    cursor: pointer;
    font-size: 13px;
    white-space: nowrap;
}

.zoom-roster {
    list-style: none;
    padding: 6px 0 0;
    margin: 0 0 4px;
    font-size: 12px;
}

.zoom-roster li {
    padding: 2px 0;
}

.zoom-roster .badge {
    margin-left: 4px;
    font-size: 10px;
    text-transform: uppercase;
}

.zoom-attended-label {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--mid-grey);
    margin-top: 6px;
}

/* Host-start splash spinner (ExtraNet/ZoomHost). */
.zoom-host-spinner {
    width: 36px;
    height: 36px;
    margin: 20px auto 0;
    border: 3px solid var(--light-grey);
    border-top-color: var(--orange);
    border-radius: 50%;
    animation: zoomHostSpin 0.8s linear infinite;
}

@keyframes zoomHostSpin {
    to { transform: rotate(360deg); }
}

/* "Change host" control in the All-meetings table (MIE) - opens the reassign modal. */
.js-zoom-host-change {
    color: var(--orange);
}

/* Recurring-meeting badge in the topic cell (distinct from the grey "adopted" badge). */
.zoom-badge-recurring {
    margin-left: 6px;
    font-size: 10px;
    text-transform: uppercase;
    background: var(--light-orange);
    color: var(--off-black);
}

/* Per-row action buttons (Join + Start-as-host) share one row. */
.zoom-row-actions {
    margin-top: 6px;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
}

/* Join link as an OUTLINED orange button (white fill, orange border) - the ghost of the solid start button;
   fills orange on hover. Explicit brand tokens so it doesn't depend on the theme's btn-outline-primary. */
.zoom-join-btn {
    background: var(--white);
    border-color: var(--orange);
    color: var(--orange);
}

.zoom-join-btn:hover,
.zoom-join-btn:focus {
    background: var(--orange);
    border-color: var(--orange);
    color: var(--white);
}

/* Disabled Start-as-host (too early): legible-but-inert; the span carries no href so it can't fire. */
.zoom-host-start-btn.disabled {
    opacity: .55;
    cursor: not-allowed;
}

/* The question-mark icon next to a disabled button - native-title tooltip on hover. */
.zoom-host-start-help {
    cursor: help;
    font-size: 14px;
}

/* ---- Recurrence picker (create form) ---------------------------------------------------------- */
.zoom-recurrence-box {
    border: 1px solid var(--light-grey);
    border-radius: 4px;
    padding: 12px 14px;
    background: var(--off-white);
}

/* Compact number inputs (Every N / occurrences / day-of-month). */
.zoom-num-sm {
    max-width: 80px;
}

/* Inline selects inside the monthly "on the first Tuesday" sentence. */
.zoom-inline-select {
    display: inline-block;
    width: auto;
    vertical-align: middle;
}

/* Weekday toggle buttons (Sun..Sat) for the weekly pattern. */
.zoom-weekday-toggles {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.zoom-weekday {
    width: 38px;
    height: 38px;
    border-radius: 50%;
    border: 1px solid var(--light-grey);
    background: var(--white);
    color: var(--mid-grey);
    font-size: 13px;
    cursor: pointer;
    padding: 0;
}

.zoom-weekday.active {
    background: var(--orange);
    border-color: var(--orange);
    color: var(--white);
}

/* Reassign-host modal: meeting details + a staff picker. */
.zoom-host-modal-details {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 4px 14px;
    margin: 12px 0 18px;
}

.zoom-host-modal-details dt {
    font-weight: 600;
    color: var(--mid-grey);
}

.zoom-host-modal-details dd {
    margin: 0;
}

#zoomHostModal .modal-body {
    padding: 2.5rem;
}

#zoomHostModal .zoom-attendee-results {
    border-radius: 4px;
    border-top: 1px solid var(--light-grey);
    margin-top: 2px;
}
/* ============================================================================
   Manage Zoom meeting modal (dashboard)
   Styles for the edit/cancel/invitees modal + the cancelled-row treatment.
   Markup: ExtraNet/Zoom/Calls/Dynamic.cshtml (#zoomManageModal). The modal
   renders portaled to <body> (outside body.v3), so colors are hardcoded here
   rather than var(--orange) - same rule as the other overlay chrome.
   ============================================================================ */

/* Cancelled rows in the meetings table (inside body.v3). */
.zoom-calls-table tr.zoom-row-cancelled td {
    background-color: #faf7f6;
    color: #9aa0a6;
}
.zoom-calls-table tr.zoom-row-cancelled .zoom-row-actions {
    opacity: .85;
}

/* Date / Time / Duration / Time zone row - keep the compact selects tidy and aligned. */
#zoomManageModal .zoom-when-row .form-group {
    margin-bottom: .5rem;
}
#zoomManageModal .zoom-time-group .zoom-ampm {
    max-width: 4.75rem;
    flex: 0 0 auto;
}
#zoomManageModal .zoom-duration-group select {
    min-width: 3.5rem;
    padding-left: .5rem;
    padding-right: .5rem;
}

/* Invitee list inside the manage modal. */
#zoomManageModal .zoom-manage-invitees {
    max-height: 220px;
    overflow-y: auto;
}
#zoomManageModal .zoom-manage-invitee {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 6px 8px;
    border: 1px solid #ececec;
    border-radius: 4px;
    margin-bottom: 6px;
}
#zoomManageModal .zoom-invitee-meta {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
}
#zoomManageModal .zoom-invitee-name {
    font-weight: 600;
    margin-right: 8px;
}
#zoomManageModal .zoom-invitee-email {
    font-size: .85em;
}
#zoomManageModal .js-zoom-remove-invitee {
    line-height: 1;
}

/* Inline add-invitee panel. */
#zoomAddInviteePanel {
    border: 1px solid #ececec;
    border-radius: 5px;
    padding: 12px;
    background: #fbfbfb;
}
#zoomAddInviteePanel .zoom-add-invitee-kind label {
    cursor: pointer;
    font-weight: 600;
}

/* The type-ahead results dropdown re-uses .zoom-attendee-result from 280-zoom-calls.css;
   just make sure it isn't clipped inside the panel. */
#zoomInviteeResults {
    position: relative;
    z-index: 2;
}

/* Notification log table. */
#zoomNotifications .zoom-notifications-table th {
    font-size: .78rem;
    text-transform: uppercase;
    letter-spacing: .02em;
    color: #6c757d;
}
#zoomNotifications .zoom-notifications-table td {
    font-size: .88rem;
    vertical-align: middle;
}
/* Manage Regions drag-to-reorder (My Region admins). The grip handle shows a grab cursor; the row being
   dragged dims and takes a light-orange wash so the drop position reads clearly. Inside body.v3 so the
   brand token resolves. See 310-region-order.js. */
.region-drag-handle {
    cursor: grab;
}

.region-drag-handle:active {
    cursor: grabbing;
}

tr.region-row-dragging {
    opacity: 0.6;
    background-color: var(--light-orange);
}
/* ============================================================================
   Facebook media dashboard - marketing image library (MIE staff / Casey)
   Gallery grid + filter bar + tag management.
   Page: Website/App_Data/Razor/ExtraNet/FacebookMedia/Dashboard.cshtml
   Behavior: js/custom/330-facebook-media.js
   ============================================================================ */

.fbm-dashboard {
    padding: 0 4px 40px;
}

.fbm-header {
    margin-bottom: 14px;
}

.fbm-title {
    font-family: var(--font-montserrat);
    font-weight: 700;
    color: var(--off-black);
    border-bottom: 2px solid var(--off-orange);
    padding-bottom: 8px;
    margin-bottom: 6px;
}

.fbm-subtitle {
    color: var(--mid-grey);
    margin: 0;
}

/* ---- filter bar ---- */
.fbm-filters {
    background: var(--white);
    border: 1px solid var(--light-grey);
    border-radius: 5px;
    padding: 14px 16px;
    margin-bottom: 18px;
}

.fbm-filter-row {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-bottom: 12px;
}

.fbm-tag-row {
    border-top: 1px dashed var(--light-grey);
    padding-top: 12px;
}

.fbm-field {
    flex: 1 1 180px;
    min-width: 160px;
}

.fbm-field-date {
    flex: 0 0 150px;
    min-width: 130px;
}

.fbm-label {
    display: block;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .03em;
    color: var(--mid-grey);
    margin-bottom: 3px;
}

.fbm-filter-actions {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
}

.fbm-clear {
    color: var(--mid-grey);
    text-decoration: underline;
}

.fbm-manage-toggle {
    margin-left: auto;
}

/* ---- gallery (AJAX-loaded) ---- */
.fbm-gallery {
    min-height: 200px;
}

.fbm-loading {
    display: none;
    padding: 30px 0;
    text-align: center;
    color: var(--mid-grey);
    font-style: italic;
}

/* ---- gallery grid ---- */
.fbm-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(165px, 1fr));
    gap: 10px;
}

.fbm-tile {
    position: relative;
    border-radius: 4px;
    overflow: hidden;
    background: var(--off-white);
    border: 1px solid var(--light-grey);
}

.fbm-tile-link {
    display: block;
    line-height: 0;
}

.fbm-tile-img {
    width: 100%;
    height: 155px;
    object-fit: cover;
    opacity: 0;
    transition: opacity .35s ease, transform .2s ease;
}

.fbm-tile.is-loaded .fbm-tile-img {
    opacity: 1;
}

.fbm-tile:hover .fbm-tile-img {
    transform: scale(1.04);
}

/* per-tile loader: a gray placeholder + spinner shown until the thumbnail finishes
   loading, then it fades out and the image fades in (no more images popping in raw). */
.fbm-tile-loader {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--light-grey);
    opacity: 1;
    transition: opacity .35s ease;
}

.fbm-tile.is-loaded .fbm-tile-loader {
    opacity: 0;
    pointer-events: none;
}

.fbm-spinner {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    border: 3px solid var(--white);
    border-top-color: var(--orange);
    animation: fbm-spin .8s linear infinite;
}

@keyframes fbm-spin {
    to { transform: rotate(360deg); }
}

/* hover overlay: darken the image, reveal the icon-only action buttons in a single row */
.fbm-tile-overlay {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 2;
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
    gap: 8px;
    background: rgba(36, 36, 36, .55);
    opacity: 0;
    transition: opacity .15s ease;
}

.fbm-tile:hover .fbm-tile-overlay {
    opacity: 1;
}

/* icon-only square buttons (no text) */
.fbm-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    padding: 0;
    border-radius: 4px;
    font-size: 15px;
    background: var(--white);
    color: var(--off-black);
    border: 1px solid var(--white);
}

.fbm-btn:hover {
    text-decoration: none;
}

.fbm-view-btn:hover {
    color: var(--orange);
}

.fbm-download-btn {
    background: var(--orange);
    color: var(--white) !important;   /* beat the theme's a:hover orange */
    border-color: var(--orange);
}

.fbm-download-btn:hover {
    background: var(--off-orange);
    color: var(--white) !important;
}

/* newsletter link-out: light-orange button */
.fbm-news-btn {
    background: var(--light-orange);
    color: var(--off-black) !important;
    border-color: var(--light-orange);
}

.fbm-news-btn:hover {
    background: var(--off-orange);
    color: var(--white) !important;
}

/* Force each button's icon color per state, with specificity high enough to beat the theme's
   `body.v3 a:hover` rule (which otherwise recolors the icons to the brand orange - matching the
   orange / light-orange button backgrounds - so they vanish on hover). Target the <i> directly. */
.fbm-tile-overlay .fbm-view-btn i { color: var(--off-black) !important; }
.fbm-tile-overlay .fbm-view-btn:hover i { color: var(--orange) !important; }
.fbm-tile-overlay .fbm-download-btn i,
.fbm-tile-overlay .fbm-download-btn:hover i { color: var(--white) !important; }
.fbm-tile-overlay .fbm-news-btn i { color: var(--off-black) !important; }
.fbm-tile-overlay .fbm-news-btn:hover i { color: var(--white) !important; }

/* ---- pagination ---- */
.fbm-pager {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 16px;
    margin-top: 22px;
}

.fbm-pager-status {
    color: var(--mid-grey);
}

.fbm-empty {
    margin-top: 10px;
}

/* ---- tag management (hidden until toggled) ---- */
.fbm-manage {
    display: none;
    background: var(--white);
    border: 1px solid var(--light-grey);
    border-radius: 5px;
    padding: 14px 16px;
    margin-bottom: 18px;
}

.fbm-manage.is-open {
    display: block;
}

.fbm-manage-title {
    font-family: var(--font-montserrat);
    font-weight: 700;
    color: var(--off-black);
    margin-bottom: 4px;
}

.fbm-manage-help {
    color: var(--mid-grey);
    font-size: 12px;
    margin-bottom: 12px;
}

.fbm-manage-group {
    margin-bottom: 14px;
}

.fbm-manage-group-title {
    font-weight: 700;
    color: var(--orange);
    margin-bottom: 4px;
}

.fbm-manage-table {
    margin-bottom: 0;
}

.fbm-manage-count {
    width: 60px;
    text-align: right;
    color: var(--mid-grey);
}

.fbm-manage-actions {
    width: 200px;
    white-space: nowrap;
}

.fbm-manage-actions a {
    cursor: pointer;
    margin-right: 12px;
    color: var(--orange);
}

.fbm-manage-actions a:hover {
    text-decoration: underline;
}

/* ---- video tiles: poster thumbnail + play badge, links out to the video ---- */
.fbm-tile-video .fbm-tile-link {
    position: relative;
    display: block;
}

.fbm-play {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 46px;
    height: 46px;
    margin: -23px 0 0 -23px;
    border-radius: 50%;
    background: rgba(36, 36, 36, .6);
    pointer-events: none;
}

.fbm-play::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 54%;
    transform: translate(-50%, -50%);
    border-style: solid;
    border-width: 9px 0 9px 15px;
    border-color: transparent transparent transparent var(--white);
}

.fbm-tile-video:hover .fbm-play {
    background: var(--orange);
}

.fbm-noposter {
    display: block;
    width: 100%;
    height: 155px;
    background: var(--off-black);
}

/* video download: a corner button, separate from the center play click */
.fbm-video-download {
    position: absolute;
    top: 6px;
    right: 6px;
    z-index: 2;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 4px;
    background: rgba(36, 36, 36, .6);
    color: var(--white) !important;
    opacity: 0;
    transition: opacity .15s ease, background .15s ease;
}

.fbm-tile-video:hover .fbm-video-download {
    opacity: 1;
}

.fbm-video-download:hover {
    background: var(--orange);
    color: var(--white) !important;
    text-decoration: none;
}
