/* Novelty check: the few things tm.css and pa.css do not already cover.
   Loaded after both, which supply the palette, type scale, .tm-page wrapper,
   .crumbs, .tm-hero, .alert, .disclaimer, .pa-list and .pa-cc.

   The three verdict colours are tm.css's own --coral, --warn and --ok, not new
   ones. That is deliberate twice over: the palette stays the site's, and the
   meanings land the right way round. XLSCOUT paints "already disclosed" green
   because it is written for an analyst measuring coverage. For an inventor that
   is the bad news, so here the site's warning colour carries it and the green
   is reserved for the features nobody has taken. */

/* --- progress ------------------------------------------------------------- */
/* margin-inline must stay auto: tm.css centres every direct child of .tm-page
   with `margin-inline: auto`, and a `margin: 0 0 1.6rem` shorthand here would
   silently reset that to 0 and hang the step list off the left edge while the
   rest of the page stayed centred. */
.nv-steps {
  display: flex; flex-wrap: wrap; gap: .4rem 1.4rem;
  list-style: none; margin: 0 auto 1.6rem; padding: 0;
  font: 700 .74rem/1.4 'Nunito', sans-serif;
  letter-spacing: .07em; text-transform: uppercase;
  color: var(--muted);
  border-bottom: 1px solid var(--border); padding-bottom: .9rem;
}
.nv-steps li.done { color: var(--text); }
.nv-steps li[aria-current] { color: var(--coral-dark); }

/* Once the check is finished these become links. They keep the label's colour
   rather than the site's link colour, because a row of four coral links across
   the top of a report reads as a menu bar and pulls attention off the verdict.
   The underline on hover is what says they are clickable. */
.nv-steps a { color: inherit; text-decoration: none; }
.nv-steps a:hover { text-decoration: underline; text-underline-offset: .25em; }
.nv-steps a:focus-visible { outline: 2px solid var(--coral); outline-offset: 3px; }

/* --- forms ---------------------------------------------------------------- */
.nv-form { max-width: 46rem; }
.nv-form label { display: block; margin-bottom: .3rem; }
.nv-form textarea, .nv-form input[type=text], .nv-form select {
  width: 100%; font: 400 1rem/1.6 'Nunito Sans', sans-serif;
  padding: .7rem .85rem; border: 1px solid var(--border);
  border-radius: 10px; background: var(--card); color: var(--text);
}
.nv-form textarea:focus, .nv-form input:focus, .nv-form select:focus {
  outline: 2px solid var(--coral); outline-offset: 1px; border-color: transparent;
}
.nv-form button {
  margin-top: 1rem; font: 800 .95rem 'Nunito', sans-serif;
  padding: .7rem 1.4rem; border: 0; border-radius: 999px;
  background: var(--coral); color: #fff; cursor: pointer;
}
.nv-form button:hover { background: var(--coral-dark); }
.nv-hint { font-size: .87rem; margin: .45rem 0 1rem; }
.nv-claim { font-family: 'Nunito Sans', sans-serif; }

/* Feature list. Three columns: the number, the tick, the text. The tick gets a
   column of its own because choosing which features are new is the whole point
   of this step, and anything inline with the text reads as decoration. */
.nv-features { list-style: none; counter-reset: nvf; margin: 0; padding: 0; }
.nv-features li {
  counter-increment: nvf;
  display: grid; grid-template-columns: 1.9rem 1.6rem minmax(0, 1fr); gap: .5rem;
  align-items: start; margin-bottom: .6rem;
}
.nv-features li::before {
  content: counter(nvf) ".";
  font: 700 .9rem/2.9 'Nunito', sans-serif; color: var(--muted);
  text-align: right;
}
.nv-star { margin: 0; padding-top: .75rem; }
.nv-star input { width: 1.05rem; height: 1.05rem; accent-color: var(--coral); }

.nv-queries { list-style: none; margin: 0; padding: 0; }
.nv-queries li { margin-bottom: .5rem; }

/* --- vocabulary ----------------------------------------------------------- */
.nv-vocab { margin: 1.4rem 0 2rem; }
.nv-vocab > div {
  border-left: 3px solid var(--coral); padding: .1rem 0 .1rem .9rem;
  margin-bottom: .95rem;
}
.nv-vocab dt { font-size: .95rem; margin-bottom: .15rem; }
.nv-vocab dd { margin: 0; font-size: .92rem; color: var(--muted); line-height: 1.7; }

