Proyectos de Subversion Moodle

Rev

Rev 1 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

/* course.less */

/* COURSE CONTENT */

.block_tree .tree_item.branch {
    margin-left: 8px;
}

.section {
    .side {
        &.left {
            float: left;
        }

        &.right {
            float: right;
            clear: right;
        }
        margin-top: 0.5rem;
    }

    .spinner {
        height: 16px;
        width: 16px;
    }

    .activity {
        .spinner {
            left: 100%;
            position: absolute;
        }

        /* The command block for each activity */
        .actions {
            position: absolute;
            right: 0;
            top: 0;
            display: flex;
        }

        .contentwithoutlink,
        .activityinstance {
            min-width: 40%;

            > a {
                display: inline-flex;
                align-items: center;
            }

            .dimmed {
                .activityicon {
                    opacity: .5;
                }
            }
        }

        .stealth {
            color: $text-muted;
        }
        a.stealth,
        a.stealth:hover {
            color: lighten($link-color, 25%) !important; /* stylelint-disable-line declaration-no-important */
        }

        &.indented {
            .activity-item {
                margin-left: map-get($spacers, 3);
            }
        }
    }

    .label {
        .contentwithoutlink,
        .activityinstance {
            padding-right: 32px;
            display: block;
            height: inherit;
        }
        @include media-breakpoint-up(sm) {
            .mod-indent-outer {
                padding-left: 24px;
                display: block;
            }
        }
    }

    .filler {
        // This must be sized like an icon to fill the space.
        width: 16px;
        height: 16px;
        padding: 0;
        margin: 0 ($spacer * 0.5);
        display: inline-block;
    }

    .activity.editor_displayed {
        a.editing_title,
        .moodle-actionmenu {
            display: none;
        }

        div.activityinstance {
            padding-right: initial;

            input {
                margin-bottom: initial;
                padding-top: initial;
                padding-bottom: initial;
                vertical-align: text-bottom;
            }
        }
    }
}

.section .activity .activityinstance {
    display: inline-flex;
    align-items: center;
    margin-bottom: 1rem;
}

.editing {
    .section {
        .activity {
            .contentwithoutlink,
            .activityinstance {
                padding-right: 200px;
            }
            .mod-indent-outer {
                /**
                 * Add appropriate padding such that nothing overlaps the
                 * absolute positioned move icon.
                 */
                padding-left: 2rem;
            }
        }
    }
    // Remove old spinners if the reactive state is ready.
    .course-content .stateready .section .spinner {
        display: none;
    }
    // New editing in progress spinners.
    .editinprogress {
        position: relative;

        & > * {
            opacity: .4;
        }

        .corelightbox,
        .lightbox {
            display: none;
        }

        &:after {
            @extend .fa-solid;
            position: absolute;
            font-size: 20px;
            color: $gray-600;
            content: fa-content($fa-var-spinner);
            display: flex;
            justify-content: center;
            align-items: center;
            width: 30px;
            height: 30px;
            left: calc(50% - 15px);
            top: calc(50% - 15px);
            animation: editinprogress-rotation 2s infinite linear;
        }

        // Prevent inner editingprogress.
        .editinprogress {
            &:after {
                display: none;
            }
        }
    }
}

@keyframes editinprogress-rotation {
    0% {
        opacity: 0;
        transform: rotate(0deg);
    }
    50% {
        opacity: 1;
    }
    100% {
        opacity: 0;
        transform: rotate(359deg);
    }
}

.editing_show + .editing_assign,
.editing_hide + .editing_assign {
    // if roles icon missing, add space
    margin-left: 20px;
}

.section .activity .commands {
    white-space: nowrap;
    display: inline-block;
}

.section .activity.modtype_label.label {
    font-weight: normal;

    // Remove min-height for labels so top and bottom paddings can be displayed more consistently.
    .contentwithoutlink {
        min-height: 0;
    }

    // When activity information is shown remove the bottom margin for the last p/i elements.
    &.hasinfo {
        p:last-child,
        i:last-child {
            margin-bottom: 0;
        }
    }
}

// The activity-wrapper class ensures these styles are not used when the new activity styles
// from MDL-71691 are not affected. As soons as MDL-72656 is integrated and these styles
// are removed the core_courseformat/local/content/cm template no longer needs this class.
.section li.activity:not(.activity-wrapper) {
    padding: 0.2em;
    clear: both;

    &.hasinfo {
        border-bottom: $border-width solid $table-border-color;
        padding-top: map-get($spacers, 3);
        padding-bottom: map-get($spacers, 3);

        &:last-child {
            border-bottom: 0;
            padding-bottom: 0;
        }
    }
}

