/*
 * social-embeds.css -- the styled floor for the archive's social embeds.
 *
 * WHY THIS EXISTS
 * The import left ~23.5k articles carrying live `<blockquote class="twitter-tweet">`
 * markup with no script to hydrate it. koi 3.31.0 has zero `.twitter-tweet` rules, so
 * those blockquotes currently inherit `modules/default/content-block.css`'s generic
 * pull-quote treatment: 720px wide, italic, grey, and with the tweet's own permalink
 * rendered as unstyled grey text that does not read as a link at all. So the tweet
 * looks like a misformatted editorial quote rather than a tweet.
 *
 * This sheet specialises that inherited card instead of inventing a new one, and it
 * is the state seen by non-consenting readers AND by embeds whose post has since
 * been deleted -- i.e. it is a permanent presentation layer, not a loading spinner.
 * Today's raw text stays exactly as crawlable as it is now; nothing here changes
 * markup.
 *
 * WIDTH IS FUNCTIONAL, NOT TASTE
 * 550px is X's own rendered widget width. Matching it means the blockquote -> iframe
 * swap on hydration does not jump horizontally.
 *
 * EVERY RULE IS SCOPED TO THE UNHYDRATED STATE
 * so that nothing here can leak onto a hydrated widget, whichever way the installed
 * version of the platform script marks or replaces the original blockquote. The four
 * platforms each do it differently, and the discriminator is chosen per platform
 * rather than guessed -- see each section. Three use an explicit `:not(...)`;
 * Bluesky cannot, because it reuses the blockquote's own class on the node that
 * replaces it, so there the `blockquote` element qualifier IS the discriminator.
 *
 * Specificity note: `.content-block blockquote` (0,1,1) and `.content-block
 * blockquote p` (0,1,2) are what we are overriding. `blockquote.twitter-tweet:not()`
 * is (0,2,1) and its `> p` form (0,2,2), so these win on specificity without a
 * single !important.
 *
 * ! That holds for X and TikTok. It does NOT hold for Instagram, whose embed code
 * ships a long inline `style` on the blockquote and on its attribution line, and an
 * inline style cannot be beaten from a stylesheet by any amount of specificity. The
 * Instagram section therefore uses !important, on decoration only -- read the note
 * there before adding more.
 *
 * NO-JS SAFETY
 * js/social-embeds.js adds a consent panel under each card, and that panel is the
 * only thing on the page that can load an embed. So this sheet must never hide
 * anything the panel would have replaced: with JS off, whatever is left visible here
 * IS the reader's entire experience of that embed. Hence only the platforms' own
 * empty loading skeletons are hidden, never a line carrying text or a link.
 *
 * Enqueued by ig-includes/social-embeds.php, only on singular views that carry embed
 * markup. Standalone module, versioned by filemtime() -- deliberately NOT registered
 * in any minify stylesheet list, so there is no stale prod blob to force-reminify and
 * no versionless @import cached for a year.
 */

/* ===========================================================================
 * X (Twitter). Discriminator: `.twitter-tweet-rendered`, which widgets.js sets on
 * SUCCESS only -- so a deleted tweet keeps the card, which is the right outcome.
 * ======================================================================== */

/* The card. */
blockquote.twitter-tweet:not(.twitter-tweet-rendered) {
	box-sizing: border-box;
	max-width: 550px;
	margin: 24px 0;
	padding: 14px 18px 12px;
	border: 1px solid #e3e5ee;
	border-left: 3px solid #7464de;
	border-radius: 0 8px 8px 0;
	background: #fafafa;
	font-size: 15px;
	line-height: 1.5;
}

/* Tweet text is speech, so it reads upright and in body colour -- not as the
   site's italic grey pull-quote. */
blockquote.twitter-tweet:not(.twitter-tweet-rendered) > p {
	margin: 0 0 10px;
	font-style: normal;
	color: #181c27;
}