/* --- verdict -------------------------------------------------------------- */
.nv-verdict {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 12px; padding: 1.2rem 1.35rem; margin: 0 0 2rem;
}
.nv-verdict p { margin: 0 0 .5rem; }
.nv-verdict p:last-child { margin-bottom: 0; font-size: .87rem; }
.nv-good { color: var(--ok); }
.nv-bad  { color: var(--coral-dark); }

/* --- the map -------------------------------------------------------------- */
.nv-scroll { overflow-x: auto; margin: 1rem 0 .9rem; }
.nv-map { border-collapse: collapse; width: 100%; font-size: .9rem; }
.nv-map th, .nv-map td {
  border-bottom: 1px solid var(--border); padding: .55rem .5rem; text-align: left;
}
.nv-map thead th {
  font: 800 .78rem 'Nunito', sans-serif; color: var(--muted);
  border-bottom: 2px solid var(--border); white-space: nowrap;
}
.nv-map tbody th { font-weight: 400; min-width: 15rem; }
.nv-map tbody th a { font-weight: 800; }
.nv-doc-title { display: block; font-size: .82rem; color: var(--muted); }
.nv-c { text-align: center; width: 2.3rem; font-size: 1.05rem; }
.nv-c abbr { text-decoration: none; border: 0; cursor: help; }
.nv-taken { background: var(--coral-bg); color: var(--coral-dark); }
.nv-part  { background: var(--warn-bg);  color: var(--warn); }
.nv-yours { background: var(--ok-bg);    color: var(--ok); }

.nv-legend {
  display: flex; flex-wrap: wrap; gap: .5rem 1.5rem;
  list-style: none; margin: 0 0 .4rem; padding: 0; font-size: .87rem;
}
.nv-key {
  display: inline-block; width: 1.5rem; text-align: center;
  border-radius: 4px; margin-right: .35rem;
}

/* --- evidence ------------------------------------------------------------- */
.nv-feat { margin: 0 0 1.6rem; }
.nv-feat h3 { font-size: 1rem; margin: 0 0 .5rem; }
.nv-starred {
  font: 700 .74rem 'Nunito', sans-serif; color: var(--coral-dark);
  letter-spacing: .04em; margin-left: .5rem;
}
.nv-feat-clear h3 { color: var(--muted); }
.nv-ev {
  margin: 0 0 .6rem; padding: .65rem .9rem; border-radius: 8px;
  border-left: 3px solid currentColor;
}
.nv-ev p { margin: 0 0 .3rem; font-size: .93rem; color: var(--text); }
.nv-ev cite {
  font: 700 .78rem 'Nunito', sans-serif; font-style: normal;
}

/* --- history -------------------------------------------------------------- */
.nv-recent { list-style: none; margin: 0; padding: 0; }
.nv-recent li {
  border-bottom: 1px solid var(--border); padding: .6rem 0;
  display: flex; flex-wrap: wrap; gap: .3rem .8rem; align-items: baseline;
}
.nv-recent span { font-size: .85rem; }

.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ===========================================================================
   The desk: sidebar, case pane, results pane.

   Everything above this line belongs to the wizard, which is a column of prose
   and must stay narrow enough to read. Everything below belongs to the report,
   which is a thing to operate and wants the window.

   The width override has to name .nv-shell. tm.css caps every direct child of
   .tm-page at 62rem through `.tm-page > *`, which is the same specificity as a
   bare class, so a `.nv-shell { max-width }` rule would depend on file order to
   win. `.tm-page > .nv-shell` does not, and margin-inline stays auto because
   dropping it is exactly the bug that hung the step list off the left edge.
   =========================================================================== */

.tm-page > .nv-shell { max-width: 88rem; margin-inline: auto; }

.nv-shell {
  display: grid; gap: 1.6rem;
  grid-template-columns: 13rem minmax(0, 20rem) minmax(0, 2.1fr);
  align-items: start; margin-bottom: 2.5rem;
}