// Compensate for the border widths when dropzones are displayed.
.course-content .section.dropready {

    &.main.drop-down {
        border-bottom: 1px solid $dropzone-border;
    }

    .course-section-header.dropready.drop-zone {
        margin-top: -2px;
    }

    li.activity.dropready.drop-down {
        border-bottom: 1px solid $dropzone-border;
        margin-bottom: -1px;
    }

    li.activity.dropready.drop-up {
        border-top: 1px solid $dropzone-border;
        margin-top: -1px;
    }
}

.section .activity .activityinstance .groupinglabel {
    padding-left: 30px;
}

.section.main:not(.course-section) .activity .availabilityinfo,
.section.main:not(.course-section) .activity .contentafterlink {
    margin-top: 0.5em;
    margin-left: 30px;
}

.section .activity .contentafterlink p {
    margin: .5em 0;
}

.editing .section.main:not(.course-section) {
    .activity:hover,
    .activity.action-menu-shown,
    .sectionname:hover {
        background-color: $table-accent-bg;
    }
}

.course-content .current {
    position: relative;
}

.course-content .current::before {
    border-left: $primary 3px solid;
    bottom: 0;
    content: "";
    left: -8px;
    position: absolute;
    top: 0;
}

.course-content .single-section .section-navigation {
    display: block;
    padding: 0.5em;
    margin-bottom: -0.5em;
}

.course-content .single-section .section-navigation .title {
    font-weight: bold;
    font-size: 108%;
    clear: both;
}

.course-content .single-section .section-navigation .mdl-left {
    font-weight: normal;
    float: left;
    margin-right: 1em;
}

.course-content .single-section .section-navigation .mdl-left .larrow {
    margin-right: 0.1em;
}

.course-content .single-section .section-navigation .mdl-right {
    font-weight: normal;
    float: right;
    margin-left: 1em;
}

.course-content .single-section .section-navigation .mdl-right .rarrow {
    margin-left: 0.1em;
}

.course-content .single-section .section-navigation .mdl-bottom {
    margin-top: 0;
}

.course-content ul li.section.main:not(.course-section) {
    border-bottom: $border-width solid $table-border-color;
    margin-top: 0;

    &:last-child {
        border-bottom: 0;
    }
}

.course-content ul li.section.hidden:not(.course-section) {
    .sectionname > span,
    .content > div.summary,
    .activity .activityinstance {
        color: $text-muted;
    }
}

.course-content ul.topics,
.course-content ul.weeks {
    padding: 0;
    margin: 0;
    list-style: none;

    li.section {
        .content {
            margin: 0;
            padding: 0;
        }

        @include media-breakpoint-up(sm) {
            .summary,
            .content > .availabilityinfo {
                margin-left: 25px;
            }
        }

        .left,
        .right {
            padding: 0 6px 0;
            text-align: right;
            width: auto;
        }
    }
}

.course-content .single-section ul.topics li.section,
.course-content .single-section ul.weeks li.section {
    padding-top: 0;
}

@include media-breakpoint-down(sm) {
    body:not(.editing) {
        .course-content ul.topics,
        .course-content ul.weeks {
            li.section {
                .left,
                .right {
                    display: none;
                }
            }
        }
    }
}

.course-content {
    margin-top: 0;
}

.course-content .hidden {
    display: none;
}

.course-content li {
    &.section:not(.course-section) {
        @include media-breakpoint-down(sm) {
            ul {
                padding-left: 0;
            }
        }
        ul {
            list-style: disc;

            ul {
                list-style: circle;

                ul {
                    list-style: square;
                }
            }
        }

        li {
            &.activity {
                ul {
                    list-style: disc;

                    ul {
                        list-style: circle;

                        ul {
                            list-style: square;
                        }
                    }
                }
            }
        }

        .right {
            > .icon:first-child {
                /* Remove the spacer icon. */
                display: none;
            }
        }
    }
}

.path-course-view.editing #region-main > .card-block {
    padding-bottom: 13rem;
}

.path-course-view .completionprogress {
    margin-left: 25px;
}

.path-course-view .completionprogress {
    display: block;
    float: right;
    height: 20px;
    position: relative;
}

#page-site-index .subscribelink {
    text-align: right;
}