/* The attribution line -- "-- Author (@handle) <date link>" -- is always the last
   <p> of the blockquote (verified present in 342/342 embeds across a 300-post
   sample). That makes it the card's footer, and its existing permalink the reader's
   route to the tweet, with no markup injected: adding an anchor of our own inside
   the blockquote risks widgets.js's permalink detection, which reads the LAST anchor. */
blockquote.twitter-tweet:not(.twitter-tweet-rendered) > p:last-child {
	margin: 12px 0 0;
	padding-top: 10px;
	border-top: 1px solid #e8eaf2;
	font-size: 13px;
	line-height: 1.45;
	color: #5a6075;
}

/* X mark, decorative: the line already names the author in text, so this carries no
   information of its own and is correctly invisible to assistive tech. */
blockquote.twitter-tweet:not(.twitter-tweet-rendered) > p:last-child::before {
	content: "";
	display: inline-block;
	width: 12px;
	height: 12px;
	margin-right: 7px;
	vertical-align: -1px;
	background: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20fill='%235b3fd6'%20d='M18.244%202.25h3.308l-7.227%208.26%208.502%2011.24H16.17l-5.214-6.817L4.99%2021.75H1.68l7.73-8.835L1.254%202.25H8.08l4.713%206.231zm-1.161%2017.52h1.833L7.084%204.126H5.117z'/%3E%3C/svg%3E") center/contain no-repeat;
}

/* Make the permalink look like the outbound link it has always been. */
blockquote.twitter-tweet:not(.twitter-tweet-rendered) > p:last-child a {
	color: #5b3fd6;
	font-weight: 700;
	text-decoration: none;
}

blockquote.twitter-tweet:not(.twitter-tweet-rendered) > p:last-child a:hover,
blockquote.twitter-tweet:not(.twitter-tweet-rendered) > p:last-child a:focus {
	color: #ff2f8e;
	text-decoration: underline;
}

/* Links inside the tweet body (hashtags, @mentions, t.co media links) are the
   tweet's own, not ours -- keep them readable but quieter than the footer CTA. */
blockquote.twitter-tweet:not(.twitter-tweet-rendered) > p:not(:last-child) a {
	color: #5b3fd6;
	text-decoration: none;
}

blockquote.twitter-tweet:not(.twitter-tweet-rendered) > p:not(:last-child) a:hover,
blockquote.twitter-tweet:not(.twitter-tweet-rendered) > p:not(:last-child) a:focus {
	text-decoration: underline;
}

@media (max-width: 600px) {
	blockquote.twitter-tweet:not(.twitter-tweet-rendered) {
		padding: 12px 14px 10px;
		font-size: 14px;
	}
}

/* ===========================================================================
 * Instagram (~5.3k posts). Discriminator: none needed, and that is not laziness --
 * embed.js REPLACES the blockquote with `<iframe class="instagram-media
 * instagram-media-rendered">`, so an element selector of `blockquote` already
 * excludes the hydrated state. `:not(.instagram-media-rendered)` is kept as belt to
 * that braces, at no cost.
 *
 * WHAT THE READER SEES TODAY, unhydrated: Instagram's loading skeleton -- an anchor
 * full of empty grey boxes standing in for the avatar, the image and the caption --
 * followed by the real attribution line ("Una publicacion compartida de X (@handle)")
 * in 14px Arial at #c9c8cd, centred and `white-space: nowrap`. It reads as a page
 * that failed to load, which is worse than the tweet case, where at least the text
 * of the tweet is there.
 *
 * !!! THIS SECTION USES !important AND HAS TO. The embed code Instagram ships puts
 * `background`, `border`, `border-radius`, `margin`, `padding` and `width` in an
 * inline style attribute on the blockquote, and `color`, `font-family`,
 * `text-align`, `white-space` and `overflow` inline on the attribution line. Inline
 * styles outrank every selector in this file no matter how specific, so decoration
 * that the card must control is forced, and nothing else is. Two deliberate
 * omissions, so do not "finish the job" by adding them:
 *   - max-width / min-width / width are LEFT to Instagram. They are what embed.js
 *     sizes the iframe against, so overriding them would change the hydrated embed,
 *     not just the card.
 *   - the skeleton is hidden with plain `display: none` -- display is not among the
 *     inline properties, so it needs no !important. If that ever stops working,
 *     check whether Instagram changed its embed code rather than adding !important.
 * ======================================================================== */

