/* ==========================================================================
   Piston Tribe: notifications
   Header badges · bell dropdown · /account/notifications/ · mobile sheet
   Source of truth: notifications-mockup.html (Plan/)

   RULES FOR THIS FILE
   - Copy it in as-is. Don't round, rename or "tidy" values.
   - Every selector is prefixed .pt-nt-, and nothing here styles bare
     elements globally.
   - Load it on every front-end page, because the header dropdown is
     site-wide.
   - Tokens marked ASSUMED: if design-tokens.md has a different value,
     report it. Don't silently swap it.
   ========================================================================== */

:root{
  --pt-nt-ink:#1A1A1A;
  --pt-nt-paper:#FAF9F6;
  --pt-nt-white:#FFFFFF;
  --pt-nt-graphite:#23211E;
  --pt-nt-bone:#EFEBE3;
  --pt-nt-sunk:#F3F1EB;          /* ASSUMED */
  --pt-nt-line:#E4E2DB;
  --pt-nt-line-strong:#C9C7BF;
  --pt-nt-accent:#185FA5;
  --pt-nt-amber:#B26A00;         /* ASSUMED, same amber as the my-reviews tiles */
  --pt-nt-green:#1F6B45;         /* ASSUMED */
  --pt-nt-muted:#78746C;         /* ASSUMED */
  --pt-nt-soft:#55524C;          /* ASSUMED */
  --pt-nt-band-text:#F3F1EB;
  --pt-nt-band-dim:#AFA89C;
  --pt-nt-band-line:#3A3631;
  --pt-nt-sans:"Inter","Helvetica Neue",Arial,sans-serif;
  --pt-nt-mono:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Consolas,monospace;
  --pt-nt-header-h:var(--pt-header-h,72px);  /* uses the site's existing header height */
}

.pt-nt-scope,.pt-nt-scope *{box-sizing:border-box}
.pt-nt-scope{font-family:var(--pt-nt-sans);-webkit-font-smoothing:antialiased}
.pt-nt-scope :focus-visible{outline:2px solid var(--pt-nt-accent);outline-offset:2px}
.pt-nt-scope [hidden]{display:none!important}

/* --------------------------------------------------------------------------
   1. Header icon buttons (deals + bell)
   Only these two icons change. Don't restyle the rest of the header.
   -------------------------------------------------------------------------- */
.pt-nt-hbtn{
  position:relative;width:44px;height:44px;padding:0;margin:0;
  display:inline-flex;align-items:center;justify-content:center;
  background:none;border:0;border-radius:0;color:var(--pt-nt-ink);cursor:pointer;
}
.pt-nt-hbtn:hover,.pt-nt-hbtn[aria-expanded="true"]{background:var(--pt-nt-sunk)}
.pt-nt-hbtn svg{width:22px;height:22px;display:block}

/* Deals: amber count of deals waiting on you. Hidden at 0. Shows 1–9, then "9+". */
.pt-nt-count{
  position:absolute;top:4px;right:2px;
  min-width:18px;height:18px;padding:0 4px;
  background:var(--pt-nt-amber);color:#fff;
  font:600 11px/18px var(--pt-nt-mono);text-align:center;
  border-radius:0;pointer-events:none;
}

/* Bell: plain ink dot when anything is unseen. No number, and never red. */
.pt-nt-dot{
  position:absolute;top:10px;right:10px;
  width:8px;height:8px;border-radius:50%;
  background:var(--pt-nt-ink);box-shadow:0 0 0 2px var(--pt-nt-white);
  pointer-events:none;
}

/* --------------------------------------------------------------------------
   2. Bell dropdown (desktop / tablet). Below 640px it becomes a sheet (section 6).
   Anchor: the header's icon group must be position:relative.
   -------------------------------------------------------------------------- */