#site-news-forum h2,
#frontpage-course-list h2,
#frontpage-category-names h2,
#frontpage-category-combo h2 {
    margin-bottom: 9px;
}

.path-course-view a.reduce-sections {
    padding-left: 0.2em;
}

.path-course-view .subscribelink {
    text-align: right;
}

.path-course-view .unread {
    margin-left: 30px;
}

.path-course-view .block.drag .header {
    cursor: move;
}

.path-course-view .completionprogress {
    text-align: right;
}

.path-course-view .single-section .completionprogress {
    margin-right: 5px;
}

.path-course-view li.activity span.autocompletion img {
    vertical-align: text-bottom;
    margin-left: 0;
}

.path-course-view {
    &.editing {
        li.activity span.autocompletion img {
            /* Use the same spacing as the filler. */
            margin-right: $spacer * 0.5;
            margin-left: $spacer * 0.5;
        }
    }
}

li.section.hidden span.commands a.editing_hide,
li.section.hidden span.commands a.editing_show {
    cursor: default;
}

.single-section-page .header-action {
    display: inline-block;
}

input.titleeditor {
    width: 330px;
    vertical-align: text-bottom;
}

span.editinstructions {
    position: absolute;
    top: 0;
    margin-top: -22px;
    margin-left: 30px;
    font-size: $font-size-sm;
    padding: .1em .4em;
    text-decoration: none;
    z-index: 9999;
    border: $alert-border-width solid transparent;
    width: fit-content;

    @include alert-variant(
        theme-color-level('info', $alert-bg-level),
        theme-color-level('info', $alert-border-level),
        theme-color-level('info', $alert-color-level)
    );
}

/* COURSES LISTINGS AND COURSE SUMMARY */
#page-course-pending .singlebutton,
#page-course-index .singlebutton,
#page-course-index-category .singlebutton,
#page-course-editsection .singlebutton {
    text-align: center;
}

#page-admin-course-manage #movecourses td img {
    margin: 0 .22em;
    vertical-align: text-bottom;
}

#page-course-pending .pendingcourserequests {
    margin-bottom: 1em;
}

#page-course-pending .pendingcourserequests .singlebutton {
    display: inline;
}

#page-course-pending .pendingcourserequests .cell {
    padding: 0 5px;
}

#page-course-pending .pendingcourserequests .cell.c6 {
    white-space: nowrap;
}

.coursebox {
    display: flex;
    flex-direction: column;
    .info {
        display: flex;
        align-items: center;
    }
}

#frontpage-available-course-list,
#frontpage-course-list,
.course-search-result {
    margin-top: $spacer * 0.5;
    .coursebox {
        padding: $spacer * 0.5;
        border: $border-width solid $border-color;
        margin-bottom: $spacer * 0.5;

        @include border-radius();
    }
}

.subcategories,
#frontpage-category-names,
#frontpage-category-combo {
    .coursebox > .info > .coursename a {
        display: block;
        background-image: url([[pix:moodle|i/course]]);
        background-repeat: no-repeat;
        padding-left: 21px;
        background-position: left 0.2em;
    }
}

.coursebox > .info > .coursename {
    font-size: $font-size-base;
    font-weight: normal;
    margin: 5px;
    padding: 0;
}

.coursebox .content .teachers li {
    list-style-type: none;
    padding: 0;
    margin: 0;
}

.coursebox .customfieldname,
.coursebox .customfieldseparator {
    font-weight: $font-weight-bold;
}

.coursebox .content .coursefile {
    max-width: 100px;
}

.coursebox .content .courseimage img {
    max-width: 100px;
    max-height: 100px;
}

.coursebox .content .coursecat,
.coursebox .content .summary,
.coursebox .content .courseimage,
.coursebox .content .coursefile,
.coursebox .content .teachers,
.coursebox.remotecoursebox .remotecourseinfo,
.coursebox .content .customfields-container {
    margin: 15px 5px 5px;
    padding: 0;
}

.category-browse {
    .coursebox .content .coursecat,
    .coursebox .content .summary,
    .coursebox .content .courseimage,
    .coursebox .content .coursefile,
    .coursebox .content .teachers,
    .coursebox.remotecoursebox .remotecourseinfo,
    .coursebox .content .customfields-container {
        margin-top: 0;
    }
}

.coursebox.collapsed > .content {
    display: none;
}

.courses > .paging.paging-morelink {
    text-align: center;
    padding: $spacer;
}

.course_category_tree .category .numberofcourse {
    font-size: $font-size-sm;
}