blockquote.instagram-media:not(.instagram-media-rendered) {
	box-sizing: border-box;
	margin: 24px 0 !important;
	padding: 14px 18px 12px !important;
	border: 1px solid #e3e5ee !important;
	border-left: 3px solid #7464de !important;
	border-radius: 0 8px 8px 0 !important;
	background: #fafafa !important;
	box-shadow: none !important;
	font-size: 15px;
	line-height: 1.5;
}

/* The skeleton: an anchor wrapping ~12 empty grey divs and the words "Ver esta
   publicacion en Instagram". It is pure loading furniture for a load that is never
   coming, and it carries no information -- the attribution line below it names the
   author and links the same post. Safe to hide with no JS present, which is the
   test every hidden thing in this file has to pass. */
blockquote.instagram-media:not(.instagram-media-rendered) > div > a {
	display: none;
}

/* Instagram's inline padding on the inner wrapper would double up with the card's. */
blockquote.instagram-media:not(.instagram-media-rendered) > div {
	padding: 0 !important;
}

/* The attribution line is the card's whole content, so it stops being a caption and
   becomes the text: readable colour, allowed to wrap, left-aligned like the rest of
   the article. */
blockquote.instagram-media:not(.instagram-media-rendered) > div > p {
	margin: 0 !important;
	padding: 0 !important;
	overflow: visible !important;
	color: #5a6075 !important;
	font-family: inherit !important;
	font-size: 14px !important;
	line-height: 1.45 !important;
	text-align: left !important;
	white-space: normal !important;
}

blockquote.instagram-media:not(.instagram-media-rendered) > div > p::before {
	content: "";
	display: inline-block;
	width: 13px;
	height: 13px;
	margin-right: 7px;
	vertical-align: -2px;
	background: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20fill='%235b3fd6'%20d='M12%202.163c3.204%200%203.584.012%204.85.07%203.252.148%204.771%201.691%204.919%204.919.058%201.265.069%201.645.069%204.849%200%203.205-.012%203.584-.069%204.849-.149%203.225-1.664%204.771-4.919%204.919-1.266.058-1.644.07-4.85.07-3.204%200-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849%200-3.204.013-3.583.07-4.849.149-3.227%201.664-4.771%204.919-4.919%201.266-.057%201.645-.069%204.849-.069zm0-2.163c-3.259%200-3.667.014-4.947.072-4.358.2-6.78%202.618-6.98%206.98-.059%201.281-.073%201.689-.073%204.948%200%203.259.014%203.668.072%204.948.2%204.358%202.618%206.78%206.98%206.98%201.281.058%201.689.072%204.948.072%203.259%200%203.668-.014%204.948-.072%204.354-.2%206.782-2.618%206.979-6.98.059-1.28.073-1.689.073-4.948%200-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0%205.838c-3.403%200-6.162%202.759-6.162%206.162s2.759%206.163%206.162%206.163%206.162-2.759%206.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0%2010.162c-2.209%200-4-1.79-4-4%200-2.209%201.791-4%204-4s4%201.791%204%204c0%202.21-1.791%204-4%204zm6.406-11.845c-.796%200-1.441.645-1.441%201.44s.645%201.44%201.441%201.44c.795%200%201.439-.645%201.439-1.44s-.644-1.44-1.439-1.44z'/%3E%3C/svg%3E") center/contain no-repeat;
}

blockquote.instagram-media:not(.instagram-media-rendered) > div > p a {
	color: #5b3fd6 !important;
	font-family: inherit !important;
	font-weight: 700 !important;
	text-decoration: none !important;
}

blockquote.instagram-media:not(.instagram-media-rendered) > div > p a:hover,
blockquote.instagram-media:not(.instagram-media-rendered) > div > p a:focus {
	color: #ff2f8e !important;
	text-decoration: underline !important;
}

