/* Styles for content built in Elementor: its widgets' defaults, and the named
   classes editors put on a widget instead of writing CSS into it.

   WHY THIS FILE EXISTS. Until 8 Oct 2026 the site carried 374 snippets of
   Custom CSS written into individual Elementor widgets (Advanced, Custom CSS)
   and five more in page settings, the same 31 rules pasted again and again,
   plus four rules in Customiser Additional CSS before that. None of it was in
   this repo, so nobody could diff it, and a fix to one copy left the others
   behind. Every rule that was still in use now lives here ONCE, as a class
   (catalogue below), and the widgets carry the class name in Advanced, CSS
   Classes. tools/data-changes/2026-10-08-elementor-custom-css-to-classes.php
   did the swap and lists which rule became which class.

   THE RULE FOR EDITORS. Never type CSS into a widget's Custom CSS box or into
   Site Settings Custom CSS. If no class here does what a design needs, the
   class is added to this file in the repo first. The Elementor kit (Site
   Settings) still owns colours, type and button defaults; this file owns what
   the kit has no control for.

   SPECIFICITY. A class rule is written `.elementor .elementor-element.mk-x`,
   (0,3,0), which is what the widget Custom CSS it replaces compiled to
   (`.elementor-636 .elementor-element.elementor-element-abc123`). This file
   loads after the page's own post CSS, so a tie goes to the class. Where the
   original carried !important, so does the class; nothing was strengthened.

   NOT HERE: anything that styles OUR markup belongs in that component's
   stylesheet (nav.css, listing.css, faculty.css, forms.css and the rest). */


/* -------------------------------------------------------------------------
   Elementor defaults the kit has no control for
   ---------------------------------------------------------------------- */

/* Elementor renders button text inside a span that centres by default, which
   centres the second line of any button whose label wraps. */
.elementor-button span{text-align:left}

/* Below the kit's tablet breakpoint the default button padding is wide enough
   that two word labels wrap on a phone. */
@media (max-width:991px){
	.elementor-button{padding:15px}
}

/* Hello Elementor's reset leaves b and strong at the browser default, which
   renders as 600 against Inter's weight set and reads as barely bolder than
   the body text around it. */
b,strong{font-weight:700}

/* A superscript inside an icon list item (the 1st, 2nd of a date) set the
   line's height and pushed the item out of line with its neighbours. Was
   pasted into five widgets unscoped, so it already applied page wide there. */
.elementor-icon-list-text > sup{line-height:12px!important}

/* LINKS INSIDE ICON LISTS take the list's own colour, not Hello's.
   Hello Elementor's reset.css paints every <a> #CC3366. An icon list sets its
   colour on .elementor-icon-list-text, so a link that a dynamic tag writes
   INSIDE that span (the faculty loop's school, a term link, rel="tag") keeps
   the reset's pink while the plain item beside it is the right blue. Seen on
   the school pages' Lecturers & Team carousel, 28 Sept 2026. Underline on
   hover so it still reads as a link. */
.elementor-widget-icon-list .elementor-icon-list-text a{
	color:inherit;
	text-decoration:none
}
.elementor-widget-icon-list .elementor-icon-list-text a:hover,
.elementor-widget-icon-list .elementor-icon-list-text a:focus-visible{
	color:inherit;
	text-decoration:underline;
	text-underline-offset:3px
}

/* A Shortcode widget whose shortcode prints nothing still takes a slot in its
   container, so the gaps either side of it add up to a visible hole. Ours
   print nothing on purpose when there is nothing to show (no accreditations,
   no catch all sections), so the widget goes with them. :empty means no
   children and no text at all; a placeholder a script fills is not empty. */
.elementor-widget-shortcode:has(.elementor-shortcode:empty){display:none}


/* -------------------------------------------------------------------------
   Pagination: Elementor's archive and loop pagination, matched to ours
   ---------------------------------------------------------------------- */