.course_category_tree .category > .info > .categoryname {
    margin: 5px;
    font-size: $font-size-base;
    font-weight: normal;
    padding: 2px 18px;
}

.course_category_tree .category.with_children > .info > .categoryname {
    background-image: url([[pix:moodle|t/expanded]]);
    background-repeat: no-repeat;
    background-position: center left;
}

.course_category_tree .category.with_children.collapsed > .info > .categoryname {
    background-image: url([[pix:moodle|t/collapsed]]);
}
/* rtl:raw:
.course_category_tree .category.with_children.collapsed > .info > .categoryname {
    background-image:url([[pix:moodle|t/collapsed_rtl]]);
}
*/
.course_category_tree .category.collapsed > .content {
    display: none;
}

.course_category_tree .category > .content {
    padding-left: 16px;
}

#page-course-index-category .categorypicker {
    margin: 10px 0 20px;
}

/**
 * Course management page
 * Palette
 *
 * Background (reg)         #F5F5F5
 * Background (light        #fafafa
 * Background (highlight)   #ddffaa
 * Borders                  #e1e1e8
 */
#course-category-listings {
    margin-bottom: 0;

    /** Two column layout */
    &.columns-2 {
        > #course-listing > div {
            position: relative;
            left: -1px;
        }
    }
    /** Three column layout */
    &.columns-3 > #course-listing > div {
        height: 100%;
    }

    > div > div {
        min-height: 300px;

        > ul.ml > li:first-child > div {
            border-top: 0;
        }
    }

    h3 {
        margin: 0;
        padding: 0.4rem 0.6rem 0.3rem;
    }

    h4 {
        margin: 1rem 0 0;
        padding: 0.6rem 1rem 0.5rem;
    }

    .moodle-actionmenu {
        white-space: nowrap;
    }

    .listing-actions {
        text-align: center;

        > .moodle-actionmenu {
            display: inline-block;
        }
    }

    ul.ml {
        list-style: none;
        margin: 1rem 0;

        ul.ml {
            margin: 0;
        }
    }

    .listitem {

        &[data-selected='1'] {
            border-left: calc(#{$list-group-border-width} + 5px) solid map-get($theme-colors, 'primary');
            padding-left: calc(#{$list-group-item-padding-x} - 5px);
        }
        &:hover {
            z-index: 2;
        }
    }

    .item-actions {
        margin-right: 1em;
        display: inline-block;

        &.show .menu {

            img {
                width: 12px;
                max-width: none;
            }
        }

        .menu-action-text {
            vertical-align: inherit;
        }
    }

    .listitem {
        > div {
            > .float-left {
                float: left;
            }

            > .float-right {
                float: right;
                text-align: right;
            }

            .item-actions {
                .action-show {
                    display: none;
                }

                .action-hide {
                    display: inline;
                }
            }

            .without-actions {
                color: $course-cat-without-actions-color;
            }

            .idnumber {
                margin-right: 2em;
            }
        }
        // The category or course is hidden.
        &[data-visible="0"] {
            color: $text-muted;

            > div {
                > a {
                    color: $text-muted;
                }

                .item-actions {
                    .action-show {
                        display: inline;
                    }

                    .action-hide {
                        display: none;
                    }
                }
            }
        }

        &.highlight {
            background-color: $body-bg;

            > div,
            > div:hover,
            &[data-selected='1'] > div {
                background-color: $table-hover-bg;
            }
        }
    }

    #course-listing {
        .listitem {
            .categoryname {
                display: inline-block;
                margin-left: 1em;
                color: $course-listing-color;
            }

            .coursename {
                display: inline-block;
                flex-basis: 10rem;
            }
        }

        > .firstpage .listitem:first-child > div .item-actions .action-moveup,
        > .lastpage .listitem:last-child > div .item-actions .action-movedown {
            display: none;
        }

        .bulk-action-checkbox {
            margin: -2px 6px 0 0;
        }
    }

    #category-listing {
        .listitem.collapsed > ul.ml {
            display: none;
        }

        .listitem {
            &:first-child > div .item-actions .action-moveup,
            &:last-child > div .item-actions .action-movedown {
                display: none;
            }
        }

        .course-count {
            color: $course-listing-color;
            margin-right: 2rem;
            min-width: 3.5em;
            display: inline-block;
        }

        .bulk-action-checkbox {
            margin-right: -3px;
        }

        .category-listing > ul > .listitem:first-child {
            position: relative;
        }

        .category-bulk-actions {
            margin: 0 0.5em 0.5em;
            position: relative;
        }
    }

    .detail-pair {

        > * {
            display: inline-block;
        }

        .pair-key {
            font-weight: bold;
            vertical-align: top;

            span {
                margin-right: 1rem;
                display: block;
            }
        }

        .pair-value select {
            max-width: 100%;
        }
    }

    .bulk-actions .detail-pair {
        > * {
            display: block;
            width: 100%;
        }
    }

    .listing-pagination {
        text-align: center;

        .yui3-button {
            @include button-variant($info, $info);
            border: 0;
            margin: 0.4rem 0.2rem 0.45rem;
            font-size: 10.4px;

            &.active-page {
                @include button-variant($primary, $primary);
            }
        }
    }

    .listing-pagination-totals {
        text-align: center;

        &.dimmed {
            color: $text-muted;
            margin: 0.4rem 1rem 0.45rem;
        }
    }

    .select-a-category .notifymessage,
    .select-a-category .alert {
        margin: 1em;
    }
}

