/* fixed-width-fix.css: lets the pages that still load a fixed-width Garland build reflow on a phone.
   For pages that load a colour/garland-fb7acb33/style-*.css build or a Drupal aggregate sites/default/files/css/css_*.css:
   those give body.sidebars min-width 980px and body.sidebar-left/right 780px, and have no media query. Linked right
   after that stylesheet by site-audit/apply_fixed_width_fix.py, which also adds the viewport meta and moves the left
   sidebar's markup after #center (so that the content comes first in reading and focus order).
   Built 2026-09-26 from site-audit/theme_audit/fix30/fixedwidth_final.css (candidate B of THEME_AUDIT.md section 4)
   with the six corrections of that section, as the owner decided them. Values and their basis are noted beside each
   rule: "derived", "copied from", or "chosen" (chosen by the author of this sheet, not by a measurement).
   The image-annotate photos are scaled by their script (image_annotate/tag-*.js and the aggregate js_86a6bb18...),
   which sizes the canvas from the image's width attribute, caps it at 100% of the column and places the notes in
   percent; the background-size rule below is the same scaling, kept here too (correction 1).
   Step 2 (2026-09-27, finding H2): also linked, after color/afgarland-55a11aff/style.css, by the 32 off-site-aggregate
   pages that site-audit/relink_offsite_aggregate_pages.py relinked to local stylesheets; the rules marked "Step 2"
   were added for them. */

body.sidebars, body.sidebar-left, body.sidebar-right { min-width: 0; }

/* Step 2 (2026-09-27): a fieldset is as wide as its widest content by default (the UA style min-inline-size:
   min-content), so a collapsible fieldset holding a photo held the page 640px wide on
   content/arduino-size-matters-how-many-do-you-have.html (and 441px on berkeley-faculty-club-directions); 0 lets it
   take its column's width like a div. */
fieldset { min-width: 0; }

/* Images no wider than their column, at every width. The image-annotate script sizes its canvas the same way. */
.node img, .content img, .block img { max-width: 100%; height: auto; }

/* Correction 1: the image-annotate canvas paints the photo as its background; draw it at the canvas's size, not the
   photo's natural size (which showed only the top-left part of a scaled photo). */
.image-annotate-canvas { background-size: 100% 100%; }

/* Correction 3: long lines of code and long words wrap at every width below the three-column minimum, so that the
   780-979px range (between the two stacking queries) is covered too. 979px is derived: body.sidebars min-width 980px
   minus 1. */
@media screen and (max-width: 979px) {
  pre { white-space: pre-wrap; overflow-wrap: anywhere; }
  .syntaxhighlighter code { overflow-wrap: anywhere; }
  /* SyntaxHighlighter indents a wrapped line into a 0px-wide span, so its last words can still pass the column
     (lilypad-touch-sound-example: 0.59px at 320px); the code box scrolls on its own instead of the page. */
  .syntaxhighlighter { overflow-x: auto; }
  body { overflow-wrap: break-word; }
  /* break-word, not anywhere (review, 2026-09-27): "anywhere" also lowers a table cell's minimum width, so table label
     columns shrank to 44px and broke words mid-word ("Publ|icati|on Typ|e" on print/174 at 850px) on 37 pages. */
  .content, .node { overflow-wrap: break-word; }
}
/* SyntaxHighlighter code boxes scroll on their own at every width (review, 2026-09-27: at 980-998px, just above the
   query above, a 648px code line on oscuino-arduino-osc-sketch-open-sound-control-work still pushed the page 1-19px
   sideways). The box only scrolls when its code is wider than the column. */
.syntaxhighlighter { overflow-x: auto; }

/* Three columns need 980px; two need 780px (derived: the builds' min-widths). Below that: one column. The markup has
   the content first (correction 2), so the columns stack in source order: content, left sidebar, right sidebar. */