/* One column below the point where three stop fitting. The order is the order
   of use: what did I search, then what came back, with the sidebar last
   because on a phone it is reference, not navigation. */
@media (max-width: 68rem) {
  .nv-shell { grid-template-columns: minmax(0, 1fr); }
  .nv-side  { order: 3; }
  .nv-query { order: 1; }
  .nv-results { order: 2; }
}

/* --- sidebar --------------------------------------------------------------- */
.nv-side { position: sticky; top: 1rem; font-size: .9rem; }
@media (max-width: 68rem) { .nv-side { position: static; } }

.nv-new {
  display: block; text-align: center; font: 800 .9rem 'Nunito', sans-serif;
  padding: .6rem 1rem; border-radius: 999px; background: var(--coral);
  color: #fff; text-decoration: none; margin-bottom: 1.3rem;
}
.nv-new:hover { background: var(--coral-dark); }

.nv-side-h {
  font: 800 .72rem 'Nunito', sans-serif; letter-spacing: .08em;
  text-transform: uppercase; color: var(--muted);
  margin: 0 0 .5rem; padding-bottom: .35rem; border-bottom: 1px solid var(--border);
}

.nv-facts { margin: 0 0 1.4rem; }
.nv-facts > div {
  display: flex; justify-content: space-between; gap: .5rem;
  padding: .3rem 0; border-bottom: 1px solid var(--border);
}
.nv-facts dt { color: var(--muted); }
.nv-facts dd { margin: 0; font-weight: 800; font-variant-numeric: tabular-nums; }

.nv-cases { list-style: none; margin: 0; padding: 0; }
.nv-cases li { padding: .45rem 0; border-bottom: 1px solid var(--border); }
.nv-cases li.on { border-left: 3px solid var(--coral); padding-left: .5rem; }
.nv-cases a { display: block; font-weight: 700; }
.nv-cases span { display: block; font-size: .8rem; }

/* --- case pane ------------------------------------------------------------- */
.nv-query h1 { font-size: 1.6rem; margin: 0 0 1rem; }

.nv-claimbox {
  background: var(--card); border: 1px solid var(--border); border-radius: 10px;
  padding: .8rem .9rem; font-size: .88rem; line-height: 1.6;
  max-height: 14rem; overflow-y: auto; margin-bottom: 1.3rem;
}

.nv-qfeat { list-style: none; counter-reset: nvq; margin: 0 0 .6rem; padding: 0; }
.nv-qfeat li {
  counter-increment: nvq; display: grid; grid-template-columns: 1.4rem minmax(0, 1fr);
  gap: .45rem; align-items: start; padding: .4rem 0;
  border-bottom: 1px solid var(--border); font-size: .89rem; line-height: 1.5;
}
.nv-qfeat .nv-c { text-align: left; width: auto; }
.nv-qfeat em {
  display: block; font: 700 .72rem 'Nunito', sans-serif; font-style: normal;
  color: var(--coral-dark); letter-spacing: .03em;
}

.nv-redo { margin-top: 1.2rem; font-size: .9rem; }
.nv-redo summary { cursor: pointer; font-weight: 800; color: var(--coral-dark); }
.nv-redo .nv-form { margin-top: .8rem; }

/* --- results: tabs --------------------------------------------------------- */
/* Radio inputs drive the panels so switching needs no script. The inputs are
   hidden from sight but not from the keyboard, and :focus-visible on the
   label's sibling gives the ring back. */
.nv-tabs > input[type=radio] { position: absolute; opacity: 0; pointer-events: none; }
.nv-tabs > label {
  display: inline-block; cursor: pointer;
  font: 800 .82rem 'Nunito', sans-serif; padding: .5rem .9rem;
  border-bottom: 3px solid transparent; color: var(--muted);
}
.nv-tabs > label:hover { color: var(--text); }
.nv-tabs > input:checked + label { color: var(--coral-dark); border-bottom-color: var(--coral); }
.nv-tabs > input:focus-visible + label { outline: 2px solid var(--coral); outline-offset: 2px; }

.nv-panel { display: none; padding-top: 1.1rem; border-top: 1px solid var(--border); margin-top: -3px; }
#nv-tab-docs:checked ~ #nv-panel-docs,
#nv-tab-feat:checked ~ #nv-panel-feat,
#nv-tab-stat:checked ~ #nv-panel-stat { display: block; }

