5 .block_tree .tree_item.branch {
33 /* The command block for each activity */
62 color: lighten($link-color, 25%) !important; /* stylelint-disable-line declaration-no-important */
67 margin-left: map-get($spacers, 3);
79 @include media-breakpoint-up(sm) {
88 // This must be sized like an icon to fill the space.
92 margin: 0 ($spacer * 0.5);
93 display: inline-block;
96 .activity.editor_displayed {
102 div.activityinstance {
103 padding-right: initial;
106 margin-bottom: initial;
107 padding-top: initial;
108 padding-bottom: initial;
109 vertical-align: text-bottom;
115 .section .activity .activityinstance {
116 display: inline-flex;
126 padding-right: 200px;
130 * Add appropriate padding such that nothing overlaps the
131 * absolute positioned move icon.
137 // Remove old spinners if the reactive state is ready.
138 .course-content .stateready .section .spinner {
141 // New editing in progress spinners.
159 content: fa-content($fa-var-spinner);
161 justify-content: center;
165 left: calc(50% - 15px);
166 top: calc(50% - 15px);
167 animation: editinprogress-rotation 2s infinite linear;
170 // Prevent inner editingprogress.
179 @keyframes editinprogress-rotation {
182 transform: rotate(0deg);
189 transform: rotate(359deg);
193 .editing_show + .editing_assign,
194 .editing_hide + .editing_assign {
195 // if roles icon missing, add space
199 .section .activity .commands {
201 display: inline-block;
204 .section .activity.modtype_label.label {
207 // Remove min-height for labels so top and bottom paddings can be displayed more consistently.
208 .contentwithoutlink {
212 // When activity information is shown remove the bottom margin for the last p/i elements.
221 // The activity-wrapper class ensures these styles are not used when the new activity styles
222 // from MDL-71691 are not affected. As soons as MDL-72656 is integrated and these styles
223 // are removed the core_courseformat/local/content/cm template no longer needs this class.
224 .section li.activity:not(.activity-wrapper) {
229 border-bottom: $border-width solid $table-border-color;
230 padding-top: map-get($spacers, 3);
231 padding-bottom: map-get($spacers, 3);
240 // Compensate for the border widths when dropzones are displayed.
241 .course-content .section.dropready {
244 border-bottom: 1px solid $dropzone-border;
247 .course-section-header.dropready.drop-zone {
251 li.activity.dropready.drop-down {
252 border-bottom: 1px solid $dropzone-border;
256 li.activity.dropready.drop-up {
257 border-top: 1px solid $dropzone-border;
262 .section .activity .activityinstance .groupinglabel {
266 .section.main:not(.course-section) .activity .availabilityinfo,
267 .section.main:not(.course-section) .activity .contentafterlink {
272 .section .activity .contentafterlink p {
276 .editing .section.main:not(.course-section) {
278 .activity.action-menu-shown,
280 background-color: $table-accent-bg;
284 .course-content .current {
288 .course-content .current::before {
289 border-left: $primary 3px solid;
297 .course-content .single-section .section-navigation {
300 margin-bottom: -0.5em;
303 .course-content .single-section .section-navigation .title {
309 .course-content .single-section .section-navigation .mdl-left {
315 .course-content .single-section .section-navigation .mdl-left .larrow {
319 .course-content .single-section .section-navigation .mdl-right {
325 .course-content .single-section .section-navigation .mdl-right .rarrow {
329 .course-content .single-section .section-navigation .mdl-bottom {
333 .course-content ul li.section.main:not(.course-section) {
334 border-bottom: $border-width solid $table-border-color;
342 .course-content ul li.section.hidden:not(.course-section) {
344 .content > div.summary,
345 .activity .activityinstance {
350 .course-content ul.topics,
351 .course-content ul.weeks {
362 @include media-breakpoint-up(sm) {
364 .content > .availabilityinfo {
378 .course-content .single-section ul.topics li.section,
379 .course-content .single-section ul.weeks li.section {
383 @include media-breakpoint-down(sm) {
385 .course-content ul.topics,
386 .course-content ul.weeks {
401 .course-content .hidden {
406 &.section:not(.course-section) {
407 @include media-breakpoint-down(sm) {
441 > .icon:first-child {
442 /* Remove the spacer icon. */
449 .path-course-view.editing #region-main > .card-block {
450 padding-bottom: 13rem;
453 .path-course-view .completionprogress {
457 .path-course-view .completionprogress {
464 #page-site-index .subscribelink {
469 #frontpage-course-list h2,
470 #frontpage-category-names h2,
471 #frontpage-category-combo h2 {
475 .path-course-view a.reduce-sections {
479 .path-course-view .subscribelink {
483 .path-course-view .unread {
487 .path-course-view .block.drag .header {
491 .path-course-view .completionprogress {
495 .path-course-view .single-section .completionprogress {
499 .path-course-view li.activity span.autocompletion img {
500 vertical-align: text-bottom;
506 li.activity span.autocompletion img {
507 /* Use the same spacing as the filler. */
508 margin-right: $spacer * 0.5;
509 margin-left: $spacer * 0.5;
514 li.section.hidden span.commands a.editing_hide,
515 li.section.hidden span.commands a.editing_show {
519 .single-section-page .header-action {
520 display: inline-block;
525 vertical-align: text-bottom;
528 span.editinstructions {
533 font-size: $font-size-sm;
535 text-decoration: none;
537 border: $alert-border-width solid transparent;
539 @include alert-variant(
540 theme-color-level('info', $alert-bg-level),
541 theme-color-level('info', $alert-border-level),
542 theme-color-level('info', $alert-color-level)
546 /* COURSES LISTINGS AND COURSE SUMMARY */
547 #page-course-pending .singlebutton,
548 #page-course-index .singlebutton,
549 #page-course-index-category .singlebutton,
550 #page-course-editsection .singlebutton {
554 #page-admin-course-manage #movecourses td img {
556 vertical-align: text-bottom;
559 #page-course-pending .pendingcourserequests {
563 #page-course-pending .pendingcourserequests .singlebutton {
567 #page-course-pending .pendingcourserequests .cell {
571 #page-course-pending .pendingcourserequests .cell.c6 {
577 flex-direction: column;
584 #frontpage-available-course-list,
585 #frontpage-course-list,
586 .course-search-result {
587 margin-top: $spacer * 0.5;
589 padding: $spacer * 0.5;
590 border: $border-width solid $border-color;
591 margin-bottom: $spacer * 0.5;
593 @include border-radius();
598 #frontpage-category-names,
599 #frontpage-category-combo {
600 .coursebox > .info > .coursename a {
602 background-image: url([[pix:moodle|i/course]]);
603 background-repeat: no-repeat;
605 background-position: left 0.2em;
609 .coursebox > .info > .coursename {
610 font-size: $font-size-base;
616 .coursebox .content .teachers li {
617 list-style-type: none;
622 .coursebox .customfieldname,
623 .coursebox .customfieldseparator {
624 font-weight: $font-weight-bold;
627 .coursebox .content .coursefile {
631 .coursebox .content .courseimage img {
636 .coursebox .content .coursecat,
637 .coursebox .content .summary,
638 .coursebox .content .courseimage,
639 .coursebox .content .coursefile,
640 .coursebox .content .teachers,
641 .coursebox.remotecoursebox .remotecourseinfo,
642 .coursebox .content .customfields-container {
643 margin: 15px 5px 5px;
648 .coursebox .content .coursecat,
649 .coursebox .content .summary,
650 .coursebox .content .courseimage,
651 .coursebox .content .coursefile,
652 .coursebox .content .teachers,
653 .coursebox.remotecoursebox .remotecourseinfo,
654 .coursebox .content .customfields-container {
659 .coursebox.collapsed > .content {
663 .courses > .paging.paging-morelink {
668 .course_category_tree .category .numberofcourse {
669 font-size: $font-size-sm;
672 .course_category_tree .category > .info > .categoryname {
674 font-size: $font-size-base;
679 .course_category_tree .category.with_children > .info > .categoryname {
680 background-image: url([[pix:moodle|t/expanded]]);
681 background-repeat: no-repeat;
682 background-position: center left;
685 .course_category_tree .category.with_children.collapsed > .info > .categoryname {
686 background-image: url([[pix:moodle|t/collapsed]]);
689 .course_category_tree .category.with_children.collapsed > .info > .categoryname {
690 background-image:url([[pix:moodle|t/collapsed_rtl]]);
693 .course_category_tree .category.collapsed > .content {
697 .course_category_tree .category > .content {
701 #page-course-index-category .categorypicker {
706 * Course management page
709 * Background (reg) #F5F5F5
710 * Background (light #fafafa
711 * Background (highlight) #ddffaa
714 #course-category-listings {
717 /** Two column layout */
719 > #course-listing > div {
724 /** Three column layout */
725 &.columns-3 > #course-listing > div {
732 > ul.ml > li:first-child > div {
739 padding: 0.4rem 0.6rem 0.3rem;
744 padding: 0.6rem 1rem 0.5rem;
754 > .moodle-actionmenu {
755 display: inline-block;
770 &[data-selected='1'] {
771 border-left: calc(#{$list-group-border-width} + 5px) solid map-get($theme-colors, 'primary');
772 padding-left: calc(#{$list-group-item-padding-x} - 5px);
781 display: inline-block;
792 vertical-align: inherit;
818 color: $course-cat-without-actions-color;
825 // The category or course is hidden.
826 &[data-visible="0"] {
847 background-color: $body-bg;
851 &[data-selected='1'] > div {
852 background-color: $table-hover-bg;
860 display: inline-block;
862 color: $course-listing-color;
866 display: inline-block;
871 > .firstpage .listitem:first-child > div .item-actions .action-moveup,
872 > .lastpage .listitem:last-child > div .item-actions .action-movedown {
876 .bulk-action-checkbox {
877 margin: -2px 6px 0 0;
882 .listitem.collapsed > ul.ml {
887 &:first-child > div .item-actions .action-moveup,
888 &:last-child > div .item-actions .action-movedown {
894 color: $course-listing-color;
897 display: inline-block;
900 .bulk-action-checkbox {
904 .category-listing > ul > .listitem:first-child {
908 .category-bulk-actions {
909 margin: 0 0.5em 0.5em;
917 display: inline-block;
935 .bulk-actions .detail-pair {
942 .listing-pagination {
946 @include button-variant($info, $info);
948 margin: 0.4rem 0.2rem 0.45rem;
952 @include button-variant($primary, $primary);
957 .listing-pagination-totals {
962 margin: 0.4rem 1rem 0.45rem;
966 .select-a-category .notifymessage,
967 .select-a-category .alert {
972 #course-category-listings #course-listing .listitem .drag-handle {
976 .jsenabled #course-category-listings #course-listing .listitem .drag-handle {
977 display: inline-block;
982 /** Management header styling **/
983 .course-being-dragged-proxy {
986 vertical-align: middle;
990 .course-being-dragged {
996 * Large displays 1200 +
997 * Default displays 980 1199
999 * Small tablets and large phones 481 767
1003 @media (min-width: 1200px) and (max-width: 1600px) {
1004 #course-category-listings.columns-3 {
1005 background-color: $body-bg;
1013 #category-listing > div,
1014 #course-listing > div,
1015 #course-detail > div {
1016 background-color: $body-bg;
1026 @media (max-width: 1199px) {
1027 #course-category-listings.columns-2,
1028 #course-category-listings.columns-3 {
1040 .page-settings-menu .menubar > a > .icon {
1046 .activity-navigation {
1048 align-items: center;
1050 #prev-activity-link,
1051 #next-activity-link {
1052 white-space: pre-wrap;
1056 .automatic-completion-conditions {
1062 // These are the new styles for the renewed course UI in isssue MDL-71691
1063 // once the old course renderers are removed in MDL-72656, all css related
1064 // to activities and sections above this commend needs to be reviewed an
1065 // possibly removed.
1067 /* Variables definition*/
1069 $activity-border-radius: 1rem !default;
1070 $activity-border-width: 2px !default;
1071 $activity-hover-border-color: $primary !default;
1072 $divider-color: $gray-300 !default;
1073 $divider-width: 2px !default;
1074 $divider-hover-color: $primary !default;
1076 /* Functions/Mixins definition */
1078 // Activity completion button custom styling mixin.
1079 @mixin completion-button() {
1081 @include button-variant($white, $gray-400, $gray-600);
1082 min-height: map-get($iconsizes, 5);
1084 @include border-radius();
1089 @each $color, $value in $theme-colors {
1091 $bg-color: theme-color-level($color, $alert-bg-level);
1092 @include button-variant($bg-color, $bg-color, $value);
1093 color: theme-color-level($color, $alert-color-level);
1095 color: color-yiq($value);
1101 /* Section Expand all/Collapse all */
1103 .section-collapsemenu {
1123 /* Course section */
1127 margin-top: map-get($spacers, 3);
1128 // Custom styles for course sections while editing.
1130 margin-top: map-get($spacers, 2);
1134 padding: map-get($spacers, 3);
1135 border: $border-width solid $border-color;
1136 @include border-radius($activity-border-radius);
1141 background-color: $gray-100;
1148 text-decoration: none;
1152 .sectionbadges .badge {
1153 margin-left: map-get($spacers, 2);
1156 .course-section-header.draggable {
1160 .section_action_menu {
1161 .dropdown-toggle::after {
1167 // Add rounded borders to images.
1169 @include border-radius($activity-border-radius);
1173 // Availability styles for both section and activities.
1175 margin-top: map-get($spacers, 2);
1176 padding: map-get($spacers, 1) map-get($spacers, 3);
1177 background-color: $gray-200;
1178 @include font-size($small-font-size);
1179 @include border-radius($activity-border-radius);
1182 @include border-radius();
1185 background-color: $gray-400;
1189 margin-right: map-get($spacers, 1);
1195 // Override '.btn.btn-icon' styles from buttons.scss to make action menu buttons smaller.
1196 .action-menu .btn.btn-icon {
1197 height: map-get($iconsizes, 5);
1198 width: map-get($iconsizes, 5);
1199 @include border-radius();
1202 .section-summary-activities {
1209 .section-summary-activities + .section {
1210 border-top: $border-width solid $border-color;
1211 margin-top: map-get($spacers, 3) !important; // stylelint-disable-line declaration-no-important
1212 padding-top: map-get($spacers, 3) !important; // stylelint-disable-line declaration-no-important
1215 .section_goto .icon {
1216 font-size: $font-size-lg;
1221 // Course 'add section' button.
1223 @include border-radius($activity-border-radius);
1224 border: $divider-width dashed $border-color;
1226 font-size: $font-size-sm;
1230 background-color: $primary-light-background;
1231 border: $divider-width solid $primary;
1236 /* Single section page specific styles */
1239 // Revert main section's styles.
1240 > ul > .course-section {
1241 &.hidden .section-item {
1242 background-color: inherit;
1251 /* Re-style ordered list in course content */
1252 .course-content .activity-altcontent {
1264 /* Activity cards */
1269 padding-top: map-get($spacers, 1);
1270 margin-top: map-get($spacers, 1);
1271 border-top: $border-width solid $border-color;
1272 // Custom styles for activity while editing.
1274 // Remove activity top border and spacing, while editing a separator is displayed.
1284 background-color: $white;
1289 background-color: $gray-100;
1290 .activityiconcontainer,
1292 mix-blend-mode: multiply;
1295 // Custom styles for activity cards while editing.
1298 border: $activity-border-width solid transparent;
1299 @include border-radius($activity-border-radius);
1305 border: $activity-border-width solid $activity-hover-border-color;
1306 box-shadow: $box-shadow-sm;
1307 .activityiconcontainer,
1309 mix-blend-mode: multiply;
1314 // Activity card grid layout.
1317 align-items: center;
1318 grid-template-columns: min-content 1fr min-content min-content min-content;
1319 grid-template-rows: 1fr repeat(5, min-content);
1320 grid-template-areas:
1321 "icon name groupmode completion actions"
1322 "icon visibility groupmode completion actions"
1323 "icon dates groupmode completion actions"
1324 "icon altcontent altcontent altcontent altcontent"
1325 "icon afterlink afterlink afterlink afterlink"
1326 "icon availability availability availability availability";
1327 @include media-breakpoint-down(xs) {
1328 grid-template-columns: min-content 1fr min-content min-content min-content;
1329 grid-template-rows: 1fr repeat(4, min-content);
1330 grid-template-areas:
1332 "icon visibility actions"
1334 "groupmode groupmode groupmode"
1335 "completion completion completion"
1336 "altcontent altcontent altcontent"
1337 "afterlink afterlink afterlink"
1338 "availability availability availability";
1341 // Activity card specific grid layout for activities without name.
1342 .activity-grid.noname-grid {
1343 grid-template-columns: min-content 1fr min-content min-content;
1344 grid-template-areas:
1345 "visibility groupmode completion actions"
1346 "altcontent altcontent altcontent altcontent"
1347 "afterlink afterlink afterlink afterlink"
1348 "availability availability availability availability";
1349 @include media-breakpoint-down(xs) {
1350 grid-template-columns: 1fr min-content;
1351 grid-template-areas:
1352 "visibility actions"
1353 "altcontent altcontent"
1354 "groupmode groupmode"
1355 "afterlink afterlink"
1356 "completion completion"
1357 "availability availability";
1374 @include font-size($small-font-size);
1378 column-gap: 0.75rem;
1379 @include media-breakpoint-down(xs) {
1380 margin-top: map-get($spacers, 2);
1383 .activity-name-area {
1385 // Prevent bootstrap strech-link from covering the inplace editable button using z-index.
1388 margin-left: map-get($spacers, 2);
1390 .inplaceeditable .quickeditlink {
1393 margin-left: map-get($spacers, 2);
1398 font-weight: normal;
1399 @include font-size($small-font-size);
1405 .activity-completion {
1406 grid-area: completion;
1408 // Re-style completion buttons (mark as done & dropdown).
1411 @include completion-button();
1413 @include media-breakpoint-down(xs) {
1415 margin-top: map-get($spacers, 2);
1420 .completion-dialog {
1422 font-size: $font-size-sm;
1425 font-size: $font-size-sm;
1426 width: $font-size-sm;
1427 height: $font-size-sm;
1428 margin-right: map-get($spacers, 1);
1431 @include border-radius();
1434 text-decoration: none;
1436 background-color: $gray-200;
1442 .activity-groupmode-info {
1443 grid-area: groupmode;
1445 .groupmode-information {
1446 height: map-get($iconsizes, 5);
1447 width: map-get($iconsizes, 5);
1448 @include border-radius();
1450 .groupmode-icon-info {
1453 @include media-breakpoint-down(xs) {
1455 margin-top: map-get($spacers, 2);
1456 padding-top: map-get($spacers, 2);
1457 border-top: $border-width solid $border-color;
1458 .groupmode-information {
1461 padding: 0 map-get($spacers, 2);
1463 .groupmode-icon-info {
1466 // Disable v-parent-focus behaviour on small devices to always show the groupmode button.
1469 visibility: visible;
1475 grid-area: visibility;
1477 font-weight: normal;
1486 .activity-altcontent {
1487 grid-area: altcontent;
1488 margin-top: map-get($spacers, 1);
1489 &.activity-description {
1490 margin-top: map-get($spacers, 2);
1491 padding-top: map-get($spacers, 2);
1492 border-top: $border-width solid $border-color;
1493 @include font-size($small-font-size);
1495 // Add rounded borders to images.
1497 @include border-radius($activity-border-radius);
1501 .activity-availability {
1502 grid-area: availability;
1505 .activity-afterlink {
1506 grid-area: afterlink;
1507 margin-top: map-get($spacers, 2);
1508 padding-top: map-get($spacers, 2);
1509 border-top: $border-width solid $border-color;
1517 .section .draggable .activity-item .dragicon {
1527 margin: map-get($spacers, 2) map-get($spacers, 1);
1528 border-top: $divider-width dashed $divider-color;
1533 transition: visibility 0.1s;
1535 background: linear-gradient(transparent 40%, $white 40%, $white 60%, transparent 60%);
1537 background: linear-gradient(transparent 40%, $gray-100 40%, $gray-100 60%, transparent 60%);
1543 visibility: visible;
1557 visibility: visible;
1561 visibility: visible;
1564 // Style the hr divider when the "Add content" button is hovered.
1565 &:has(.btn.add-content:hover) {
1567 border-color: $divider-hover-color;
1572 // These styles will make the activity and section dividers buttons visible (but still without opacity) so
1573 // buttons can be keyboard focusable.
1574 .activity:focus-within + .activity .divider .divider-content,
1575 .course-section-header:focus-within + .content .section .activity:first-child .divider .divider-content,
1576 .content .section .activity:focus-within .divider .divider-content,
1577 .course-content:focus-within .changenumsections .divider .divider-content {
1578 visibility: visible;
1581 // Hide last section "Add section". It will rely on the course format general "Add section" button.
1582 .course-content ul.topics > li:last-child .changenumsections {
1586 // Custom buttons for dividers.
1590 @include border-radius($rounded-pill);
1591 font-size: $font-size-sm;
1593 color: theme-color-level("primary", $alert-color-level);
1594 background-color: theme-color-level("primary", $alert-bg-level);
1597 color: color-yiq($primary);
1598 background-color: $primary;
1611 display: none !important; // stylelint-disable-line declaration-no-important
1613 .section:not(:first-child) {
1614 margin-top: map-get($spacers, 4);
1617 margin-top: map-get($spacers, 2);
1619 padding-top: map-get($spacers, 2);
1620 border-top: $divider-width dashed $divider-color;
1622 margin-top: map-get($spacers, 4);
1631 .course-section-header .bulkselect {
1636 @include media-breakpoint-down(sm) {
1643 /* Activity completion */
1645 .defaultactivitycompletion-item {
1648 text-decoration: none;
1656 /* Home page course specific styles */
1659 // Hide the first activity top border.
1660 .activity:first-of-type hr {
1664 margin-bottom: map-get($spacers, 4);
1665 @include border-radius();