@media (max-width: 600px) {
	blockquote.instagram-media:not(.instagram-media-rendered) {
		padding: 12px 14px 10px !important;
	}
}

/* ===========================================================================
 * TikTok (~190 posts). Discriminator: `data-relevo-embed="on"`, stamped by
 * js/social-embeds.js once the iframe actually lands -- because TikTok is the one platform here
 * that keeps its blockquote and renders the iframe INSIDE it, so there is no vendor
 * class to key off and `:has(iframe)` would take the whole rule down with it on any
 * browser that does not support it.
 *
 * WHAT THE READER SEES TODAY, unhydrated: the caption, the author handle, a run of
 * hashtags and the sound credit, all as plain body text with no indication that a
 * video belongs there.
 *
 * koi is the only stylesheet on the site that already has an opinion here:
 *   .detail-code .code[data-video-origin="tiktok"] .tiktok-embed
 *     { max-width: 550px !important; margin: 0 auto }
 * The max-width is the same 550 the other cards use, so it is left alone. The margin
 * is the one thing that must be beaten, and at (0,3,1) it needs a selector carrying
 * the wrapper -- hence the second rule below, which is scoped to archive markup on
 * purpose: an editor-pasted TikTok has no `.code` wrapper and gets the plain rule.
 * ======================================================================== */

blockquote.tiktok-embed:not([data-relevo-embed]) {
	box-sizing: border-box;
	max-width: 550px;
	margin: 24px 0;
	padding: 14px 18px 12px;
	border: 1px solid #e3e5ee;
	border-left: 3px solid #7464de;
	border-radius: 0 8px 8px 0;
	background: #fafafa;
	font-size: 15px;
	line-height: 1.5;
}

.code[data-video-origin="tiktok"] blockquote.tiktok-embed:not([data-relevo-embed]) {
	margin: 24px auto;
}

blockquote.tiktok-embed:not([data-relevo-embed]) > section {
	display: block;
	font-style: normal;
	color: #181c27;
}

/* The author handle opens the card, so it gets the weight. */
blockquote.tiktok-embed:not([data-relevo-embed]) > section > a:first-child {
	display: inline-block;
	margin-bottom: 6px;
	color: #181c27;
	font-weight: 700;
	text-decoration: none;
}

blockquote.tiktok-embed:not([data-relevo-embed]) > section > a:first-child::before {
	content: "";
	display: inline-block;
	width: 13px;
	height: 13px;
	margin-right: 7px;
	vertical-align: -2px;
	background: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20fill='%235b3fd6'%20d='M19.59%206.69a4.83%204.83%200%200%201-3.77-4.25V2h-3.45v13.67a2.89%202.89%200%200%201-2.88%202.5%202.89%202.89%200%200%201-2.89-2.89%202.89%202.89%200%200%201%202.89-2.89c.28%200%20.54.04.79.1V9.01a6.33%206.33%200%200%200-.79-.05%206.34%206.34%200%200%200-6.34%206.34%206.34%206.34%200%200%200%206.34%206.34%206.34%206.34%200%200%200%206.33-6.34V8.69a8.18%208.18%200%200%200%204.78%201.52V6.74a4.85%204.85%200%200%201-1.01-.05z'/%3E%3C/svg%3E") center/contain no-repeat;
}

/* Hashtags and the sound credit are the post's own metadata, not the caption:
   quieter, and the sound gets its own line so the caption stays readable. */
blockquote.tiktok-embed:not([data-relevo-embed]) > section > a {
	color: #5b3fd6;
	text-decoration: none;
}

blockquote.tiktok-embed:not([data-relevo-embed]) > section > a:hover,
blockquote.tiktok-embed:not([data-relevo-embed]) > section > a:focus {
	text-decoration: underline;
}

blockquote.tiktok-embed:not([data-relevo-embed]) > section > a:last-of-type {
	display: block;
	margin-top: 10px;
	padding-top: 10px;
	border-top: 1px solid #e8eaf2;
	color: #5a6075;
	font-size: 13px;
}