.pt-nt-drop{
  position:absolute;top:calc(100% + 6px);right:0;z-index:1000;
  width:420px;max-width:calc(100vw - 24px);
  background:var(--pt-nt-white);border:1px solid var(--pt-nt-line);border-radius:0;
  box-shadow:0 12px 32px rgba(26,26,26,.14);
  color:var(--pt-nt-ink);text-align:left;
}
.pt-nt-drop-head{
  display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:14px 16px;border-bottom:1px solid var(--pt-nt-line);
}
.pt-nt-drop-title{font-size:15px;font-weight:700;margin:0;line-height:1.3}
.pt-nt-drop-tools{display:flex;align-items:center;gap:8px}
.pt-nt-drop-close{display:none;width:32px;height:32px;padding:0;background:none;border:0;align-items:center;justify-content:center;cursor:pointer;color:var(--pt-nt-ink)}
.pt-nt-drop-list{max-height:480px;overflow-y:auto;overscroll-behavior:contain}
.pt-nt-drop-foot{
  display:flex;justify-content:space-between;align-items:center;
  padding:12px 16px;border-top:1px solid var(--pt-nt-line);font-size:13.5px;
}
.pt-nt-drop-empty{padding:28px 16px;font-size:14px;color:var(--pt-nt-muted);text-align:center}
.pt-nt-drop-loading{padding:28px 16px;font:12px var(--pt-nt-mono);color:var(--pt-nt-muted);text-align:center}

/* Text links used in dropdown and page toolbar */
.pt-nt-link{
  background:none;border:0;padding:0;margin:0;cursor:pointer;
  font:inherit;font-size:13.5px;color:var(--pt-nt-accent);text-decoration:none;
}
.pt-nt-link:hover{text-decoration:underline;text-underline-offset:3px}
.pt-nt-link.is-muted{color:var(--pt-nt-muted)}

/* --------------------------------------------------------------------------
   3. Notification row (the same component in the dropdown and on the page)

   Markup (see brief section 8):
   <div class="pt-nt-row is-unread">
     <span class="pt-nt-gut"><span class="pt-nt-udot"></span></span>
     <span class="pt-nt-thumb">…img…</span>
     <div class="pt-nt-body">
       <p class="pt-nt-title"><a class="pt-nt-hit" href="…">…</a></p>
       <p class="pt-nt-sub">…</p>
       <div class="pt-nt-act"><a class="pt-nt-btn" href="…">Reply</a></div>
     </div>
     <time class="pt-nt-time" datetime="…">2h</time>
   </div>

   Columns: 8px dot gutter | 40px thumb | text | time
   -------------------------------------------------------------------------- */
.pt-nt-row{
  position:relative;
  display:grid;grid-template-columns:8px 40px minmax(0,1fr) auto;
  column-gap:12px;align-items:start;
  padding:16px 18px 16px 12px;
  background:var(--pt-nt-white);border-bottom:1px solid var(--pt-nt-line);
  color:var(--pt-nt-ink);text-decoration:none;
}
.pt-nt-row:hover{background:var(--pt-nt-paper)}
.pt-nt-drop .pt-nt-row{padding:14px 16px 14px 10px}
.pt-nt-drop .pt-nt-row:last-child{border-bottom:0}

/* Unread dot: its own gutter, vertically centred on the 40px thumbnail */
.pt-nt-gut{display:flex;align-items:center;height:40px}
.pt-nt-udot{width:8px;height:8px;border-radius:50%;background:var(--pt-nt-ink);flex:none}

/* Thumbnails: 40×40. The file served must be at least 80×80 for 2x screens. */
.pt-nt-thumb{
  width:40px;height:40px;flex:none;overflow:hidden;display:block;
  border:1px solid var(--pt-nt-line);background:var(--pt-nt-sunk);border-radius:0;
}
.pt-nt-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.pt-nt-thumb.is-person{border-radius:50%;border:0}
.pt-nt-thumb.is-icon{display:flex;align-items:center;justify-content:center;background:var(--pt-nt-sunk)}
.pt-nt-thumb.is-icon svg{width:18px;height:18px;display:block}

/* Grouped people: up to 3 overlapping avatars inside the same 40×40 box */
.pt-nt-stack{position:relative;width:40px;height:40px;display:block}
.pt-nt-stack img,.pt-nt-stack span{
  position:absolute;width:26px;height:26px;border-radius:50%;
  border:2px solid var(--pt-nt-white);object-fit:cover;background:var(--pt-nt-sunk);
}
.pt-nt-stack > :nth-child(1){left:0;top:0}
.pt-nt-stack > :nth-child(2){left:14px;top:6px}
.pt-nt-stack > :nth-child(3){left:6px;top:14px}

.pt-nt-body{min-width:0}
.pt-nt-title{margin:0;font-size:14.5px;line-height:1.4;font-weight:400;color:var(--pt-nt-soft)}
.pt-nt-title b,.pt-nt-title strong{font-weight:600;color:var(--pt-nt-ink)}
.pt-nt-row.is-unread .pt-nt-title{color:var(--pt-nt-ink)}
.pt-nt-row.is-unread .pt-nt-title b,.pt-nt-row.is-unread .pt-nt-title strong{font-weight:700}