@media screen and (max-width: 979px) {
  body.sidebars #wrapper #container { display: flex; flex-direction: column; }
  body.sidebars #wrapper #container #center,
  body.sidebars #wrapper #container #center #squeeze { float: none; width: auto; margin: 0; }
  body.sidebars #wrapper #container .sidebar { float: none; width: auto; margin: 2em 0 1em; }  /* 2em/1em: chosen (audit) */
  body.sidebars #wrapper #container .sidebar .block { padding: 0; }
}
@media screen and (max-width: 779px) {
  body.sidebar-left #wrapper #container, body.sidebar-right #wrapper #container { display: flex; flex-direction: column; }
  body.sidebar-left #wrapper #container #center, body.sidebar-right #wrapper #container #center,
  body.sidebar-left #wrapper #container #center #squeeze, body.sidebar-right #wrapper #container #center #squeeze { float: none; width: auto; margin: 0; }
  body.sidebar-left #wrapper #container .sidebar, body.sidebar-right #wrapper #container .sidebar { float: none; width: auto; margin: 2em 0 1em; }
  body.sidebar-left #wrapper #container .sidebar .block, body.sidebar-right #wrapper #container .sidebar .block { padding: 0; }

  /* Narrow screens: smaller gutters (10px: chosen), and content that cannot be wider than the column. */
  #wrapper #container { padding: 0 10px; }
  #wrapper #container #center .right-corner { left: 0; }
  /* Left padding 20px: Garland's left: -10px pulls the box 10px left, so 20px leaves the text 10px inside the white
     panel (review, 2026-09-27: with 10px it touched the panel's edge; left: 0 instead moved the box and made the page
     scroll 6px sideways). */
  #wrapper #container #center .right-corner .left-corner { padding: 12px 10px 2em 20px; margin-left: 0; }  /* 12px: chosen */
  /* The breadcrumb flows above the title (it may wrap to two lines here). */
  #wrapper #container .breadcrumb { position: relative; top: auto; left: auto; z-index: 3; padding-bottom: 0.5em; }
  iframe, object, embed, video { max-width: 100%; }
  /* Step 2: form controls sized by a size= attribute (the 60-character comment subject box, 439px; event.html's
     448px date select) no wider than the column. */
  input, select, textarea { max-width: 100%; }
  /* A comment's "submitted by" line floats beside its title (Garland .comment .submitted); here the title then had
     about 60px beside it, and its words broke letter by letter (review follow-up, 2026-09-27: "Piezoresistive",
     "They" on the portable-etextile pages at 390px). Below the title instead. */
  .comment .submitted { float: none; display: block; }
  table { display: block; max-width: 100%; overflow-x: auto; }
}

/* Correction 2: the left sidebar now follows #center in the markup. Where the columns sit side by side, put it back
   on the left with the float layout's own negative margins: #center keeps its full width (margin 0), the left
   sidebar is pulled over its left edge (margin-left -100%), and on three-column pages the right sidebar is pulled
   back onto the same line (margin-left -210px, derived: Garland's .sidebar width 210px). #squeeze keeps the build's
   210px side margins, so the content column is where it was. The :has() rules apply only when #center comes before
   the left sidebar. A browser without :has() skips the whole block: on the aggregate pages both sidebars then show on
   the right; on the stock-build pages (step 2) the left sidebar shows below the content (review, 2026-09-27). The
   content comes first either way. */
@supports selector(#a:has(~ #b)) {
  @media screen and (min-width: 980px) {
    body.sidebars #wrapper #container #center:has(~ #sidebar-left) { margin: 0; }
    body.sidebars #wrapper #container #center ~ #sidebar-left { margin-left: -100%; }
    body.sidebars #wrapper #container #center ~ #sidebar-left ~ #sidebar-right { margin-left: -210px; }
  }
  @media screen and (min-width: 780px) {
    body.sidebar-left #wrapper #container #center:has(~ #sidebar-left) { margin-left: 0; }
    body.sidebar-left #wrapper #container #center ~ #sidebar-left { margin-left: -100%; }
    /* Step 2: the stock colour builds (afgarland-55a11aff, garland-fb7acb33) set #squeeze's left margin to 0, so the
       pulled-back sidebar would lie over the content; give #squeeze the aggregates' margin (210px, copied from
       css_4ea56f8e... "body.sidebar-left #squeeze{margin-left:210px;}"). No change on the aggregate pages, which
       already have it. */
    body.sidebar-left #wrapper #container #center:has(~ #sidebar-left) #squeeze { margin-left: 210px; }
  }
}

/* Correction 6 (owner's decision): the stock Garland builds set the body.sidebar-right #center, #squeeze and #footer
   right margins to 0, which puts the right sidebar below the content at every width. From 1024px up (the owner's
   breakpoint), restore the column: values copied from stock Garland (aggregate css_4ea56f8e..., the
   body.sidebar-right rules). */
@media screen and (min-width: 1024px) {
  body.sidebar-right #center { margin-right: -210px; }
  body.sidebar-right #squeeze { margin-right: 210px; }
  body.sidebar-right #footer { margin-right: -210px; }
}