@media (max-width: 600px) {
	blockquote.tiktok-embed:not([data-relevo-embed]) {
		padding: 12px 14px 10px;
		font-size: 14px;
	}
}

/* ===========================================================================
 * Bluesky (8 embeds across 7 posts). Discriminator: `blockquote` + the
 * `[data-bluesky-uri]` attribute. BOTH halves are load-bearing, for two different
 * reasons -- read on before simplifying this selector.
 *
 * !!! READ THIS BEFORE WRITING ANY `.bluesky-embed` RULE. Their embed.js finishes
 * with `embed.replaceWith(container)`, and that container is a
 * `<div class="bluesky-embed">` -- it reuses the SAME class as the blockquote it
 * just destroyed. So unlike X (`.twitter-tweet-rendered`, added on success) and
 * TikTok (our own data-relevo-embed stamp), there is no "rendered" class here to
 * hang a `:not()` on. What separates the two states is that the card is a
 * `blockquote` carrying `data-bluesky-uri` (the attribute their own scan() keys
 * off), and the hydrated container is a `div` carrying neither. A rule written as
 * `.bluesky-embed { }` would hit BOTH and decorate a live iframe with card chrome.
 *
 * !! THE ATTRIBUTE IS ALSO THE SPECIFICITY, which is the part that will bite you.
 * What we are overriding is `.content-block blockquote` (0,1,1) and
 * `.content-block blockquote p` (0,1,2). The X and TikTok cards clear those because
 * their `:not(...)` contributes a class, putting them at (0,2,1)/(0,2,2). Without
 * a `:not()` of its own, a plain `blockquote.bluesky-embed > p` lands at (0,1,2) --
 * a TIE with the inherited pull-quote rule, decided by source order, which this
 * sheet loses. Measured, not reasoned: the first cut of this section rendered the
 * post text and the attribution in the site's italic grey after all, because of
 * exactly that tie. Adding `[data-bluesky-uri]` restores (0,2,1)/(0,2,2) and the
 * card wins, still with no !important anywhere.
 *
 * WHAT THE READER SEES TODAY, unhydrated: three paragraphs of plain text -- the
 * post, a bare "[image or embed]" link where the photo should be, and the
 * "-- Author (@handle) date" attribution -- rendered as the site's generic italic
 * grey pull-quote. Same shape as the X case, so this section is deliberately the X
 * section's twin rather than a new design.
 *
 * 600px, not the 550 used elsewhere: that is the max-width Bluesky's own container
 * carries inline, so the card matches what replaces it and the swap does not jump
 * horizontally. Same reasoning as the 550 above, different number.
 *
 * No !important anywhere, and none is needed -- checked on all 8: the archive
 * blockquote carries `class`, `data-bluesky-cid` and `data-bluesky-uri` and no
 * inline `style` at all, so this is the X situation, not the Instagram one.
 * ======================================================================== */

blockquote.bluesky-embed[data-bluesky-uri] {
	box-sizing: border-box;
	max-width: 600px;
	margin: 24px 0;
	padding: 14px 18px 12px;
	border: 1px solid #e3e5ee;
	border-left: 3px solid #7464de;
	border-radius: 0 8px 8px 0;
	background: #fafafa;
	font-size: 15px;
	line-height: 1.5;
}

/* The post itself is speech: upright, body colour, not the italic grey quote. */
blockquote.bluesky-embed[data-bluesky-uri] > p {
	margin: 0 0 10px;
	font-style: normal;
	color: #181c27;
}

/* The middle paragraph is Bluesky's own stand-in for the photo or link card -- the
   literal text "[image or embed]" wrapped in a link to the post. It is NOT hidden,
   because it is a link and this file's no-JS rule is that nothing carrying a link
   or text may be hidden: with JS off this card is the reader's whole experience of
   the embed, and that link is one of only two routes to the media. It is instead
   made to look like the media affordance it actually is. */