/* The title link stretches over the whole row, so the row is one big target */
.pt-nt-hit{color:inherit;text-decoration:none}
.pt-nt-hit::after{content:"";position:absolute;inset:0;z-index:1}
.pt-nt-hit:focus-visible{outline:none}
.pt-nt-hit:focus-visible::after{outline:2px solid var(--pt-nt-accent);outline-offset:-2px}

.pt-nt-sub{
  margin:2px 0 0;font-size:13.5px;line-height:1.45;color:var(--pt-nt-muted);
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;
}
.pt-nt-money,.pt-nt-ref{font-family:var(--pt-nt-mono);font-size:12.5px;color:var(--pt-nt-ink)}
.pt-nt-was{text-decoration:line-through}
.pt-nt-stars{display:inline-flex;gap:1px;vertical-align:-1px;margin-right:4px}
.pt-nt-stars svg{width:12px;height:12px;display:block}   /* ink fill, never orange */

/* The inline action sits above the stretched link so it stays clickable */
.pt-nt-act{margin-top:8px;position:relative;z-index:2}
.pt-nt-btn{
  display:inline-flex;align-items:center;height:32px;padding:0 12px;
  border:1px solid var(--pt-nt-ink);border-radius:0;background:var(--pt-nt-white);
  font:600 13px var(--pt-nt-sans);color:var(--pt-nt-ink);text-decoration:none;cursor:pointer;
}
.pt-nt-btn:hover{background:var(--pt-nt-ink);color:var(--pt-nt-paper)}

.pt-nt-time{
  font:12px/1.4 var(--pt-nt-mono);color:var(--pt-nt-muted);
  white-space:nowrap;text-align:right;padding-top:2px;
}
.pt-nt-row.is-unread .pt-nt-time{color:var(--pt-nt-ink)}

/* --------------------------------------------------------------------------
   4. /account/notifications/ page
   If the my-reviews band partial exists, reuse it. These rules are identical.
   -------------------------------------------------------------------------- */
.pt-nt-page{background:var(--pt-nt-paper);color:var(--pt-nt-ink)}
.pt-nt-wrap{max-width:1180px;margin:0 auto;padding:0 32px}

.pt-nt-band{background:var(--pt-nt-graphite);color:var(--pt-nt-band-text);padding:30px 0 26px}
.pt-nt-band-rule{
  display:flex;justify-content:space-between;gap:16px;
  font:12.5px var(--pt-nt-mono);color:var(--pt-nt-band-dim);
  border-bottom:1px solid var(--pt-nt-band-line);padding-bottom:12px;margin-bottom:22px;
}
.pt-nt-band h1{font-size:36px;line-height:1.1;font-weight:800;letter-spacing:-.03em;margin:0 0 6px;color:var(--pt-nt-band-text)}
.pt-nt-band p{margin:0;font-size:15px;line-height:1.5;color:var(--pt-nt-band-dim);max-width:640px}

.pt-nt-bar{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;padding:20px 0 14px}
.pt-nt-chips{display:flex;gap:6px;flex-wrap:wrap}
.pt-nt-chip{
  display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;
  border:1px solid var(--pt-nt-line-strong);border-radius:0;background:var(--pt-nt-white);
  font:600 13.5px var(--pt-nt-sans);color:var(--pt-nt-ink);text-decoration:none;cursor:pointer;white-space:nowrap;
}
.pt-nt-chip:hover{border-color:var(--pt-nt-ink)}
.pt-nt-chip-count{font:400 12px var(--pt-nt-mono);color:var(--pt-nt-muted)}
.pt-nt-chip[aria-current="page"]{background:var(--pt-nt-ink);border-color:var(--pt-nt-ink);color:var(--pt-nt-paper)}
.pt-nt-chip[aria-current="page"] .pt-nt-chip-count{color:var(--pt-nt-bone)}
.pt-nt-tools{display:flex;gap:18px;align-items:center;font-size:13.5px}

/* Pointer to the Deals inbox. Only rendered when the count is above 0. */
.pt-nt-deals{
  display:flex;justify-content:space-between;align-items:center;gap:16px;
  margin:0 0 20px;padding:12px 16px;
  background:var(--pt-nt-sunk);border-left:2px solid var(--pt-nt-ink);
  font-size:14px;line-height:1.45;
}
.pt-nt-deals-n{font:600 14px var(--pt-nt-mono);color:var(--pt-nt-amber)}