#course-category-listings #course-listing .listitem .drag-handle {
    display: none;
}

.jsenabled #course-category-listings #course-listing .listitem .drag-handle {
    display: inline-block;
    margin: 0 6px 0 0;
    cursor: pointer;
}

/** Management header styling **/
.course-being-dragged-proxy {
    border: 0;
    color: $link-color;
    vertical-align: middle;
    padding: 0 0 0 4em;
}

.course-being-dragged {
    opacity: 0.5;
}

/**
 * Display sizes:
 * Large displays                   1200        +
 * Default displays                  980     1199
 * Tablets                           768      979
 * Small tablets and large phones    481      767
 * Phones                              0      480
 */

@media (min-width: 1200px) and (max-width: 1600px) {
    #course-category-listings.columns-3 {
        background-color: $body-bg;
        border: 0;

        #category-listing,
        #course-listing {
            width: 50%;
        }

        #category-listing > div,
        #course-listing > div,
        #course-detail > div {
            background-color: $body-bg;
        }

        #course-detail {
            width: 100%;
            margin-top: 1em;
        }
    }
}

@media (max-width: 1199px) {
    #course-category-listings.columns-2,
    #course-category-listings.columns-3 {
        border: 0;

        #category-listing,
        #course-listing,
        #course-detail {
            width: 100%;
            margin: 0 0 1em;
        }
    }
}

.page-settings-menu .menubar > a > .icon {
    width: auto;
    height: 32px;
    font-size: 32px;
}

.activity-navigation {
    .row {
        align-items: center;
    }
    #prev-activity-link,
    #next-activity-link {
        white-space: pre-wrap;
    }
}

.automatic-completion-conditions {
    .badge {
        font-size: 100%;
    }
}

// These are the new styles for the renewed course UI in isssue MDL-71691
// once the old course renderers are removed in MDL-72656, all css related
// to activities and sections above this commend needs to be reviewed an
// possibly removed.

/* Variables definition*/

$activity-border-radius: 1rem !default;
$activity-border-width: 2px !default;
$activity-hover-border-color: $primary !default;
$divider-color: $gray-300 !default;
$divider-width: 2px !default;
$divider-hover-color: $primary !default;

/* Functions/Mixins definition */

// Activity completion button custom styling mixin.
@mixin completion-button() {
    &.btn {
        @include button-variant($white, $gray-400, $gray-600);
        min-height: map-get($iconsizes, 5);
        font-weight: bold;
        @include border-radius();
        .icon {
            font-size: inherit;
        }
    }
    @each $color, $value in $theme-colors {
        &.btn-#{$color} {
            $bg-color: theme-color-level($color, $alert-bg-level);
            @include button-variant($bg-color, $bg-color, $value);
            color: theme-color-level($color, $alert-color-level);
            &:hover {
                color: color-yiq($value);
            }
        }
    }
}

/* Section Expand all/Collapse all */

.section-collapsemenu {
    .collapseall {
        display: block;
    }

    .expandall {
        display: none;
    }

    &.collapsed {
        .collapseall {
            display: none;
        }

        .expandall {
            display: block;
        }
    }
}

/* Course section */