/* Correction 4: contrast (WCAG 2.2 SC 1.4.3, 4.5:1). Breadcrumb #773721, the owner's choice (2026-09-27); it replaces
   #c17357. 8.93:1 on white, 5.00:1 on the grey band rgb(197,193,191), and 4.52:1 over the header's corner shading on
   phones (background luminance down to 0.482), where the first choice #7a3a24 gave 4.33:1; the two are 0.96 apart
   (CIEDE2000; site-audit/nearest_contrast_colour.js). Same colour as style-l.css. */
#wrapper #container .breadcrumb, #wrapper #container .breadcrumb a { color: #773721; }

/* Step 2: on three pages (content/portable-c-compiler, macmix-processing-and-synthesis-userhooks,
   arduino-size-matters-how-many-do-you-have) the breadcrumb begins with a one-item nice_menus list ("Blog") whose
   stylesheets (nice_menus.css, nice_menus_default.css) are not on the server; as a block list it made the
   breadcrumb two lines tall, and its second line lay over the page title at 1024px and wider. Shown on the
   breadcrumb's line instead; the 1em gap before "Home" is chosen. */
#wrapper #container .breadcrumb > ul.nice-menu, #wrapper #container .breadcrumb > ul.nice-menu > li {
  display: inline; margin: 0; padding: 0; background: none; list-style: none; }
#wrapper #container .breadcrumb > ul.nice-menu { margin-right: 1em; }

/* .main-nav: the site navigation that js/site-elements.js adds under the header (here on the garland-stock
   Publications pages). No stylesheet of these pages styles it, so it showed as a plain list across the bottom of the
   header's dark band, #a9290a on black (A11Y-6). No text colour reaches 4.5:1 against both the band and the page
   background it straddles (glyph backgrounds of luminance 0.000-0.956, measured 2026-09-27 with
   site-audit/check_fixed_width_fix.js --mode contrast; site-audit/nearest_contrast_colour.js: none feasible), so it
   gets the look it has on every site-theme page: rules copied
   from style-l.css (garland-2b7c019d) lines 1164-1200 and 1361-1368, 1456-1459; white on #336699 is 6.0:1. */