/* --- results: toolbar ------------------------------------------------------ */
.nv-bar {
  display: flex; flex-wrap: wrap; gap: .6rem 1.1rem; align-items: center;
  margin-bottom: 1rem; font-size: .85rem;
}
.nv-bar label { font-weight: 700; display: flex; align-items: center; gap: .4rem; }
.nv-bar select {
  font: 400 .85rem 'Nunito Sans', sans-serif; padding: .35rem .5rem;
  border: 1px solid var(--border); border-radius: 8px;
  background: var(--card); color: var(--text);
}
.nv-bar #nv-shown { margin-left: auto; font-variant-numeric: tabular-nums; }
.nv-hl-box input {
  font: 400 .85rem 'Nunito Sans', sans-serif; padding: .35rem .5rem; width: 11rem;
  border: 1px solid var(--border); border-radius: 8px;
  background: var(--card); color: var(--text);
}
.nv-csv { font: 800 .82rem 'Nunito', sans-serif; white-space: nowrap; }

/* The site's warning amber, not the browser's default yellow, which fights the
   coral and looks like a rendering fault on the warm background. */
mark.nv-hl {
  background: var(--warn-bg); color: inherit;
  border-radius: 3px; padding: 0 .1em;
}

/* --- results: figures ------------------------------------------------------ */
/* Sized to be recognised, not studied: the point is "is this my idea", and the
   link to Espacenet is there for anyone who wants to read it properly. */
.nv-fig { margin: 0 0 1rem; }
.nv-fig img {
  display: block; max-width: 100%; width: auto; max-height: 22rem;
  border: 1px solid var(--border); border-radius: 8px;
  background: #fff;   /* patent scans are black on white and vanish on a dark ground */
  padding: .4rem;
}
.nv-fig figcaption { font-size: .78rem; margin-top: .35rem; }

.nv-readmore {
  display: flex; flex-wrap: wrap; gap: .5rem .9rem; align-items: center;
  margin: 0 0 1.4rem;
}
.nv-readmore button {
  font: 800 .9rem 'Nunito', sans-serif; padding: .6rem 1.2rem; border: 0;
  border-radius: 999px; background: var(--coral); color: #fff; cursor: pointer;
}
.nv-readmore button:hover { background: var(--coral-dark); }
.nv-readmore .nv-hint { margin: 0; flex: 1 1 14rem; }

/* --- results: rows --------------------------------------------------------- */
.nv-docs { list-style: none; margin: 0; padding: 0; counter-reset: nvd; }
.nv-doc { border-bottom: 1px solid var(--border); }
.nv-doc[hidden] { display: none; }

.nv-doc-head {
  display: grid; align-items: baseline; gap: .15rem .6rem; padding: .7rem 0;
  grid-template-columns: 1.6rem 3.1rem 2.1rem minmax(0, 1fr) auto;
  grid-template-areas:
    "star score cc title  open"
    ".    .     .  meta   meta";
}
@media (max-width: 34rem) {
  .nv-doc-head {
    grid-template-columns: 1.6rem 3.1rem minmax(0, 1fr) auto;
    grid-template-areas:
      "star score title title"
      ".    cc    meta  open";
  }
}

.nv-starform { grid-area: star; margin: 0; }
.nv-starbtn {
  background: none; border: 0; cursor: pointer; padding: 0; line-height: 1;
  font-size: 1.15rem; color: var(--border);
}
.nv-starbtn:hover { color: var(--warn); }
.nv-starbtn.on { color: var(--warn); }

/* The number is the point of the row, so it is set in tabular figures and
   given the weight. "Not read" is a dash in muted grey, never a zero: a zero
   would read as "irrelevant" when it means "nobody has looked". */
.nv-score {
  grid-area: score; font: 800 1.05rem 'Nunito', sans-serif;
  font-variant-numeric: tabular-nums; color: var(--coral-dark); text-align: right;
}
.nv-score small { font-size: .68em; font-weight: 700; }
.nv-score.none { color: var(--muted); font-weight: 400; }