.course-section {
    list-style: none;
    margin-top: map-get($spacers, 3);
    // Custom styles for course sections while editing.
    .editing & {
        margin-top: map-get($spacers, 2);
    }

    .section-item {
        padding: map-get($spacers, 3);
        border: $border-width solid $border-color;
        @include border-radius($activity-border-radius);
    }

    &.hidden {
        .section-item {
            background-color: $gray-100;
        }
    }

    .sectionname > a {
        color: $gray-900;
        &:hover {
            text-decoration: none;
        }
    }

    .sectionbadges .badge {
        margin-left: map-get($spacers, 2);
        font-weight: normal;
        .icon {
            font-size: 12px;
            width: 12px;
            height: 12px;
        }
    }

    .course-section-header.draggable {
        cursor: move;
    }

    .section_action_menu {
        .dropdown-toggle::after {
            display: none;
        }
    }

    .summarytext {
        // Add rounded borders to images.
        img {
            @include border-radius($activity-border-radius);
        }
    }

    // Availability styles for both section and activities.
    .availabilityinfo {
        margin-top: map-get($spacers, 2);
        padding: map-get($spacers, 1) map-get($spacers, 3);
        background-color: $gray-200;
        @include font-size($small-font-size);
        @include border-radius($activity-border-radius);
        .editavailability {
            a {
                @include border-radius();
                font-weight: bold;
                &:hover {
                    background-color: $gray-400;
                }
                .icon {
                    font-size: inherit;
                    margin-right: map-get($spacers, 1);
                }
            }
        }
    }

    // Override '.btn.btn-icon' styles from buttons.scss to make action menu buttons smaller.
    .action-menu .btn.btn-icon {
        height: map-get($iconsizes, 5);
        width: map-get($iconsizes, 5);
        @include border-radius();
    }

    .section-summary-activities {
        .icon {
            width: inherit;
            color: $primary;
        }
    }

    .section-summary-activities + .section {
        border-top: $border-width solid $border-color;
        margin-top: map-get($spacers, 3) !important;  // stylelint-disable-line declaration-no-important
        padding-top: map-get($spacers, 3) !important; // stylelint-disable-line declaration-no-important
    }

    .section_goto .icon {
        font-size: $font-size-lg;
        color: $primary;
    }

    // Add new z-index context for dnd overlay higher divider buttons and quick edit links.
    .overlay-preview {
        z-index: 5;
    }
}

// Course 'add section' button.
.btn.add-section {
    @include border-radius($activity-border-radius);
    border: $divider-width dashed $border-color;
    color: $primary;
    font-size: $font-size-sm;
    font-weight: bold;
    &:hover,
    &:focus {
        background-color: $primary-light-background;
        border: $divider-width solid $primary;
        color: $primary;
    }
}

/* Single section page specific styles */

.single-section {
    // Revert main section's styles.
    > ul > .course-section {
        &.hidden .section-item {
            background-color: inherit;
        }
        .section-item {
            padding: 0;
            border: none;
        }
    }
}

/* Re-style ordered list in course content */
.course-content .activity-altcontent {
    ul {
        list-style: disc;
        ul {
            list-style: circle;
            ul {
                list-style: square;
            }
        }
    }
}

/* Activity cards */

.activity {
    list-style: none;
    position: relative;
    padding-top: map-get($spacers, 1);
    margin-top: map-get($spacers, 1);
    border-top: $border-width solid $border-color;
    // Custom styles for activity while editing.
    .editing & {
        // Remove activity top border and spacing, while editing a separator is displayed.
        padding-top: 0;
        margin-top: 0;
        border-top: none;
    }
}