.main-nav { background: #336699; padding: 0; margin: 0; position: relative; z-index: 100; clear: both; }
.main-nav ul { list-style: none; margin: 0; padding: 0; display: flex; }
.main-nav li { margin: 0; padding: 0; background: none; }  /* background: none (chosen): Garland's list-item bullet image */
.main-nav a, .main-nav a:link, .main-nav a:visited { display: block; color: #ffffff; text-decoration: none; padding: 10px 20px; font-weight: bold; }
.main-nav a:hover { background: #4477aa; }
.main-nav a.active { background: #225588; }
/* 768px and below: the menu stays a row and wraps onto a second row only when the items do not fit, as on the
   site-theme pages since step 3f (style-l.css "Step 3f"; the column stack copied here earlier was replaced there). */
@media screen and (max-width: 768px) {
  .main-nav ul { flex-wrap: wrap; }
}
@media screen and (max-width: 480px) {
  .main-nav a, .main-nav a:link, .main-nav a:visited { padding: 8px 12px; font-size: 0.9em; }
}

/* Active and hovered Drupal tabs (the Publications pages): keep the pink tab image, dark text instead of white
   (1.86:1). #333 on the tab's flat colour #e1b4aa is 6.80:1: the owner's choice (H6). Selectors copied from
   garland-fb7acb33/style-D.css lines 646-647. */
ul.primary li.active a, ul.primary li.active a:link, ul.primary li.active a:visited, ul.primary li a:hover,
ul.secondary li.active a, ul.secondary li.active a:link, ul.secondary li.active a:visited, ul.secondary li a:hover { color: #333333; }

/* ul.primary-links (the stock Garland pages): on phones the float-right links ran over the logo. Up to 779px (the
   two-column minimum minus 1, derived), they take a row of their own under the logo and site name, still inside the
   header's dark band (body.png: black at 120px from the top) or on black below it (21:1 measured at 320, 390 and
   768px). 80px: the header's height in these builds (copied); display: flow-root keeps the row's top margin inside
   the header. At 780px and wider they stay where they were, white on the orange band: 3.90:1 at the darkest glyph
   background, and no text colour reaches 4.5:1 there (background luminance 0.170-0.219; black gives 4.39:1), so
   that case is left to the owner. */
@supports selector(#a:has(> b)) {
  @media screen and (max-width: 779px) {
    #wrapper #container #header:has(> ul.primary-links) { height: auto; min-height: 80px; display: flow-root; }
    /* background #000 (derived: body.png, the band, is black at 120px where it ends): rows that wrap below the band
       stay on black. */
    #wrapper #container #header > ul.primary-links { float: none; margin: 80px 0 0; display: flex; flex-wrap: wrap; background: #000; }
    #wrapper #container #header > ul.primary-links li { float: none; }
  }
}

/* ul.primary-links at 780px and wider (the 11 stock-Garland pages that have it): the white links sit on the orange band
   at 3.90:1 and no text colour passes there, so they get a translucent black backing (the owner's decision,
   2026-09-27). Opacity 0.09 is derived: the least, in steps of 0.01, that brings every band pixel under the letters to
   4.5:1 or more (site-audit/measure_menu_backing.js: background luminance 0.1696-0.2194 before; drawn with 0.09 the
   worst glyph pixel is 4.58:1 on 99 of 99 link measurements at 780, 1024 and 1440px, and with 0.08 66 fail). Hover and
   the active link keep it, since Garland's hover rule resets the background colour. Padding 0 .3em and radius 3px:
   chosen, so that the tint reads as a backing rather than a stain. */
@media screen and (min-width: 780px) {
  #wrapper #container #header > ul.primary-links li a, #wrapper #container #header > ul.primary-links li a:link,
  #wrapper #container #header > ul.primary-links li a:visited, #wrapper #container #header > ul.primary-links li a:hover,
  #wrapper #container #header > ul.primary-links li a.active {
    background-color: rgba(0, 0, 0, 0.09); padding-left: .3em; padding-right: .3em; border-radius: 3px; }
}

/* Phones: 14px body text (copied from style-l.css at this width); the site name kept at its desktop size (18px) so
   that "Fueling imaginations" still fits beside the logo at 320px. */
@media screen and (max-width: 480px) {
  body { font-size: 14px; }
  #wrapper #container #header h1, #wrapper #container #header h1 a:link, #wrapper #container #header h1 a:visited { font-size: 18px; }
}
@media screen and (max-width: 400px) {  /* 400px and 1.2em: chosen (audit) */
  #wrapper #container #header h1, #wrapper #container #header h1 a:link, #wrapper #container #header h1 a:visited { font-size: 1.2em; }
}
/* Step 2: three pages (content/portable-c-compiler, macmix-processing-and-synthesis-userhooks,
   arduino-size-matters-how-many-do-you-have) name the site "Adrian Freed: Fueling imaginations", which on one
   nowrap line of 18px ran 20-321px past a phone screen. Up to 779px (the two-column minimum minus 1, derived; with
   480px here the name still ran 1-39px past the screen at 481-519px, review 2026-09-27) the name may wrap beside the
   logo; line-height 1.3 and the 16px top padding (chosen) keep two lines inside the 80px header band. Scoped by
   the link's title so the one-line "Fueling imaginations" pages keep their 120px line. */
@media screen and (max-width: 779px) {
  #wrapper #container #header h1:has(> a[title^="Adrian Freed:"]) { padding-top: 16px; }
  #wrapper #container #header h1:has(> a[title^="Adrian Freed:"]),
  #wrapper #container #header h1 a[title^="Adrian Freed:"] { white-space: normal; line-height: 1.3; }
}

/* Step 2, after the review of 2026-09-27: module rules the 32 relinked pages lost. Their Drupal.settings lists
   (relink_offsite_aggregate_pages.py) do not name the quicktabs and event module stylesheets, and neither module's
   stylesheet exists locally (sites/all/modules/quicktabs/ holds only tabstyles/ images, sites/all/modules/event/ only
   images/). Without them all 7 hidden quicktabs panels showed on 28 pages, and the sidebar's event calendar (300px wide
   in a 210px sidebar) was drawn over the content on 10 pages at 1024px and wider. The rules below are copied verbatim, in
   order, from the local aggregate sites/default/files/css/css_59c055d8544d21f43cea9614ca94b82e.css, with url() paths
   rewritten for this file's folder. The 63 step-1 pages load aggregates holding the same rules, so they are unchanged.
   Left out: the two rules that set outline:none on focused quicktabs links, which would hide the keyboard focus on
   these pages (the step-1 pages still get them from their aggregates), and the "sky" tab look
   (.quicktabs-style-sky): its tab text is 4.23:1 (active, white on a grey gradient) and 3.76-3.83:1 (inactive, #777 on
   a light gradient), measured on glyph pixels, below 4.5:1; without it the tabs here keep their plain link colours.
   The step-1 pages still show that look from their aggregates, as on master. */
.quicktabs-hide{display:none;}
ul.quicktabs_tabs{margin-top:0;}
ul.quicktabs_tabs li{display:inline;background:none;list-style-type:none;padding:2px;white-space:nowrap;}
/* Without the sky look (below), the tab items are inline, nowrap and written with no space between them, so the row
   could not wrap and ran up to 262px past the 210px sidebar, over the content. As inline blocks they wrap inside the
   sidebar (a soft wrap opportunity falls between atomic inlines). The step-1 pages' sky rules float the items, which
   overrides this. */
ul.quicktabs_tabs li{display:inline-block;}
.event-calendar table{border:1px solid #242;border-collapse:collapse;border-spacing:0;width:98%;margin-bottom:1em;}
.event-calendar tr{padding:0;margin:0;background:white;}
.event-calendar th{color:#000;background:#aac;text-align:center;padding:1px 0.33em;border:1px solid #242;}
.event-calendar .month-view td,.event-calendar .week-view td{width:14%;}
.event-calendar td{border:1px solid #bbb;color:#777;text-align:right;vertical-align:top;margin:0;padding:0;}
.event-calendar th.heading{border-width:1px 0px;}
.event-calendar caption span{font-weight:bold;font-size:1.5em;}
.event-calendar span a{text-decoration:none;}
.event-calendar span a:hover,.event-calendar span a:active,.event-calendar span a:focus{background-color:#363636;color:#fff;}
.event-calendar .prev{text-align:left;border-width:1px 0px 1px 1px;}
.event-calendar .next{text-align:right;border-width:1px 1px 1px 0px;}
.event-calendar .stop{color:#ccc;}
.event-calendar th a{font-weight:bold;color:#363636;}
.event-calendar td a{color:#222244;font-weight:bold;text-decoration:none;}
.event-calendar td a:hover{text-decoration:underline;}
.event-calendar td.sat,.event-calendar td.sun{background:#fdd;}
.event-calendar td.selected{background:#99f;}
.event-calendar td.today{background:#f99;}
.event-calendar td.year,.event-calendar td.month{text-align:center;border-width:1px 0px;}
.event-calendar td.days{color:#cce;background:#224;text-align:center;border:1px solid #242;border-width:0 1px 1px 0;}
.event-calendar div.day{float:right;text-align:center;border:1px solid gray;border-width:0 0 1px 1px;padding:0.125em 0.25em 0 0.25em;margin:0;background:#f3f3f3;}
.event-calendar div.event{font-style:italic;background-color:#fff;border:solid 1px #555;text-align:left;margin:0.25em 0 0.5em 0.25em;}
.event-calendar div.title{padding-left:3px;}
.event-calendar div.title a{color:#000;}
.event-calendar div.title a:hover{color:#c00;}
.event-calendar .content{margin:5px;padding:3px;border-left:solid 2px #ddd;padding-left:5px;}
.event-calendar div.type{margin-left:5px;font-size:0.8em;}
.event-calendar div.type a{color:#00c;}
.event-calendar div.type a:hover{color:#c00;}
.event-calendar div.links{padding-left:3px;}
.event-calendar div.links a{color:#00c;}
.event-calendar div.links a:hover{color:#c00;}
.event-calendar .start{font-style:normal;color:#555;margin:2px 0 2px 0;padding-left:3px;font-size:0.8em;}
.event-calendar .end{font-style:normal;color:#555;margin:2px 0 2px 0;padding-left:9px;font-size:0.8em;}
.event-calendar .ongoing{font-style:normal;color:#555;margin:2px 0 2px 0;padding-left:9px;font-size:0.8em;}
.event-calendar div.info{visibility:hidden;height:0px;overflow:hidden;padding-left:3px;}
.event-calendar div.monthview .title{font-size:0.8em;}
.event-calendar div.dayview{width:auto;}
.event-calendar div.tableview{width:auto;}
.event-calendar div.tableview .links{}
.event-calendar .event-empty{min-height:6em;}
* html .event-calendar .event-empty{height:6em;}
.event-calendar .event .stripe{height:5px;}
.event-calendar .event .stripe-1{background-color:#FF6;height:5px;width:100%;}
.event-calendar .event .stripe-2{background-color:#F66;height:5px;width:100%;}
.event-calendar .event .stripe-3{background-color:#668CFF;height:5px;width:100%;}
.event-calendar .event .stripe-4{background-color:#FFB366;height:5px;width:100%;}
.event-calendar .event .stripe-5{background-color:#85FF66;height:5px;width:100%;}
.event-calendar .event .stripe-6{background-color:#A666FF;height:5px;width:100%;}
.event-calendar .event .stripe-7{background-color:#FFE066;height:5px;width:100%;}
.event-calendar .event .stripe-8{background-color:#66FFFF;height:5px;width:100%;}
.event-calendar .event .stripe-9{background-color:#FF66D9;height:5px;width:100%;}
.event-calendar .event .stripe-10{background-color:#DDD;height:5px;width:100%;}
.event-calendar div.month-view table.event-block thead,.event-calendar div.month-view table.event-block tbody{font-size:.9em;}
.event-calendar div.month-view table.event-block th{font-weight:normal;}

/* After the review of 2026-09-27. Links to the current page (a.active) and pressed links: #a76f60 (color/
   afgarland-55a11aff/style.css, a:active, a.active) is 4.13:1 on white and 4.02:1 on the sidebars (luminance 0.973) on
   the step-2 pages, which had default link colours before. #9e6759 is the nearest colour that passes on both (4.63 and
   4.51:1; CIEDE2000 3.21 from #a76f60; site-audit/nearest_contrast_colour.js --bg 0.973,1). Scoped to the page column
   and the sidebars. Not links in list items (tabs, menus, pagers): there system-menus.css's `li a.active { color: #000 }`
   applies, and the owner's active tabs are #333 on pink (cloud check, 2026-09-27: without this exclusion the active tab
   on the 3 garland-stock Publications pages turned #9e6759 on pink, and 254 black menu and pager links turned
   #9e6759). Not comment titles either: Garland makes those black (`.comment h3 a.active`), as the step-1 aggregates
   and style-l.css do; the step-2 build's copy of that rule reads `color: #00000`, which is invalid and was dropped, so
   the next rule gives the step-2 pages the colour their theme meant. Nor pressed tabs, whose look is their own. */
#squeeze a.active:not(li a, .comment h3 a), #squeeze a:active:not(ul.tabs a, .quicktabs_tabs a),
.sidebar a.active:not(li a, .comment h3 a), .sidebar a:active:not(ul.tabs a, .quicktabs_tabs a) { color: #9e6759; }
.comment h3 a.active { color: #000000; }

/* Pointer targets at least 24x24 CSS px (WCAG 2.2 SC 2.5.8) for node links, tag links and the breadcrumb, as on the
   site-theme pages: rule copied from style-l.css "Step 3e" (review, 2026-09-27: without it these pages showed new
   target-size failures once they reflowed). */
ul.links li a, .terms a, #wrapper #container .breadcrumb a {
  display: inline-block; min-width: 24px; min-height: 24px; line-height: 24px; text-align: center; }

/* Links in running text underlined, navigation not, as on the site-theme pages: rules copied from style-l.css
   "Step 3g" (review, 2026-09-27: #a9290a links against #000 text are 3.01:1, and the 32 step-2 pages had lost the
   underline their unstyled version showed). */
#squeeze :is(.content, p, li, .comment-folded, .biblio-entry, .biblio-current-filters, .timeline-item) a:is(:link, :visited),
#squeeze .biblio-alpha-line ~ a:is(:link, :visited) { text-decoration: underline; }
#squeeze :is(ul.links, .terms, .breadcrumb, ul.menu, ul.tabs, #tabs-wrapper, ul.pager, ul.vocabulary-list, ul.quicktabs_tabs, .biblio-alpha-line) a:is(:link, :visited) { text-decoration: none; }

/* Publications listings: the year, author and keyword headings (.biblio-separator-bar). The stock biblio.css fills
   them with a grey band (#e1e1e1 with a #ccc border); the owner found the bands ugly (2026-09-28) and chose a plain
   heading with a 2px rule in the breadcrumb colour #773721 (site-audit/consistency/findings_2026-09-28/separator_bar/).
   This sheet loads after biblio-l.css on those pages, so the same selector overrides it. */
.biblio-separator-bar {
  background: none;
  border: 0;
  border-bottom: 2px solid #773721;
  padding: 0.25em 0;
  margin: 1.6em 0 0.6em;
  font-size: 1.25em;
}