.pt-nt-group{font-size:13px;font-weight:700;color:var(--pt-nt-muted);margin:0;padding:18px 0 8px;border-bottom:1px solid var(--pt-nt-ink)}
.pt-nt-list{border-left:1px solid var(--pt-nt-line);border-right:1px solid var(--pt-nt-line)}
.pt-nt-more{text-align:center;padding:24px 0 8px}
.pt-nt-more .pt-nt-btn{height:44px;padding:0 20px;font-size:14.5px}
.pt-nt-end{text-align:center;font-size:13px;color:var(--pt-nt-muted);margin:0;padding:6px 0 48px}
.pt-nt-empty{padding:40px 0 56px;font-size:14.5px;color:var(--pt-nt-muted)}

/* --------------------------------------------------------------------------
   5. Tablet
   -------------------------------------------------------------------------- */
@media (max-width:900px){
  .pt-nt-drop{right:0}
}

/* --------------------------------------------------------------------------
   6. Phone (≤640px)
   The bell becomes a full-screen sheet under the header.
   The page's chips scroll sideways and rows run edge to edge.
   -------------------------------------------------------------------------- */
@media (max-width:640px){
  .pt-nt-drop{
    position:fixed;top:var(--pt-nt-header-h);left:0;right:0;bottom:0;
    width:auto;max-width:none;border:0;border-top:1px solid var(--pt-nt-line);box-shadow:none;
    display:flex;flex-direction:column;
  }
  .pt-nt-drop[hidden]{display:none!important}
  .pt-nt-drop-close{display:inline-flex}
  .pt-nt-drop-list{max-height:none;flex:1 1 auto;min-height:0}
  .pt-nt-drop-foot{padding:14px 16px calc(14px + env(safe-area-inset-bottom,0px))}
  .pt-nt-drop .pt-nt-row{padding:14px 16px 14px 8px;column-gap:10px}

  .pt-nt-wrap{padding:0 16px}
  .pt-nt-band{padding:22px 0 20px}
  .pt-nt-band h1{font-size:28px}
  .pt-nt-band p{font-size:14px}
  .pt-nt-bar{display:block;padding:14px 0 10px}
  .pt-nt-chips{flex-wrap:nowrap;overflow-x:auto;margin:0 -16px;padding:0 16px;scrollbar-width:none;min-width:0}
  .pt-nt-chips::-webkit-scrollbar{display:none}
  .pt-nt-chip{flex:none}
  .pt-nt-tools{display:flex;justify-content:space-between;margin-top:12px}
  .pt-nt-deals{flex-direction:column;align-items:flex-start;gap:6px;font-size:13.5px}
  .pt-nt-group{padding-top:14px}
  .pt-nt-list{border-left:0;border-right:0;margin:0 -16px}
  .pt-nt-row{padding:14px 16px 14px 8px;column-gap:10px}
  .pt-nt-title{font-size:14px}
  .pt-nt-sub{font-size:13px}
}

/* Body lock while the phone sheet is open (JS adds the class) */
@media (max-width:640px){
  body.pt-nt-sheet-open{overflow:hidden}
}

/* ==========================================================================
   OVERRIDES — added on the rollout (29 Sep 2026). Everything above this line is
   Plan/pt-notifications.css byte for byte; everything below documents why the
   live site needs more than the mockup did. Same .pt-nt- prefix, same tokens.
   ========================================================================== */

/* O1. The header. The icon group is the dropdown's anchor (the file's own note in §2). Every header icon is
   now 44px with a 22px glyph (header-footer-global.css, Leon 29 Sep 16:23), so nothing here resizes; the two
   rules below only keep the site's old phone rule `.pt-header-icons .pt-hdr-icon` (0,2,0) from ever beating
   the file's `.pt-nt-hbtn` (0,1,0). The dropdown's right edge lands under the basket icon, clear of the avatar,
   as the mockup hangs it (`right:84px` there = the avatar and its gap): 50px = the avatar's 44px + the 6px gap.
   The bell is a LINK to /account/notifications/ — the dropdown opens on hover (mouse only) and a click goes to
   the page (Leon, 16:23). On phones there is no hover, so a tap goes straight to the page; the sheet rules in
   §6 stay in the file but nothing opens them. */
