/* /Components/ExplainedIndicator.razor.rz.scp.css */
/* UIX-010 S4 (#3225) explained-indicator wrapper. The wrapper is the anchor
   for the disclosure panel, which floats below the indicator (CSS-only — no
   popover provider) so opening it never reflows the host layout. */
.gc-explained-indicator[b-diw92pt5hb] {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
}

/* Visually hidden, but present for aria-describedby — the standard
   screen-reader-only treatment (display:none would void the association). */
.gc-explained-indicator-description[b-diw92pt5hb] {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* The "How is this calculated?" control: a native button (keyboard-focusable,
   no provider dependency) styled as an info icon plus text link — the
   standard forbids icon-only. */
.gc-explained-indicator-disclosure[b-diw92pt5hb] {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
    font-size: 0.75rem;
    color: var(--mud-palette-primary);
    text-decoration: underline;
    white-space: nowrap;
}

.gc-explained-indicator-disclosure:hover[b-diw92pt5hb],
.gc-explained-indicator-disclosure:focus-visible[b-diw92pt5hb] {
    color: var(--mud-palette-primary-darken);
}

.gc-explained-indicator-panel[b-diw92pt5hb] {
    position: absolute;
    top: calc(100% + 0.375rem);
    right: 0;
    z-index: calc(var(--mud-zindex-tooltip, 1600) - 1);
    display: block;
    width: max-content;
    max-width: 28rem;
    padding: 0.75rem 1rem;
    background-color: var(--mud-palette-surface);
    border: 1px solid var(--mud-palette-lines-default);
    border-radius: var(--mud-default-borderradius, 4px);
    box-shadow: var(--mud-elevation-4);
    font-size: 0.8125rem;
    line-height: 1.5;
    color: var(--mud-palette-text-primary);
    white-space: normal;
    text-align: left;
}
/* /Components/GatedAction.razor.rz.scp.css */
/* UIX-009 S1 (#3275) gated-action wrapper. The wrapper anchors the CSS-only
   reason tooltip, which floats below the disabled control (no popover
   provider, so the component renders fully in the shared component-test
   harness) and never reflows the host layout when it shows. */
.gc-gated-action[b-b6tmlu0h1x] {
    position: relative;
    display: inline-flex;
    align-items: center;
}

/* Visually hidden, but present for aria-describedby — the standard
   screen-reader-only treatment (display:none would void the association). */
.gc-gated-action-description[b-b6tmlu0h1x] {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* The visual reason bubble, revealed on hover (or keyboard focus within the
   wrapper, for gated controls that remain focusable). The hover target is
   the wrapper, not the control: a disabled control swallows its own pointer
   events, so a tooltip bound to the control itself would never show
   (TOOLTIP-STANDARD.md 4.1). */
.gc-gated-action-tooltip[b-b6tmlu0h1x] {
    position: absolute;
    top: calc(100% + 0.375rem);
    right: 0;
    z-index: calc(var(--mud-zindex-tooltip, 1600) - 1);
    display: none;
    width: max-content;
    max-width: 22rem;
    padding: 0.5rem 0.75rem;
    background-color: var(--mud-palette-surface);
    border: 1px solid var(--mud-palette-lines-default);
    border-radius: var(--mud-default-borderradius, 4px);
    box-shadow: var(--mud-elevation-4);
    font-size: 0.75rem;
    line-height: 1.4;
    color: var(--mud-palette-text-primary);
    white-space: normal;
    text-align: left;
}

.gc-gated-action:hover > .gc-gated-action-tooltip[b-b6tmlu0h1x],
.gc-gated-action:focus-within > .gc-gated-action-tooltip[b-b6tmlu0h1x] {
    display: block;
}
/* /Pages/Contracts/CorrectedSpanDialog.razor.rz.scp.css */
/* #3217: both readings verbatim — same monospace pre-wrap treatment as the
   correct-text dialog so original and replacement compare character-for-
   character. */
.gc-correct-original[b-k4zw5bu74n],
.gc-correct-replacement[b-k4zw5bu74n] {
    margin: 0.25rem 0 1rem;
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--mud-palette-lines-default);
    border-radius: 0.25rem;
    background-color: var(--mud-palette-background-gray);
    font-family: var(--mud-typography-caption-family, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
    font-size: 0.8125rem;
    white-space: pre-wrap;
    word-break: break-word;
    max-height: 25vh;
    overflow-y: auto;
}

.gc-correct-replacement[b-k4zw5bu74n] {
    border-left: 3px solid rgba(38, 166, 154, 0.9);
}
/* /Pages/Contracts/CorrectTextDialog.razor.rz.scp.css */
/* #3217: the base span under correction, shown verbatim — monospace and
   pre-wrap so the reader sees exactly the characters the correction records
   (the same rendering family as the extracted-text pane). */
.gc-correct-original[b-04uedh0vrx] {
    margin: 0.25rem 0 1rem;
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--mud-palette-lines-default);
    border-radius: 0.25rem;
    background-color: var(--mud-palette-background-gray);
    font-family: var(--mud-typography-caption-family, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
    font-size: 0.8125rem;
    white-space: pre-wrap;
    word-break: break-word;
    max-height: 30vh;
    overflow-y: auto;
}
/* /Pages/Contracts/ExtractedText.razor.rz.scp.css */
/* F-02 slice 2 (#1626) monospace, line-numbered OCR-text view. A fixed-width
   left gutter carries the line number; the text column wraps long lines
   (pre-wrap + break-word) so no horizontal scroll is needed for small texts. */
.gc-extracted-text[b-stc3u6ogkn] {
    max-height: 70vh;
    overflow-y: auto;
    padding: 0.5rem 0;
    font-family: var(--mud-typography-caption-family, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
    font-size: 0.8125rem;
    line-height: 1.6;
    background-color: var(--mud-palette-surface);
}

.gc-etx-row[b-stc3u6ogkn] {
    display: flex;
    align-items: flex-start;
}

.gc-etx-row:hover[b-stc3u6ogkn] {
    background-color: var(--mud-palette-action-default-hover);
}

.gc-etx-gutter[b-stc3u6ogkn] {
    flex: 0 0 3.5rem;
    padding: 0 0.75rem;
    text-align: right;
    color: var(--mud-palette-text-secondary);
    user-select: none;
    white-space: nowrap;
}

.gc-etx-line[b-stc3u6ogkn] {
    flex: 1 1 auto;
    padding-right: 1rem;
    white-space: pre-wrap;
    word-break: break-word;
}

/* #1618 clause-anchor overlay. Highlighted spans tint the matched [start, end)
   range (amber "evidence highlight") — they wrap real OCR text and add no
   characters, so every row reads as line number + literal text (#2503). The
   focus clause — the one the ?clause= link landed on — reads solid amber with
   a border. */
.gc-etx-mark[b-stc3u6ogkn] {
    background-color: rgba(255, 193, 7, 0.28);
    border-radius: 0.15rem;
    padding: 0 0.05rem;
    color: inherit;
}

.gc-etx-mark.focus[b-stc3u6ogkn] {
    background-color: rgba(255, 152, 0, 0.5);
    border: 1px solid rgba(255, 152, 0, 0.9);
}

/* #3217 (FR-F02-81) corrected-span mark: a human correction, visibly distinct
   from the amber clause highlight on more than colour alone — teal tint PLUS
   a solid underline, so the two overlays stay tellable apart when nested and
   under colour-vision deficiency. Cursor + focus ring because the mark is a
   real target (role="button"): it opens the corrected-span detail with
   supersede-to-original. */
.gc-etx-correction[b-stc3u6ogkn] {
    background-color: rgba(38, 166, 154, 0.18);
    border-bottom: 2px solid rgba(38, 166, 154, 0.9);
    border-radius: 0.15rem;
    padding: 0 0.05rem;
    color: inherit;
}

/* The pointer affordance belongs to the in-pane marks only — the legend
   swatch reuses the visual style but is not a target. */
.gc-extracted-text .gc-etx-correction[b-stc3u6ogkn] {
    cursor: pointer;
}

.gc-etx-correction:focus-visible[b-stc3u6ogkn] {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: 1px;
}

/* A deletion has no replacement characters to mark: a thin zero-width caret
   at the point the span was removed keeps the history reachable in place
   without adding characters to the text flow. */
.gc-etx-correction.deletion[b-stc3u6ogkn] {
    display: inline-block;
    padding: 0 1px;
    border-left: 3px solid rgba(38, 166, 154, 0.9);
    border-bottom-width: 2px;
    height: 1em;
    vertical-align: text-bottom;
}

.gc-etx-legend[b-stc3u6ogkn] {
    font-size: 0.8125rem;
    color: var(--mud-palette-text-secondary);
}

.gc-etx-legend-item[b-stc3u6ogkn] {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
}

.gc-etx-legend-swatch[b-stc3u6ogkn] {
    display: inline-block;
    width: 0.9rem;
    height: 0.9rem;
    border-radius: 0.15rem;
}

/* One-shot amber pulse when a span is focused. Applied by
   govComplyScrollToClause; suppressed entirely for prefers-reduced-motion
   (the JS returns before adding the class). */
@keyframes gc-etx-pulse-kf-b-stc3u6ogkn {
    0% { background-color: rgba(255, 152, 0, 0.85); }
    100% { background-color: rgba(255, 152, 0, 0.5); }
}

.gc-etx-mark.gc-etx-pulse[b-stc3u6ogkn] {
    animation: gc-etx-pulse-kf-b-stc3u6ogkn 0.8s ease-out 1;
}

@media (prefers-reduced-motion: reduce) {
    .gc-etx-mark.gc-etx-pulse[b-stc3u6ogkn] {
        animation: none;
    }
}

/* #2497 split view: text pane (left, favoured — the OCR text wraps around ~90
   chars, so a 50/50 split would double the wrapping on the thing being read)
   beside a read-only clause pane (right, ~32%). position: relative hosts the
   absolutely-positioned connector SVG overlay. */
.gc-etx-split[b-stc3u6ogkn] {
    position: relative;
    display: flex;
    gap: 1rem;
    align-items: flex-start;
}

.gc-etx-split-text[b-stc3u6ogkn] {
    flex: 1 1 auto;
    min-width: 0;
}

.gc-etx-clause-pane[b-stc3u6ogkn] {
    flex: 0 0 32%;
    max-width: 32%;
    min-width: 0;
}

/* Text scroller + gutter-marker strip side by side inside the left paper.
   position: relative (#3208) anchors the selection-anchored Add-clause
   affordance overlay. */
.gc-etx-text-wrap[b-stc3u6ogkn] {
    position: relative;
    display: flex;
    align-items: stretch;
}

/* #3208 selection-anchored Add-clause affordance: floats at the pane's
   top-right so appearing/withdrawing with the selection shifts no layout.
   Above the text layer / highlight (z 1) and the connector (z 2);
   user-select: none so a click over it can't start a selection of its own. */
.gc-etx-addclause[b-stc3u6ogkn] {
    position: absolute;
    top: 0.5rem;
    right: 1.5rem;
    z-index: 3;
    user-select: none;
    /* #3217: the Correct-text affordance co-locates here (same selection,
       same withdraw rules); a row keeps both reachable without layout shift. */
    display: flex;
    gap: 0.5rem;
}

.gc-etx-text-wrap .gc-extracted-text[b-stc3u6ogkn] {
    flex: 1 1 auto;
    min-width: 0;
}

/* Highlighted spans double as "show me the clause row" targets when the
   clause pane is present (#2497 bidirectional locate). */
.gc-etx-split.with-clauses .gc-etx-mark[b-stc3u6ogkn] {
    cursor: pointer;
}

/* #2497 gutter markers: editor search-hit idiom — a thin strip beside the
   text pane's scrollbar, one tick per anchored clause at its proportional
   position, coloured by gap status. Positions are static per load, so
   scrolling costs nothing. */
.gc-etx-markers[b-stc3u6ogkn] {
    position: relative;
    flex: 0 0 0.875rem;
    border-left: 1px solid var(--mud-palette-lines-default);
}

.gc-etx-marker[b-stc3u6ogkn] {
    position: absolute;
    left: 0.15rem;
    right: 0.15rem;
    height: 4px;
    padding: 0;
    border: none;
    border-radius: 1px;
    transform: translateY(-50%);
    cursor: pointer;
    background-color: var(--mud-palette-text-disabled);
}

.gc-etx-marker:hover[b-stc3u6ogkn],
.gc-etx-marker:focus-visible[b-stc3u6ogkn] {
    outline: 2px solid var(--mud-palette-primary);
}

.gc-etx-marker.gap-critical[b-stc3u6ogkn] { background-color: var(--mud-palette-error); }
.gc-etx-marker.gap-moderate[b-stc3u6ogkn] { background-color: var(--mud-palette-warning); }
.gc-etx-marker.gap-informational[b-stc3u6ogkn] { background-color: var(--mud-palette-info); }
.gc-etx-marker.satisfied[b-stc3u6ogkn] { background-color: var(--mud-palette-success); }
.gc-etx-marker.not-assessed[b-stc3u6ogkn] { background-color: var(--mud-palette-text-disabled); }

/* #3208: position anchor for the document pane's Add-clause affordance —
   wraps the scroller so the floating button holds the pane's corner instead
   of scrolling away with the pages. */
.gc-docpane-wrap[b-stc3u6ogkn] {
    position: relative;
}

/* #3121 document pane (reached by the #3122 Text/Document toggle): continuous
   top-to-bottom page scroll filling the left pane. Same 70vh scroller height
   as the text view so the split reads identically in both modes. */
.gc-docpane[b-stc3u6ogkn] {
    max-height: 70vh;
    overflow-y: auto;
    padding: 0.75rem;
    background-color: var(--mud-palette-background-gray);
}

/* One page. The inline aspect-ratio (that page's OWN slice-1 dimensions — D3)
   is what reserves the height: width is the pane's, height follows the ratio,
   so the scrollbar's idea of where each page begins is exact before a single
   image arrives, and filling an image in shifts nothing (the <img> fills the
   already-reserved box). */
.gc-docpane-page[b-stc3u6ogkn] {
    position: relative;
    width: 100%;
    margin-bottom: 0.75rem;
    background-color: var(--mud-palette-surface);
    border: 1px solid var(--mud-palette-lines-default);
    /* #3128: size container so the text layer's cqh font sizes track the
       rendered page height. Safe here: the div's size never depends on its
       content — width is the pane's, height follows the inline aspect-ratio. */
    container-type: size;
}

.gc-docpane-page:last-child[b-stc3u6ogkn] {
    margin-bottom: 0;
}

.gc-docpane-page img[b-stc3u6ogkn] {
    display: block;
    width: 100%;
    height: 100%;
}

/* Placeholder / unavailable fills cover the reserved box; the failed
   treatment is visibly distinct from not-yet-loaded (criterion 6): dashed
   border + icon + statement vs the placeholder's quiet page number. */
.gc-docpane-page-fill[b-stc3u6ogkn] {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.25rem;
}

.gc-docpane-page-failed[b-stc3u6ogkn] {
    border: 1px dashed var(--mud-palette-warning);
    color: var(--mud-palette-text-secondary);
    background-color: var(--mud-palette-action-default-hover);
}

.gc-docpane-status[b-stc3u6ogkn] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
    padding: 2rem 1rem;
}

/* #3122 clause highlight (FR-F02-64): the resolved rectangle as percentages
   of its page div — the div's aspect-ratio is the page's own displayed frame,
   so percentage positioning IS the mapping; no transform exists here. Echoes
   the text pane's amber focus mark; pointer-events: none so it never
   intercepts a click; sits above the page <img> (z-index over in-flow). */
.gc-docpane-highlight[b-stc3u6ogkn] {
    position: absolute;
    background-color: rgba(255, 152, 0, 0.25);
    outline: 2px solid rgba(255, 152, 0, 0.9);
    pointer-events: none;
    z-index: 1;
}

/* #3128 text layer (FR-F02-68): transparent, word-granular selectable text
   over the rendered page — the conventional way a raster-rendered PDF is made
   selectable. Sits above the <img>; the highlight renders later in the DOM at
   the same z-index, so it still paints over the words (and stays
   pointer-events: none, so it never blocks a selection drag). */
.gc-docpane-textlayer[b-stc3u6ogkn] {
    position: absolute;
    inset: 0;
    z-index: 1;
    line-height: 1;
    /* #3130 reopen (FR-F02-70): the word-separator text nodes between the
       absolutely-positioned spans are in-flow children of THIS element, so
       its own white-space decides whether they render. The default (normal)
       collapses them to zero width, and rendered-text serialization —
       Selection.toString() and the native text/plain copy path — skips
       zero-width content, so the copied words ran together while a DOM
       inspection showed the separator nodes present. pre gives every
       separator its rendered width so the native copy path carries it.
       Verified against the clipboard, not the DOM. */
    white-space: pre;
    /* pre also stops the separator run wrapping: the run is in-flow at the
       layer's top-left (the spans are out of flow), and on a dense page it
       becomes one line wider than the page (500 words measured ~2000px vs a
       785px page), handing the pane a horizontal scrollbar. The run carries
       no glyphs, so clipping it costs nothing — the same idiom as the
       span-level clip below. */
    overflow: hidden;
}

/* A drag-selection includes the separator run in DOM order, and the default
   selection wash would paint a visible strip at the layer's top-left where no
   words are. Keep the layer's own text invisible under selection — the spans'
   wash below is the visible feedback. */
.gc-docpane-textlayer[b-stc3u6ogkn]::selection {
    background-color: transparent;
}

/* One WORD box (inline style carries its geometry + font-size). The glyphs
   are invisible — the rendered page image IS what the reader sees — and a run
   wider than its OCR box is clipped rather than spilling into the neighbouring
   word's hit area, so selection geometry stays exactly the artifact's boxes. */
.gc-docpane-textlayer[b-stc3u6ogkn]  span {
    position: absolute;
    color: transparent;
    white-space: pre;
    overflow: hidden;
    cursor: text;
}

/* The selection wash is the visible feedback over transparent glyphs. */
.gc-docpane-textlayer[b-stc3u6ogkn]  span::selection {
    background-color: rgba(33, 150, 243, 0.35);
    color: transparent;
}

/* Criterion 7: the stated no-selectable-text notice — a quiet corner chip on
   the rendered page, not selectable itself. */
.gc-docpane-notext[b-stc3u6ogkn] {
    position: absolute;
    top: 0.375rem;
    right: 0.375rem;
    z-index: 1;
    padding: 0.125rem 0.5rem;
    border-radius: 0.25rem;
    background-color: var(--mud-palette-action-default-hover);
    color: var(--mud-palette-text-secondary);
    font-size: 0.6875rem;
    user-select: none;
}

/* #2497 clause pane: read-only rows — clause # (link out), title, gap chip. */
.gc-etx-clause-header[b-stc3u6ogkn] {
    padding: 0.75rem 1rem 0.5rem;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.gc-etx-clause-list[b-stc3u6ogkn] {
    max-height: 70vh;
    overflow-y: auto;
}

.gc-etx-clause-row[b-stc3u6ogkn] {
    display: flex;
    gap: 0.75rem;
    align-items: flex-start;
    padding: 0.5rem 1rem;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.gc-etx-clause-row:last-child[b-stc3u6ogkn] {
    border-bottom: none;
}

.gc-etx-clause-row.anchored:hover[b-stc3u6ogkn] {
    background-color: var(--mud-palette-action-default-hover);
}

/* Focus row echoes the text pane's amber focus highlight. */
.gc-etx-clause-row.focus[b-stc3u6ogkn] {
    background-color: rgba(255, 193, 7, 0.12);
    box-shadow: inset 3px 0 0 rgba(255, 152, 0, 0.9);
}

.gc-etx-clause-number[b-stc3u6ogkn] {
    flex: 0 0 auto;
    white-space: nowrap;
    padding-top: 0.1rem;
}

.gc-etx-clause-body[b-stc3u6ogkn] {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.25rem;
}

.gc-etx-clause-row.anchored .gc-etx-clause-body[b-stc3u6ogkn] {
    cursor: pointer;
}

.gc-etx-clause-body:focus-visible[b-stc3u6ogkn] {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: 2px;
}

/* Null-offset clauses (#2497): visibly distinct and non-interactive — dimmed
   body, no pointer cursor, an explicit "Not located in text" note. The
   clause-number link keeps full contrast; navigating out still works. */
.gc-etx-clause-row.unanchored .gc-etx-clause-body[b-stc3u6ogkn] {
    opacity: 0.65;
    cursor: default;
}

.gc-etx-clause-row[b-stc3u6ogkn]  .gc-etx-clause-unanchored-note {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
}

/* #2497 focus-driven connector: ONE line, positioned by JS
   (govComplyClauseConnector), hidden whenever either endpoint scrolls out of
   its pane. pointer-events: none so it never intercepts clicks. A step-routed
   polyline since #3131 (both modes, D1 parity) — fill: none, or the browser
   paints the polyline's enclosed area as a shape. */
.gc-etx-connector[b-stc3u6ogkn] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    overflow: visible;
    pointer-events: none;
    z-index: 2;
}

.gc-etx-connector polyline[b-stc3u6ogkn] {
    visibility: hidden;
    fill: none;
    stroke: rgba(255, 152, 0, 0.9);
    stroke-width: 1.5;
}

/* Narrow widths: stack the panes (text first) instead of scrolling
   horizontally; the geometric connector is meaningless when stacked. */
@media (max-width: 959px) {
    .gc-etx-split[b-stc3u6ogkn] {
        flex-direction: column;
    }

    .gc-etx-clause-pane[b-stc3u6ogkn] {
        flex: 1 1 auto;
        max-width: none;
        width: 100%;
    }

    .gc-etx-clause-list[b-stc3u6ogkn] {
        max-height: 40vh;
    }

    .gc-etx-connector[b-stc3u6ogkn] {
        display: none;
    }
}
/* /Pages/Contracts/RevisionDigestedTextDialog.razor.rz.scp.css */
/* #3052 slice 5 (issue #3219) — the revision digested-text dialog's marked
   composed rendering. The .gc-etx-* class NAMES mirror ExtractedText.razor.css
   (js/text-selection.js keys on .gc-etx-row / .gc-etx-line, and the visual
   language must read identically across the two surfaces), but scoped CSS
   isolates per component, so the rules the dialog uses are carried here. */
.gc-extracted-text[b-e0j5xftekz] {
    max-height: 60vh;
    overflow-y: auto;
    padding: 0.5rem 0;
    font-family: var(--mud-typography-caption-family, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
    font-size: 0.8125rem;
    line-height: 1.6;
    background-color: var(--mud-palette-surface);
}

.gc-etx-row[b-e0j5xftekz] {
    display: flex;
    align-items: flex-start;
}

.gc-etx-row:hover[b-e0j5xftekz] {
    background-color: var(--mud-palette-action-default-hover);
}

.gc-etx-gutter[b-e0j5xftekz] {
    flex: 0 0 3.5rem;
    padding: 0 0.75rem;
    text-align: right;
    color: var(--mud-palette-text-secondary);
    user-select: none;
    white-space: nowrap;
}

.gc-etx-line[b-e0j5xftekz] {
    flex: 1 1 auto;
    padding-right: 1rem;
    white-space: pre-wrap;
    word-break: break-word;
}

/* FR-F02-81 corrected-span mark: teal tint PLUS a solid underline so the
   marking survives colour-vision deficiency; cursor + focus ring because the
   mark is a real target (role="button") into the corrected-span detail. */
.gc-etx-correction[b-e0j5xftekz] {
    background-color: rgba(38, 166, 154, 0.18);
    border-bottom: 2px solid rgba(38, 166, 154, 0.9);
    border-radius: 0.15rem;
    padding: 0 0.05rem;
    color: inherit;
}

/* The pointer affordance belongs to the in-pane marks only — the legend
   swatch reuses the visual style but is not a target. */
.gc-extracted-text .gc-etx-correction[b-e0j5xftekz] {
    cursor: pointer;
}

.gc-etx-correction:focus-visible[b-e0j5xftekz] {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: 1px;
}

/* A deletion has no replacement characters to mark: a thin zero-width caret
   at the point the span was removed keeps the history reachable in place
   without adding characters to the text flow. */
.gc-etx-correction.deletion[b-e0j5xftekz] {
    display: inline-block;
    padding: 0 1px;
    border-left: 3px solid rgba(38, 166, 154, 0.9);
    border-bottom-width: 2px;
    height: 1em;
    vertical-align: text-bottom;
}

.gc-rdt-legend[b-e0j5xftekz] {
    font-size: 0.8125rem;
    color: var(--mud-palette-text-secondary);
}

.gc-rdt-legend-item[b-e0j5xftekz] {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
}

.gc-rdt-legend-swatch[b-e0j5xftekz] {
    display: inline-block;
    width: 0.9rem;
    height: 0.9rem;
    border-radius: 0.15rem;
}

/* Position anchor for the selection-anchored Correct-text affordance: floats
   at the pane's top-right so appearing/withdrawing with the selection shifts
   no layout; user-select: none so a click over it can't start a selection of
   its own (the #3208 idiom). */
.gc-rdt-text-wrap[b-e0j5xftekz] {
    position: relative;
}

.gc-rdt-correct[b-e0j5xftekz] {
    position: absolute;
    top: 0.5rem;
    right: 1.5rem;
    z-index: 3;
    user-select: none;
}