.activity-item {
    position: relative;
    padding: .75rem;
    background-color: $white;
    &.activityinline {
        padding: .75rem 0;
    }
    &.hiddenactivity {
        background-color: $gray-100;
        .activityiconcontainer,
        .badge {
            mix-blend-mode: multiply;
        }
    }
    // Custom styles for activity cards while editing.
    .editing & {
        cursor: move;
        border: $activity-border-width solid transparent;
        @include border-radius($activity-border-radius);
        .a {
            cursor: pointer;
        }
        &:hover,
        &.selected {
            border: $activity-border-width solid $activity-hover-border-color;
            box-shadow: $box-shadow-sm;
            .activityiconcontainer,
            .badge {
                mix-blend-mode: multiply;
            }
        }
    }

    // Activity card grid layout.
    .activity-grid {
        display: grid;
        align-items: center;
        grid-template-columns: min-content 1fr min-content min-content min-content;
        grid-template-rows: 1fr repeat(5, min-content);
        grid-template-areas:
            "icon   name          groupmode      completion    actions"
            "icon   visibility    groupmode      completion    actions"
            "icon   dates         groupmode      completion    actions"
            "icon   altcontent    altcontent     altcontent    altcontent"
            "icon   afterlink     afterlink      afterlink     afterlink"
            "icon   availability  availability   availability  availability";
        @include media-breakpoint-down(xs) {
            grid-template-columns: min-content 1fr min-content min-content min-content;
            grid-template-rows: 1fr repeat(4, min-content);
            grid-template-areas:
                "icon          name          actions"
                "icon          visibility    actions"
                "dates         dates         dates"
                "groupmode     groupmode     groupmode"
                "completion    completion    completion"
                "altcontent    altcontent    altcontent"
                "afterlink     afterlink     afterlink"
                "availability  availability  availability";
        }
    }
    // Activity card specific grid layout for activities without name.
    .activity-grid.noname-grid {
        grid-template-columns: min-content 1fr min-content min-content;
        grid-template-areas:
            "visibility    groupmode        completion    actions"
            "altcontent    altcontent       altcontent    altcontent"
            "afterlink     afterlink        afterlink     afterlink"
            "availability  availability     availability  availability";
        @include media-breakpoint-down(xs) {
            grid-template-columns: 1fr min-content;
            grid-template-areas:
                "visibility    actions"
                "altcontent    altcontent"
                "groupmode     groupmode"
                "afterlink     afterlink"
                "completion    completion"
                "availability  availability";
        }
    }

    .activity-actions {
        grid-area: actions;
        .actions {
            position: relative;
        }
    }

    .activity-icon {
        grid-area: icon;
    }

    .activity-dates {
        grid-area: dates;
        @include font-size($small-font-size);
        color: $gray-700;
        display: flex;
        flex-wrap: wrap;
        column-gap: 0.75rem;
        @include media-breakpoint-down(xs) {
            margin-top: map-get($spacers, 2);
        }
    }
    .activity-name-area {
        grid-area: name;
        // Prevent bootstrap strech-link from covering the inplace editable button using z-index.
        .activityname {
            .afterlink {
                margin-left: map-get($spacers, 2);
            }
            .inplaceeditable .quickeditlink {
                position: relative;
                z-index: 2;
                margin-left: map-get($spacers, 2);
            }
        }
        .activitybadge {
            &.badge-none {
                font-weight: normal;
                @include font-size($small-font-size);
                padding: 0;
            }
        }
    }

    .activity-completion {
        grid-area: completion;
        justify-self: end;
        // Re-style completion buttons (mark as done & dropdown).
        button,
        a[role="button"] {
            @include completion-button();
        }
        @include media-breakpoint-down(xs) {
            width: 100%;
            margin-top: map-get($spacers, 2);
            button {
                width: 100%;
            }
        }
        .completion-dialog {
            color: $gray-700;
            font-size: $font-size-sm;
            min-width: 12rem;
            .icon {
                font-size: $font-size-sm;
                width: $font-size-sm;
                height: $font-size-sm;
                margin-right: map-get($spacers, 1);
            }
            .editcompletion a {
                @include border-radius();
                color: $gray-700;
                font-weight: bold;
                text-decoration: none;
                &:hover {
                    background-color: $gray-200;
                }
            }
        }
    }

    .activity-groupmode-info {
        grid-area: groupmode;
        justify-self: end;
        .groupmode-information {
            height: map-get($iconsizes, 5);
            width: map-get($iconsizes, 5);
            @include border-radius();
        }
        .groupmode-icon-info {
            display: none;
        }
        @include media-breakpoint-down(xs) {
            width: 100%;
            margin-top: map-get($spacers, 2);
            padding-top: map-get($spacers, 2);
            border-top: $border-width solid $border-color;
            .groupmode-information {
                width: auto;
                font-size: inherit;
                padding: 0 map-get($spacers, 2);
            }
            .groupmode-icon-info {
                display: inline;
            }
            // Disable v-parent-focus behaviour on small devices to always show the groupmode button.
            .v-parent-focus {
                opacity: 1;
                visibility: visible;
            }
        }
    }

    .activity-badges {
        grid-area: visibility;
        .badge {
            font-weight: normal;
            .icon {
                font-size: 12px;
                width: 12px;
                height: 12px;
            }
        }
    }

    .activity-altcontent {
        grid-area: altcontent;
        margin-top: map-get($spacers, 1);
        &.activity-description {
            margin-top: map-get($spacers, 2);
            padding-top: map-get($spacers, 2);
            border-top: $border-width solid $border-color;
            @include font-size($small-font-size);
        }
        // Add rounded borders to images.
        img {
            @include border-radius($activity-border-radius);
        }
    }

    .activity-availability {
        grid-area: availability;
    }

    .activity-afterlink {
        grid-area: afterlink;
        margin-top: map-get($spacers, 2);
        padding-top: map-get($spacers, 2);
        border-top: $border-width solid $border-color;
    }

    .no-overflow {
        width: 100%;
    }
}