.pt-header-icons{position:relative}
.pt-header-icons .pt-nt-hbtn{width:44px;height:44px}
.pt-header-icons .pt-nt-hbtn svg{width:22px;height:22px}
.pt-header-icons .pt-nt-drop{right:50px}
@media (max-width:1100px){
  .pt-header-icons .pt-nt-drop{right:54px}   /* 44px avatar + the 10px phone gap */
}
@media (max-width:640px){
  .pt-header-icons .pt-nt-drop{right:0;z-index:9500}
}
/* Hover-open needs a bridge: the 6px gap between the bell and the panel would otherwise count as leaving both. */
.pt-header-icons .pt-nt-drop::before{content:"";position:absolute;left:0;right:0;top:-8px;height:8px}

/* O2. §5a — GeneratePress prints `button:hover, button:focus { background:#333; color:#fff }` inline on
   every page and the child theme sets `button { color:#fff; background:#000 }`. Every <button> in this
   component restates background AND colour in :hover, :focus and :active. The header pair also loses the
   site's shared `.pt-hdr-icon:hover { opacity:.65 }` so they behave like the mockup (sunk fill, full ink). */
.pt-header-icons .pt-nt-hbtn,
.pt-header-icons .pt-nt-hbtn:focus,
.pt-header-icons .pt-nt-hbtn:active{background:none;color:var(--pt-nt-ink);opacity:1;box-shadow:none;border:0;outline:none}
.pt-header-icons .pt-nt-hbtn:hover,
.pt-header-icons .pt-nt-hbtn:focus:hover,
.pt-header-icons .pt-nt-hbtn[aria-expanded="true"],
.pt-header-icons .pt-nt-hbtn[aria-expanded="true"]:focus{background:var(--pt-nt-sunk);color:var(--pt-nt-ink);opacity:1}
.pt-header-icons .pt-nt-hbtn:focus-visible{outline:2px solid var(--pt-nt-accent);outline-offset:2px}

.pt-nt-scope .pt-nt-link,
.pt-nt-scope .pt-nt-link:focus,
.pt-nt-scope .pt-nt-link:active{background:none;color:var(--pt-nt-accent);text-transform:none;letter-spacing:0;box-shadow:none}
.pt-nt-scope .pt-nt-link:hover{background:none;color:var(--pt-nt-accent);text-decoration:underline;text-underline-offset:3px}
.pt-nt-scope .pt-nt-link.is-muted,
.pt-nt-scope .pt-nt-link.is-muted:hover,
.pt-nt-scope .pt-nt-link.is-muted:focus,
.pt-nt-scope .pt-nt-link.is-muted:active{color:var(--pt-nt-muted)}

.pt-nt-scope .pt-nt-drop-close,
.pt-nt-scope .pt-nt-drop-close:focus,
.pt-nt-scope .pt-nt-drop-close:active{background:none;color:var(--pt-nt-ink);box-shadow:none}
.pt-nt-scope .pt-nt-drop-close:hover{background:var(--pt-nt-sunk);color:var(--pt-nt-ink)}

.pt-nt-scope .pt-nt-btn,
.pt-nt-scope .pt-nt-btn:focus,
.pt-nt-scope .pt-nt-btn:active{background:var(--pt-nt-white);color:var(--pt-nt-ink);text-transform:none;letter-spacing:0;box-shadow:none;line-height:1}
.pt-nt-scope .pt-nt-btn:hover{background:var(--pt-nt-ink);color:var(--pt-nt-paper)}

/* O3. Theme resets inside the component. GeneratePress uppercases `.site-content h1`, gives `p` and `h2`
   their own margins, and the child theme paints `a` with the accent. The rows and headings restate what the
   mockup assumed of a clean document. */
.site-content .pt-nt-band h1,.pt-nt-band h1{text-transform:none;letter-spacing:-.03em}
/* The account page's own heading rule — `body.woocommerce-account .woocommerce-MyAccount-content h2` with
   `!important` on size and weight, uppercase, #555 and a 40px margin — would restyle every day heading.
   Restated at higher specificity with the same `!important`, so the mockup's 13px/700 muted heading with its
   1px ink rule survives; the dropdown title gets the same treatment against `.woocommerce-account h2`. */