/* Elementor renders `<nav class="elementor-pagination">` with `.page-numbers`
   children, an `<a>` per page and a `<span class="current">` for the one you
   are on. The kit can set a colour and a font but not a shape, so the news
   archive drew a third version of a control the programme grid and the slider
   already agree on. Matched to .mk-pager-num in pager.css: 40px, 2px border,
   fully rounded, filled in the CTA cyan for the current page. The prev and
   next arrows are left alone; Elementor draws them as text.

   Scoped to .elementor-pagination so nothing else that uses WordPress's
   .page-numbers class is dragged along with it.

   THE !important STAYS for one reason: the loop grid's own Pagination style
   controls write colours and padding at (0,3,0) or more from the widget, and
   an editor can change them at any time. This keeps the control one shape
   whatever is set there. (It used to also beat Custom CSS pasted into the
   news, events and podcast grids; that was removed on 8 Oct 2026.) */
.elementor-pagination{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:4px}
.elementor-pagination .page-numbers{
	display:flex!important;align-items:center;justify-content:center;box-sizing:border-box;
	min-width:40px!important;height:40px!important;padding:0 10px!important;
	border:2px solid #1C3687!important;border-radius:999px!important;
	background:#fff!important;color:#1C3687!important;
	font-size:14px;font-weight:700;line-height:1;text-decoration:none;
	transition:background-color .12s ease,color .12s ease
}
.elementor-pagination a.page-numbers:hover,
.elementor-pagination a.page-numbers:focus{background:#1C3687!important;color:#fff!important}
.elementor-pagination a.page-numbers:focus-visible{outline:2px solid #1C3687;outline-offset:2px}
.elementor-pagination .page-numbers.current{background:#54D3EB!important;border-color:#54D3EB!important;color:#1A134A!important}
/* The ellipsis is not a button and should not be drawn as one. */
.elementor-pagination .page-numbers.dots{border-color:transparent!important;background:none!important;min-width:0!important;padding:0 2px!important;color:#5a6b85!important}

/* Font size only. The size is not reduced on phones: the !important above
   always beat the 36px this once tried, so 40px is what phones have shown
   all along, and it is the better touch target. */
@media (max-width:560px){
	.elementor-pagination .page-numbers{font-size:13px}
}
@media (prefers-reduced-motion:reduce){
	.elementor-pagination .page-numbers{transition:none}
}


/* -------------------------------------------------------------------------
   Event buttons
   ---------------------------------------------------------------------- */

/* A registration button on an event that has already happened.

   The class is added server side by milpark_event_disable_past_register() in
   event-dates.php, which also removes the href and marks the control
   aria-disabled, so this is presentation only. Dimming alone would leave a
   link that still works on Enter.

   not-allowed rather than default on the cursor, because the control still
   looks like a button and the pointer should say why nothing happens. */
.elementor-button.mk-event-cta--past{
	opacity:.45;
	cursor:not-allowed;
	filter:grayscale(35%);
	pointer-events:none
}
.mk-event-past-note{
	margin:10px 0 0;
	text-align:center;
	font-size:14px;
	line-height:1.5;
	color:#5a6b85
}


/* -------------------------------------------------------------------------
   Carousels
   ---------------------------------------------------------------------- */

/* TEAM CAROUSELS ON PHONES (reviewer, 29 Sept 2026: "job titles break mid
   word and the last card is cut off"). Two causes, both corrected here for
   phones only:
   1. .mk-swiper-bleed (below) lets cards bleed to the viewport on desktop.
      On a phone that bleed is a third card sliced by the screen edge, so
      below 768px each loop carousel's track is clipped to its own box again.
      (0,5,0) outranks the class rule's (0,4,0).
   2. The loop item text computes to word-break:break-word, which breaks a
      word anywhere once the column is narrow. Words now wrap whole and
      hyphenate only when a single word cannot fit. */
@media (max-width:767px){
	.elementor .elementor-widget-loop-carousel.elementor-widget .swiper.elementor-loop-container{overflow:hidden!important}
	.elementor-widget-loop-carousel .swiper-slide :is(h1,h2,h3,h4,h5,h6,p,a,span,li){
		word-break:normal;
		overflow-wrap:break-word;
		-webkit-hyphens:auto;
		hyphens:auto
	}
}


/* =========================================================================
   CLASS CATALOGUE

   Put these in a widget's Advanced, CSS Classes field. Several can be
   combined with a space. Each one says which widget it is meant for.
   ====================================================================== */

/* mk-p-flush (Text Editor, or a container of them): no space under
   paragraphs. For one line labels and stacked short lines. */
.elementor .elementor-element.mk-p-flush p{margin-bottom:0}

/* mk-p-last-flush (Text Editor): normal paragraph spacing, but none under
   the last one, so the widget ends on the text rather than on a gap. */
.elementor .elementor-element.mk-p-last-flush p:last-of-type{margin-bottom:0}

/* mk-links-underline (Text Editor): underline every link in the text. */
.elementor .elementor-element.mk-links-underline a{text-decoration:underline}

/* mk-ol-spaced (Text Editor): space under a list, numbered or not, so text
   after it does not run on from the last item (bullets added 15 Oct 2026,
   for Careers). */
.elementor .elementor-element.mk-ol-spaced :is(ol,ul){margin-bottom:14px}

/* mk-img-curve-left, mk-img-curve-right, mk-img-curve-corner (Image): the
   site's curved image edge, on the side named, from 768px up. On phones all
   three become the same curve along the bottom edge, because the image sits
   above its text there. */
@media (min-width:768px){
	.elementor .elementor-element.mk-img-curve-left img{display:block;clip-path:ellipse(75% 100% at 75% 50%)}
	.elementor .elementor-element.mk-img-curve-right img{display:block;clip-path:ellipse(75% 100% at 25% 50%)}
	.elementor .elementor-element.mk-img-curve-corner img{display:block;clip-path:ellipse(82% 85% at 85% 0%)}
}
@media (max-width:767px){
	.elementor .elementor-element:is(.mk-img-curve-left,.mk-img-curve-right,.mk-img-curve-corner) img{display:block;clip-path:ellipse(150% 100% at 50% 0%)}
}

/* mk-flip-x (Image): mirror the image left to right. */
.elementor .elementor-element.mk-flip-x img{transform:scaleX(-1)}

/* mk-rotate-180 (any widget): turn it upside down. The home hero's third
   slide uses it on its graphic. */
.elementor .elementor-element.mk-rotate-180{transform:rotate(180deg)}

/* mk-inset-wide (Container): the hero split layout's left inset, which grows
   with the screen so the copy lines up with the page content on wide
   monitors. The two !important widths are as they were written. */
@media (min-width:1201px){
	.elementor .elementor-element.mk-inset-wide{padding-left:clamp(60px,calc((100vw - 1440px) / 2 + 60px),300px)}
}
@media (min-width:1600px){
	.elementor .elementor-element.mk-inset-wide{padding-left:clamp(0px,calc((100vw - 1440px) / 2),240px)!important}
}
@media (min-width:1921px){
	.elementor .elementor-element.mk-inset-wide{padding-left:clamp(0px,calc((100vw - 1440px) / 2),570px)!important}
}

/* mk-inset-header (Container): from 767px, text lines up with the header's
   content box, the same 1560px container and fluid gutter nav.css uses (the
   header width contract in HANDOFF). Below 767px the container's own mobile
   padding applies. Was .hero-container-padding in the child theme and a copy
   pasted into the Corporate Learning hero. */
@media (min-width:767px){
	.elementor .elementor-element.mk-inset-header{
		padding-left:calc(max(0px,(100vw - 1560px) / 2) + clamp(20px,(100vw - 1200px) / 4 + 20px,60px));
		padding-right:40px
	}
}

/* mk-overflow-visible (Container): let what is inside paint outside the
   container's box instead of being cut at its edge. */
.elementor .elementor-element.mk-overflow-visible{overflow:visible!important}

/* mk-push-bottom (Container inside a card): sit at the bottom of the card,
   so the buttons of cards in a row line up whatever the text above them. */
.elementor .elementor-element.mk-push-bottom{margin-top:auto;padding-top:8px}

/* mk-h1-pull-up (Container holding a hero H1): on small phones, pull the H1
   up into the space above it. Used on the home, Faculty and Programmes
   heroes. */
@media (max-width:677px){
	.elementor .elementor-element.mk-h1-pull-up h1{margin-top:-6vw}
}

/* mk-h1-white-tablet (Heading): a white H1 at tablet and phone widths. The
   home hero's second slide uses it, where the title sits on the image. */
@media (max-width:991px){
	.elementor .elementor-element.mk-h1-white-tablet h1{color:#FFF!important}
}

/* mk-h1-fit-image (Heading): a hero H1 that scales with the viewport from
   768px, so it stays clear of the person in a full width background photo.
   The Immersive Online hero's fixed 100px (80px on tablet) ran into her face
   at every width from 820 to 1920 (Leroy, 14 Oct 2026). Phones keep their own
   size, where the hero stacks. The line height follows the size (the widget's
   is a fixed 96px). One class more than the widget's own rule. */
@media (min-width:768px){
	.elementor .elementor-element.elementor-widget-heading.mk-h1-fit-image .elementor-heading-title{font-size:clamp(40px,5vw,80px);line-height:.96}
}

/* mk-swiper-bleed (Image Carousel or Loop Carousel): slides run past the
   carousel's box to the edge of the screen instead of being cut at it.
   Clipped again on phones, see Carousels above. */
.elementor .elementor-element.mk-swiper-bleed :is(.swiper,.elementor-image-carousel-wrapper){overflow:visible!important}

/* mk-logo-marquee (Image Carousel): the partner logo strip. Glides at an
   even speed instead of easing between slides, and every logo fits the same
   90px band with its white background dropped. */
.elementor .elementor-element.mk-logo-marquee .swiper-wrapper{transition-timing-function:linear!important}
.elementor .elementor-element.mk-logo-marquee img{max-height:90px;object-fit:contain!important;mix-blend-mode:multiply}

/* mk-dots-pill (Image Carousel): the active dot stretches into a pill. */
.elementor .elementor-element.mk-dots-pill .swiper-pagination-bullet-active{width:50px;border-radius:5px}
.elementor .elementor-element.mk-dots-pill .swiper-pagination{bottom:6px}

/* mk-btn-split (Button, or a container of buttons): label left, icon right,
   pushed to the two ends of the button. */
.elementor .elementor-element.mk-btn-split .elementor-button-content-wrapper{justify-content:space-between!important}

/* mk-btn-wide (Button): from 991px, at least 340px wide and 46px tall, so a
   column of buttons lines up. Add mk-btn-fixed to cap it at 340px too. */
@media (min-width:991px){
	.elementor .elementor-element.mk-btn-wide a{min-height:46px;min-width:340px}
	.elementor .elementor-element.mk-btn-fixed a{max-width:340px}
}

/* mk-btn-cta (Button): a long call to action up to 570px wide, like the
   home page's Explore Our MBA Programme. */
.elementor .elementor-element.mk-btn-cta a{min-height:46px;max-width:570px}
@media (max-width:991px){
	.elementor .elementor-element.mk-btn-cta a{padding-left:10px;padding-right:10px}
}

/* mk-icon-box-tight (Icon Box): icon at its own width and the title pulled
   up to it, for the school rows on Schools and Research. */
.elementor .elementor-element.mk-icon-box-tight svg{width:auto}
@media (min-width:991px){
	.elementor .elementor-element.mk-icon-box-tight .elementor-icon-box-title{margin-top:-1px}
}
@media (max-width:991px){
	.elementor .elementor-element.mk-icon-box-tight .elementor-icon-box-title{margin-top:-8px}
}

/* mk-school-tile (Icon Box): the school tiles on the study pages, three
   across. Each title is written as two lines (School of / Commerce, School
   of Professional / Accounting and so on), and its size follows the tile's
   own width so the longer line always fits: 8.8% of the tile's text box, 32px
   at most, 22px at least. At 32px fixed, "School of Professional" measured
   350px in a 327px box on 28 Sept 2026 and Accounting fell to a third line.
   !important because the Icon Box writes its own title size per breakpoint
   at (0,3,0) or more, and the size is the whole point. Moved from the child
   theme on 8 Oct 2026. */
.elementor .elementor-element.mk-school-tile{container-type:inline-size}
.elementor .elementor-element.mk-school-tile .elementor-icon-box-title{font-size:clamp(22px,8.8cqi,32px)!important;line-height:1.18!important}