.section .draggable .activity-item .dragicon {
    display: none;
}

/* Dividers */

.divider {
    position: relative;
    hr {
        width: 100%;
        margin: map-get($spacers, 2) map-get($spacers, 1);
        border-top: $divider-width dashed $divider-color;
    }
    .divider-content {
        opacity: 0;
        visibility: hidden;
        transition: visibility 0.1s;
        position: absolute;
        background: linear-gradient(transparent 40%, $white 40%, $white 60%, transparent 60%);
        .section.hidden & {
            background: linear-gradient(transparent 40%, $gray-100 40%, $gray-100 60%, transparent 60%);
        }
    }
    &.always-visible {
        .divider-content {
            opacity: 1;
            visibility: visible;
        }
    }
    &.always-hidden {
        hr {
            opacity: 0;
            visibility: hidden;
        }
    }
    &:hover,
    &:focus,
    &:focus-within {
        .divider-content {
            opacity: 1;
            visibility: visible;
        }
        hr {
            opacity: 1;
            visibility: visible;
        }
    }
    // Style the hr divider when the "Add content" button is hovered.
    &:has(.btn.add-content:hover) {
        hr {
            border-color: $divider-hover-color;
        }
    }
}

// These styles will make the activity and section dividers buttons visible (but still without opacity) so
// buttons can be keyboard focusable.
.activity:focus-within + .activity .divider .divider-content,
.course-section-header:focus-within + .content .section .activity:first-child .divider .divider-content,
.content .section .activity:focus-within .divider .divider-content,
.course-content:focus-within .changenumsections .divider .divider-content {
    visibility: visible;
}

// Hide last section "Add section". It will rely on the course format general "Add section" button.
.course-content ul.topics > li:last-child .changenumsections {
    display: none;
}

// Custom buttons for dividers.
.btn.add-content {
    position: relative;
    z-index: 1;
    @include border-radius($rounded-pill);
    font-size: $font-size-sm;
    font-weight: bold;
    color: theme-color-level("primary", $alert-color-level);
    background-color: theme-color-level("primary", $alert-bg-level);
    &:hover,
    &:focus {
        color: color-yiq($primary);
        background-color: $primary;
    }
    .icon {
        width: 14px;
        height: 14px;
        font-size: 14px;
    }
}

/* Bulk editing */

.bulkenabled {
    .bulk-hidden {
        display: none !important; // stylelint-disable-line declaration-no-important
    }
    .section:not(:first-child) {
        margin-top: map-get($spacers, 4);
    }
    .activity {
        margin-top: map-get($spacers, 2);
        margin-left: 2rem;
        padding-top: map-get($spacers, 2);
        border-top: $divider-width dashed $divider-color;
        &:first-child {
            margin-top: map-get($spacers, 4);
        }
    }
    .activity-item {
        .bulkselect {
            position: absolute;
            left: -2rem;
        }
    }
    .course-section-header .bulkselect {
        left: -2.75rem;
        position: relative;
        width: 0;
    }
    @include media-breakpoint-down(sm) {
        .course-content {
            margin-left: 2rem;
        }
    }
}

// Custom styles for bulk actions sticky footer in small devices.
.sticky-footer-content.bulkactions {
    @include media-breakpoint-down(sm) {
        position: relative;
        .form-check,
        .bulkaction-name,
        .bulkcount {
            display: none;
        }
        .actions button {
            padding: 0 map-get($spacers, 2);
        }
        .bulkcancel {
            position: absolute;
            top: 0;
            right: 0;
        }
    }
}

/* Activity completion */

.defaultactivitycompletion-item {
    a {
        color: $black;
        text-decoration: none;
    }
    .activityicon {
        width: 32px;
        height: 32px;
    }
}

/* Home page course specific styles */

.sitetopic {
    // Hide the first activity top border.
    .activity:first-of-type hr {
        display: none;
    }
    .section-item {
        margin-bottom: map-get($spacers, 4);
        @include border-radius();
    }
}