.pt-nt-scope h2.pt-nt-group,
body.woocommerce-account .woocommerce-MyAccount-content .pt-nt-scope h2.pt-nt-group{
  font-size:13px!important;font-weight:700!important;text-transform:none;letter-spacing:0;line-height:1.4;
  color:var(--pt-nt-muted);border-bottom:1px solid var(--pt-nt-ink)!important;margin:0!important;padding:18px 0 8px!important;
}
.pt-nt-scope .pt-nt-drop-title,
body.woocommerce-account .pt-nt-scope h2.pt-nt-drop-title{
  font-size:15px!important;font-weight:700!important;text-transform:none;letter-spacing:0;line-height:1.3;
  color:var(--pt-nt-ink);border-bottom:0;margin:0!important;padding:0;
}
.pt-nt-scope .pt-nt-title,.pt-nt-scope .pt-nt-sub{margin-bottom:0}
.pt-nt-scope .pt-nt-hit,.pt-nt-scope .pt-nt-hit:hover,.pt-nt-scope .pt-nt-hit:focus{color:inherit;text-decoration:none}
.pt-nt-scope .pt-nt-chip,.pt-nt-scope .pt-nt-chip:hover,.pt-nt-scope .pt-nt-chip:focus{text-decoration:none}
.pt-nt-scope .pt-nt-chip:hover{color:var(--pt-nt-ink)}
.pt-nt-scope .pt-nt-chip[aria-current="page"],.pt-nt-scope .pt-nt-chip[aria-current="page"]:hover,.pt-nt-scope .pt-nt-chip[aria-current="page"]:focus{color:var(--pt-nt-paper)}
.pt-nt-scope .pt-nt-deals a{color:var(--pt-nt-accent)}
.pt-nt-scope .pt-nt-thumb img{margin:0;border-radius:0}
.pt-nt-scope .pt-nt-thumb.is-person img{border-radius:50%}
.pt-nt-scope .pt-nt-stack img{margin:0}
.pt-nt-scope .pt-nt-thumb.is-icon svg{stroke:var(--pt-nt-ink)}

/* O4. The account page prints this endpoint inside its own content column. The band and the paper background
   run edge to edge the way the About and auth screens do (same full-bleed trick), and the rows sit inside
   the mockup's 1180px wrap. */
.pt-nt-page{margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);width:100vw;max-width:100vw;overflow-x:clip;min-height:60vh}
.pt-nt-page main.pt-nt-wrap{padding-bottom:56px}

/* O5. The phone sheet: `hidden` wins over the sheet's display:flex (already in the file), and the body lock
   is only applied while it is open. The header is 60px at this width; --pt-header-h is measured live by
   header-footer-global.js, and the fallback matches the header rule at ≤1100px. */
@media (max-width:640px){
  .pt-header-icons .pt-nt-drop{top:var(--pt-header-h,60px)}
}

/* O6. Desktop: the chips + tools row sticks under the fixed header while the list scrolls (Leon 29 Sep 16:23).
   Paper background so rows pass beneath it; phones keep the mockup's flowing bar. */
@media (min-width:641px){
  .pt-nt-page .pt-nt-bar{position:sticky;top:var(--pt-header-h,72px);z-index:5;background:var(--pt-nt-paper)}
}

/* O7. The inline action sits on the RIGHT of the row, under the time, instead of beneath the text (Leon 29 Sep
   16:23). The row gains a second grid row: gutter, thumb and text span both; the time takes row 1 of the last
   column and the action row 2, right-aligned. `.pt-nt-act` is a direct child of the row for this (pt_nt_row_html);
   the stretched title link still covers the row and the action still sits above it (z-index 2, from the file).
   Phones keep the mockup's placement: the action under the text. */
.pt-nt-row{grid-template-rows:auto auto}
/* Every cell is placed explicitly (a grouped row's thumb is `.pt-nt-stack`, not `.pt-nt-thumb`, and auto-placement
   would seat the text in the 40px column). */
.pt-nt-row > .pt-nt-gut{grid-column:1;grid-row:1 / 3}
.pt-nt-row > .pt-nt-thumb,.pt-nt-row > .pt-nt-stack{grid-column:2;grid-row:1 / 3}
.pt-nt-row > .pt-nt-body{grid-column:3;grid-row:1 / 3}
.pt-nt-row > .pt-nt-time{grid-column:4;grid-row:1}
.pt-nt-row > .pt-nt-act{grid-column:4;grid-row:2;justify-self:end;align-self:start;margin-top:6px}
@media (max-width:640px){
  .pt-nt-row > .pt-nt-body{grid-row:1}
  .pt-nt-row > .pt-nt-act{grid-column:3;grid-row:2;justify-self:start;margin-top:8px}
}