blockquote.bluesky-embed[data-bluesky-uri] > p:not(:first-child):not(:last-child) {
	margin: 0 0 10px;
	font-size: 13px;
}

blockquote.bluesky-embed[data-bluesky-uri] > p:not(:first-child):not(:last-child) a {
	display: inline-block;
	padding: 5px 10px;
	border: 1px solid #e3e5ee;
	border-radius: 6px;
	background: #fff;
	color: #5b3fd6;
	font-weight: 700;
	text-decoration: none;
}

blockquote.bluesky-embed[data-bluesky-uri] > p:not(:first-child):not(:last-child) a::before {
	content: "";
	display: inline-block;
	width: 12px;
	height: 12px;
	margin-right: 6px;
	vertical-align: -1px;
	background: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20fill='%235b3fd6'%20d='M21%2019V5a2%202%200%200%200-2-2H5a2%202%200%200%200-2%202v14a2%202%200%200%200%202%202h14a2%202%200%200%200%202-2zM8.5%2013.5l2.5%203.01L14.5%2012l4.5%206H5l3.5-4.5z'/%3E%3C/svg%3E") center/contain no-repeat;
}

blockquote.bluesky-embed[data-bluesky-uri] > p:not(:first-child):not(:last-child) a:hover,
blockquote.bluesky-embed[data-bluesky-uri] > p:not(:first-child):not(:last-child) a:focus {
	border-color: #b3a5ff;
	color: #ff2f8e;
}

/* Attribution line -- "-- Author (@handle) <date link>" -- is the last <p> in all
   8 embeds, and its date link is the reader's route to the post. Same footer
   treatment as the X card. */
blockquote.bluesky-embed[data-bluesky-uri] > p:last-child {
	margin: 12px 0 0;
	padding-top: 10px;
	border-top: 1px solid #e8eaf2;
	font-size: 13px;
	line-height: 1.45;
	color: #5a6075;
}

/* Butterfly, decorative: the line already names the author in text. */
blockquote.bluesky-embed[data-bluesky-uri] > p:last-child::before {
	content: "";
	display: inline-block;
	width: 13px;
	height: 13px;
	margin-right: 7px;
	vertical-align: -2px;
	background: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20568%20501'%3E%3Cpath%20fill='%235b3fd6'%20d='M123.121%2033.664C188.241%2082.553%20258.281%20181.68%20284%20234.873c25.719-53.192%2095.759-152.32%20160.879-201.209C491.866-1.611%20568-28.906%20568%2058.187c0%2017.393-9.978%20146.093-15.828%20166.989-20.342%2072.677-94.446%2091.208-160.348%2079.986C507.222%20324.424%20536.444%20389.678%20473%20454.933c-120.485%20123.935-173.175-31.103-186.678-70.82-2.477-7.278-3.633-10.681-3.656-7.787-.023-2.894-1.18.509-3.656%207.787-13.505%2039.717-66.195%20194.755-186.68%2070.82-63.444-65.255-34.222-130.509%2081.177-149.771-65.903%2011.222-140.006-7.31-160.342-79.986C7.514%20204.28-2.464%2075.58-2.464%2058.187c0-87.093%2076.135-59.798%20123.121-24.523z'/%3E%3C/svg%3E") center/contain no-repeat;
}

blockquote.bluesky-embed[data-bluesky-uri] > p:last-child a {
	color: #5b3fd6;
	font-weight: 700;
	text-decoration: none;
}

blockquote.bluesky-embed[data-bluesky-uri] > p:last-child a:hover,
blockquote.bluesky-embed[data-bluesky-uri] > p:last-child a:focus {
	color: #ff2f8e;
	text-decoration: underline;
}

/* Links inside the post body are the post's own. */
blockquote.bluesky-embed[data-bluesky-uri] > p:first-child a {
	color: #5b3fd6;
	text-decoration: none;
}

blockquote.bluesky-embed[data-bluesky-uri] > p:first-child a:hover,
blockquote.bluesky-embed[data-bluesky-uri] > p:first-child a:focus {
	text-decoration: underline;
}