.nv-doc-head .pa-cc { grid-area: cc; }
.nv-doc-head .nv-doc-title {
  grid-area: title; font-weight: 700; font-size: .95rem; line-height: 1.4;
  display: block; color: inherit;
}
.nv-doc-meta { grid-area: meta; font-size: .8rem; color: var(--muted); }

.nv-expand {
  grid-area: open; background: none; border: 1px solid var(--border);
  border-radius: 999px; padding: .2rem .7rem; cursor: pointer;
  font: 700 .76rem 'Nunito', sans-serif; color: var(--muted);
}
.nv-expand:hover { border-color: var(--coral); color: var(--coral-dark); }

.nv-doc-body { padding: .3rem 0 1.1rem 2.3rem; }
@media (max-width: 34rem) { .nv-doc-body { padding-left: 0; } }

.nv-marks { list-style: none; margin: 0 0 1rem; padding: 0; }
.nv-marks li {
  display: grid; grid-template-columns: 1.4rem minmax(0, 1fr); gap: .4rem;
  padding: .32rem 0; font-size: .88rem; line-height: 1.55;
}
.nv-marks .nv-c { text-align: left; width: auto; }
.nv-mark-txt q {
  display: block; quotes: '\201C' '\201D'; color: var(--muted);
  font-size: .85rem; margin-top: .12rem;
}

.nv-abs { font-size: .87rem; margin-bottom: 1rem; }
.nv-abs summary { cursor: pointer; font-weight: 700; color: var(--muted); }
.nv-abs p { margin: .5rem 0 0; line-height: 1.65; }

/* --- results: ask ---------------------------------------------------------- */
.nv-ask {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 10px; padding: .8rem .9rem;
}
.nv-ask label { display: block; font: 700 .82rem 'Nunito', sans-serif; margin-bottom: .4rem; }
.nv-ask input {
  width: 100%; margin-top: .3rem; font: 400 .9rem 'Nunito Sans', sans-serif;
  padding: .5rem .7rem; border: 1px solid var(--border); border-radius: 8px;
  background: var(--bg); color: var(--text);
}
.nv-ask-go {
  margin-top: .55rem; font: 800 .82rem 'Nunito', sans-serif;
  padding: .42rem 1rem; border: 0; border-radius: 999px;
  background: var(--coral); color: #fff; cursor: pointer;
}
.nv-ask-go:hover { background: var(--coral-dark); }
.nv-ask-go[disabled] { background: var(--muted); cursor: default; }
.nv-ask-out { margin-top: .7rem; font-size: .89rem; }
.nv-ask-out p { margin: 0 0 .4rem; }
.nv-ask-a { line-height: 1.65; }
.nv-ask-err { color: var(--coral-dark); font-weight: 700; }

/* --- looking back at a finished step --------------------------------------- */
/* Prose, not a workbench, so it keeps tm.css's 62rem column and none of the
   dashboard's width. The body only gets .nv-wide when the desk is on screen. */
.nv-look h1 { margin-bottom: .6rem; }
.nv-look-text { max-height: none; font-size: .95rem; line-height: 1.7; }
.nv-look-features { counter-reset: nvf; }
.nv-look-features li { grid-template-columns: 1.9rem minmax(0, 1fr); }
.nv-look-features em {
  display: block; font: 700 .72rem 'Nunito', sans-serif; font-style: normal;
  color: var(--coral-dark); letter-spacing: .03em;
}
.nv-look-queries { padding-left: 1.3rem; }
.nv-look-queries li { margin-bottom: .35rem; }
.nv-look-back { margin-top: 2rem; font-weight: 800; }

/* --- results: statistics --------------------------------------------------- */
.nv-chart { list-style: none; margin: .6rem 0 1.4rem; padding: 0; }
.nv-chart li {
  display: grid; grid-template-columns: 3rem minmax(0, 1fr) 2.4rem;
  align-items: center; gap: .6rem; padding: .22rem 0;
}
.nv-barfill {
  display: block; height: .72rem; border-radius: 3px;
  background: var(--coral); min-width: 2px; opacity: .78;
}
.nv-barnum {
  font: 700 .82rem 'Nunito', sans-serif; font-variant-numeric: tabular-nums;
  color: var(--muted);
}