@media (max-width: 600px) {
	blockquote.bluesky-embed[data-bluesky-uri] {
		padding: 12px 14px 10px;
		font-size: 14px;
	}
}

/* ===========================================================================
 * The consent panel, built by js/social-embeds.js and inserted AFTER each card
 * (never inside it -- widgets.js reads the last anchor in the blockquote to work out
 * which tweet to render).
 *
 * It is welded to the card above it: every card in this file ends with
 * `margin-bottom: 24px`, and the panel opens with `margin-top: -24px`, so the two
 * read as one object. If you change a card's bottom margin, change this with it.
 *
 * Palette matches ig-includes/cookie-notice.php and
 * modules/shared/archive-video-consent.css (gradient #5b3fd6 -> #ff2f8e, focus ring
 * #b3a5ff) so every consent surface on the site reads as the same thing. The video
 * card is dark because it sits over a poster frame; this one is light because it
 * sits under a light card.
 * ======================================================================== */

.relevo-embed-consent {
	box-sizing: border-box;
	max-width: 550px;
	margin: -24px 0 24px;
	padding: 12px 18px 14px;
	border: 1px solid #e3e5ee;
	border-top: 1px dashed #e3e5ee;
	border-left: 3px solid #7464de;
	border-radius: 0 0 8px 0;
	background: #f2f3f8;
}

/* Follow the card each provider actually renders: Instagram's own inline style caps
   it at 540, Bluesky's at 600, and koi centres TikTok. */
.relevo-embed-consent[data-relevo-provider="instagram"] {
	max-width: 540px;
}

.relevo-embed-consent[data-relevo-provider="bluesky"] {
	max-width: 600px;
}

.relevo-embed-consent[data-relevo-provider="tiktok"] {
	margin-left: auto;
	margin-right: auto;
}

.relevo-embed-consent__text {
	margin: 0 0 10px;
	color: #5a6075;
	font-size: 13px;
	line-height: 1.45;
}

.relevo-embed-consent__btn {
	-webkit-appearance: none;
	appearance: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 40px;
	padding: 0 18px;
	border: 2px solid transparent;
	border-radius: 8px;
	background: linear-gradient(90deg, #5b3fd6, #ff2f8e);
	background-origin: border-box;
	color: #fff;
	font: inherit;
	font-size: 14px;
	font-weight: 700;
	line-height: 1;
	white-space: nowrap;
	cursor: pointer;
	transition: filter .15s ease;
}

.relevo-embed-consent__btn:hover {
	filter: brightness(1.08);
}

.relevo-embed-consent__btn:focus-visible {
	outline: 2px solid #b3a5ff;
	outline-offset: 2px;
}

/* The sentence that makes the consent an informed one. It is the last thing that may
   be dropped at any width, not the first. */
.relevo-embed-consent__note {
	margin: 10px 0 0;
	color: #6b7186;
	font-size: 12px;
	line-height: 1.45;
}

.relevo-embed-consent__note a {
	color: #5b3fd6;
	text-decoration: underline;
}

.relevo-embed-consent__note a:hover,
.relevo-embed-consent__note a:focus {
	color: #ff2f8e;
}

/* Only rendered for a provider whose own markup links nowhere useful (TikTok). */
.relevo-embed-consent__link {
	display: inline-block;
	margin-top: 10px;
	color: #5b3fd6;
	font-size: 13px;
	font-weight: 700;
	text-decoration: none;
}

.relevo-embed-consent__link::after {
	content: " \2197";
}

.relevo-embed-consent__link:hover,
.relevo-embed-consent__link:focus {
	color: #ff2f8e;
	text-decoration: underline;
}

@media (max-width: 600px) {
	.relevo-embed-consent {
		padding: 12px 14px 14px;
	}

	.relevo-embed-consent__btn {
		width: 100%;
		white-space: normal;
	}
}

@media (prefers-reduced-motion: reduce) {
	.relevo-embed-consent__btn {
		transition: none;
	}
}
