/* =========================================================
   TYPE SYSTEM — one self-hosted family, Inter (variable, 100–900),
   for everything: headings, body, UI. No CDN. v1.43.1 replaced the
   Caslon + Nunito pairing with Inter at the client's request.
   ========================================================= */
@font-face{
  font-family:"Inter";
  font-style:italic;
  font-weight:100 900;
  font-display:swap;
  src:url("../fonts/inter-variable-italic-latin-ext.426540d878df.woff2") format("woff2");
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:"Inter";
  font-style:italic;
  font-weight:100 900;
  font-display:swap;
  src:url("../fonts/inter-variable-italic-latin.6960e1e36129.woff2") format("woff2");
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:"Inter";
  font-style:normal;
  font-weight:100 900;
  font-display:swap;
  src:url("../fonts/inter-variable-normal-latin-ext.e7fdb0113866.woff2") format("woff2");
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:"Inter";
  font-style:normal;
  font-weight:100 900;
  font-display:swap;
  src:url("../fonts/inter-variable-normal-latin.e990806dbc9b.woff2") format("woff2");
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root{
  --ink:#26292d;
  --teal:#587B7F;
  --teal-dark:#3F5A5D;
  --gold:#d4b73c;        /* logo yellow */
  --gold-ink:#8a6d10;    /* yellow readable as text */
  --hover:#f8f0d4;       /* gold tint for hovered rows, cells and menu items */
  --bg:#f4f2ec;          /* warm off-white */
  --muted:#5f6267;
  --border:#e2ded4;
  /* Surface + soft-divider variables — introduced alongside dark mode so
     every card/panel/table background and hairline divider routes through
     a variable instead of a hardcoded #fff/#f0f0f0/etc. Consolidates what
     used to be ~10 near-identical light grays scattered through this file. */
  --surface:#fffdf8;
  --surface-alt:#f9f7f1;
  --border-soft:#eeeae1;
  --input-border:#d8d8d8;
  --font-body:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-heading:var(--font-body);
  /* Type scale — the two-font system stays consistent by routing every
     heading/body size declaration through these, rather than ad hoc
     one-off pixel values. */
  --fs-scale:1;    /* A- / A+ in the preferences menu set html[data-fs] */
  --fs-xxs:calc(11.5px * var(--fs-scale));   /* badges, pills, tiny labels */
  --fs-xs:calc(12.5px * var(--fs-scale));    /* meta text, captions */
  --fs-sm:calc(14px * var(--fs-scale));      /* secondary UI, table cells, nav */
  --fs-base:calc(15px * var(--fs-scale));    /* body */
  --fs-md:calc(16px * var(--fs-scale));      /* lead paragraphs, card titles */
  --fs-lg:calc(18px * var(--fs-scale));      /* large body / h4 */
  --fs-h3:calc(17px * var(--fs-scale));
  --fs-h2:calc(20px * var(--fs-scale));
  --fs-h1:calc(26px * var(--fs-scale));
  --fs-xl:calc(22px * var(--fs-scale));      /* stat numbers, section intros */
  --fs-display:calc(30px * var(--fs-scale));
  --fs-hero:calc(36px * var(--fs-scale));
  --radius:0;      /* square corners everywhere except circles */
  /* Real rendered header height (10px+10px padding + 56px logo + 1px
     border ≈ 77px, rounded up). Used to offset sticky elements below the
     header so they don't tuck under it. */
  --header-h:48px;
}
html[data-fs="s"]{--fs-scale:.9;}
html[data-fs="l"]{--fs-scale:1.12;}
html[data-fs="xl"]{--fs-scale:1.26;}

/* =========================================================
   DARK MODE — self-coded, no theming library. Toggled by
   static/js/theme_toggle.js, which sets data-theme="dark" on <html>
   and persists the choice in localStorage (falls back to the OS-level
   prefers-color-scheme when the person has never toggled it). An inline
   snippet in templates/base.html's <head> applies the saved/system
   preference before first paint, so there's no flash of the wrong theme.

   Brand colors (--teal/--teal-dark/--gold) stay the same values in both
   themes so button/badge contrast ratios validated in light mode aren't
   quietly changed — only the neutral surface/text/border scale flips.
   A handful of components use a translucent brand-color wash as a
   background (badges, chips, status pills) which reads fine on a light
   --bg but goes muddy on a dark one, so those get explicit overrides
   below rather than relying on the neutral variables alone. */
html[data-theme="dark"]{
  --ink:#E7EAEC;
  --hover:#2e2a1c;
  --gold-ink:#e3c84a;
  --bg:#14171a;
  --muted:#A7ADB3;
  --border:#2B3234;
  --surface:#1B2123;
  --surface-alt:#20272A;
  --border-soft:#262D2F;
  --input-border:#3A4245;
}
html[data-theme="dark"] .badge-pinned{background:rgba(226,192,68,0.22); color:#f0d878;}
html[data-theme="dark"] .badge-locked{background:rgba(230,90,80,0.2); color:#f2a8a1;}
html[data-theme="dark"] .badge-review{background:rgba(230,126,34,0.22); color:#f0b877;}
html[data-theme="dark"] .status-open{background:rgba(226,192,68,0.22); color:#f0d878;}
html[data-theme="dark"] .status-answered,
html[data-theme="dark"] .status-delivered,
html[data-theme="dark"] .level-pill,
html[data-theme="dark"] .admin-stat-num{background:rgba(121,166,170,0.22); color:#9cc8cc;}
html[data-theme="dark"] .status-sending,
html[data-theme="dark"] .status-opened{background:rgba(226,192,68,0.22); color:#f0d878;}
html[data-theme="dark"] .status-failed,
html[data-theme="dark"] .status-bounced,
html[data-theme="dark"] .status-blocked{background:rgba(230,90,80,0.2); color:#f2a8a1;}
html[data-theme="dark"] .quiz-result.passed{background:rgba(90,180,120,0.18); color:#8fd6a8;}
html[data-theme="dark"] .quiz-result.failed{background:rgba(230,90,80,0.18); color:#f2a8a1;}
html[data-theme="dark"] .points-badge{background:rgba(226,192,68,0.22); color:#f0d878;}
html[data-theme="dark"] .chip{background:rgba(121,166,170,0.22); color:#9cc8cc;}
html[data-theme="dark"] .chip button{color:#9cc8cc;}
html[data-theme="dark"] .lang-option.active{background:rgba(121,166,170,0.18); color:#9cc8cc;}
html[data-theme="dark"] .messages li{background:rgba(121,166,170,0.16); color:#9cc8cc;}
html[data-theme="dark"] .dm-message.own .dm-message-text{background:rgba(121,166,170,0.2);}
html[data-theme="dark"] .dm-list-item.active{background:rgba(121,166,170,0.16);}
html[data-theme="dark"] .notif-item.notif-unread{background:rgba(121,166,170,0.1);}
html[data-theme="dark"] .ticket-reply-staff{background:rgba(121,166,170,0.12);}
html[data-theme="dark"] .admin-stat-card.is-alert{background:rgba(230,90,80,0.12);}
html[data-theme="dark"] .lesson-locked,
html[data-theme="dark"] .fpost-review-placeholder{background:rgba(230,150,60,0.14); color:#e8bd88; border-color:rgba(230,150,60,0.4);}
html[data-theme="dark"] .newsletter-preview-frame{background:#1f2325;}
html[data-theme="dark"] .newsletter-preview-frame iframe{background:var(--surface);}
html[data-theme="dark"] input, html[data-theme="dark"] textarea, html[data-theme="dark"] select{
  background:var(--surface); color:var(--ink);
}
html[data-theme="dark"] .wysiwyg-editor:empty:before{color:#7d8388;}

*{box-sizing:border-box;}
body{
  margin:0;
  background:var(--bg);
  color:var(--ink);
  font-family:var(--font-body);
  font-size:var(--fs-base);
  line-height:1.45;
}
h1,h2,h3,h4{
  font-family:var(--font-heading);
  font-weight:600;
  line-height:1.25;
  letter-spacing:-0.01em;
  margin:0 0 10px;
}
h1{font-size:var(--fs-h1);}
h2{font-size:var(--fs-h2);}
h3,h4{font-size:var(--fs-h3);}
a{color:var(--teal); text-decoration:none;}
a:hover{text-decoration:underline;}
.wrap{max-width:900px; margin:0 auto; padding:0 24px;}
.wrap-wide{max-width:1480px;}

.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;
}

.lang-flag{
  display:inline-block; width:18px; height:13px; border-radius:0; flex:none;
  border:1px solid rgba(0,0,0,0.15); background-size:cover; background-position:center;
}
.lang-flag-es{background:linear-gradient(to bottom, #AA151B 25%, #F1BF00 25%, #F1BF00 75%, #AA151B 75%);}
.lang-flag-cat{background:repeating-linear-gradient(to bottom, #FCDD09 0, #FCDD09 11.11%, #DA121A 11.11%, #DA121A 22.22%);}
.lang-flag-val{background:repeating-linear-gradient(to bottom, #FCDD09 0, #FCDD09 11.11%, #DA121A 11.11%, #DA121A 22.22%), linear-gradient(to right, #00389B 30%, transparent 30%); background-blend-mode:normal;}
.lang-flag-eus{background:#D52B1E; background-image:linear-gradient(45deg, transparent 46%, #FFF 46%, #FFF 54%, transparent 54%), linear-gradient(-45deg, transparent 46%, #009B48 46%, #009B48 54%, transparent 54%);}
.lang-flag-ast{background:#0038A8; background-image:linear-gradient(to bottom, transparent 42%, #FFF 42%, #FFF 58%, transparent 58%);}
.lang-flag-gal{background:#FFFFFF; background-image:linear-gradient(135deg, transparent 46%, #0090D2 46%, #0090D2 54%, transparent 54%); border-color:#ddd;}
.lang-flag-en{
  /* Union Jack: navy field, white St Andrew's/St Patrick's saltire behind a
     white St George's cross, with the red crosses layered on top of each. */
  background-color:#012169;
  background-image:
    linear-gradient(to bottom, transparent 44%, #C8102E 44%, #C8102E 56%, transparent 56%),
    linear-gradient(to right, transparent 44%, #C8102E 44%, #C8102E 56%, transparent 56%),
    linear-gradient(to bottom, transparent 38%, #fff 38%, #fff 62%, transparent 62%),
    linear-gradient(to right, transparent 38%, #fff 38%, #fff 62%, transparent 62%),
    linear-gradient(45deg, transparent 47%, #C8102E 47%, #C8102E 53%, transparent 53%),
    linear-gradient(-45deg, transparent 47%, #C8102E 47%, #C8102E 53%, transparent 53%),
    linear-gradient(45deg, transparent 42%, #fff 42%, #fff 58%, transparent 58%),
    linear-gradient(-45deg, transparent 42%, #fff 42%, #fff 58%, transparent 58%);
}

.lang-switch{position:relative;}
.lang-switch form{margin:0;}
.lang-current{
  display:flex; align-items:center; gap:6px; background:none; border:1.5px solid var(--border); border-radius:0;
  padding:6px 12px; font-size:var(--fs-sm); font-weight:600; color:var(--ink); cursor:pointer; font-family:inherit;
}
.lang-current:hover{border-color:var(--teal);}
.lang-caret{font-size:var(--fs-xxs); color:var(--muted);}
.lang-menu{
  list-style:none; margin:0; padding:6px; position:absolute; top:calc(100% + 8px); right:0;
  background:var(--surface); border:1px solid var(--border); border-radius:0; box-shadow:0 12px 28px rgba(43,46,51,0.12);
  min-width:170px; display:none; z-index:50;
}
.lang-menu.open{display:block;}
.lang-menu li{margin:0;}
.lang-option{
  display:flex; align-items:center; gap:8px; width:100%; background:none; border:none; text-align:left;
  padding:8px 10px; border-radius:0; font-size:var(--fs-sm); font-weight:500; color:var(--ink); cursor:pointer; font-family:inherit;
}
.lang-option:hover{background:var(--hover);}
.lang-option.active{background:rgba(88,123,127,0.1); color:var(--teal-dark); font-weight:700;}
.lang-abbr{margin-left:auto; font-size:var(--fs-xxs); color:var(--muted); font-weight:700;}

main{padding:16px 0 8px;}

.card{
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:0;
  padding:14px 16px;
  margin-top:10px;
}

.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  background:var(--teal);
  color:#fff;
  font-weight:600;
  font-size:var(--fs-sm);
  min-height:36px;
  padding:6px 14px;
  border-radius:0;
  line-height:1.3;
  border:1.5px solid var(--teal);
  cursor:pointer;
  text-decoration:none;
  white-space:nowrap;
  vertical-align:middle;
}
.btn .ico{width:15px; height:15px;}
.btn:hover{background:var(--teal-dark); border-color:var(--teal-dark); color:#fff; text-decoration:none;}
.btn-outline{
  background:transparent;
  color:var(--teal);
}
.btn-outline:hover{background:var(--hover); color:var(--teal-dark); border-color:var(--teal-dark);}
.btn-sm{
  min-height:30px;
  padding:3px 10px;
  font-size:var(--fs-xs);
}
.btn-danger{
  background:#b3261e; border-color:#b3261e;
}
.btn-danger:hover{background:#8f1d16; border-color:#8f1d16;}
.link-danger{
  background:none; border:none; color:#b3261e; cursor:pointer; padding:0; font-size:var(--fs-xs); font-family:inherit;
}
.link-danger:hover{text-decoration:underline;}

form p{margin:0 0 10px;}
label{display:block; font-weight:600; font-size:var(--fs-xs); margin-bottom:3px;}
input:not([type="checkbox"]):not([type="radio"]), textarea, select{
  width:100%;
  padding:6px 8px;
  border:1px solid var(--input-border);
  border-radius:0;
  font-size:var(--fs-sm);
  font-family:inherit;
}
.newsletter-signup-form{display:flex; gap:10px; max-width:420px; margin:18px auto 0; flex-wrap:wrap; justify-content:center;}
.newsletter-signup-form input{width:auto; flex:1; min-width:220px;}
.helptext{font-size:var(--fs-xxs); color:var(--muted); margin-top:2px; display:block;}
.field-notice{
  display:flex; align-items:flex-start; gap:8px; font-size:var(--fs-sm); line-height:1.4; color:var(--ink);
  background:var(--bg); border:1px solid var(--border); border-left:3px solid var(--teal);
  border-radius:0; padding:10px 12px; margin:0 0 8px;
}
.field-notice svg{flex:none; width:16px; height:16px; color:var(--teal); margin-top:1px;}
ul.errorlist{color:#b3261e; font-size:var(--fs-sm); padding-left:18px; margin:4px 0;}
.form-error{color:#b3261e; font-size:var(--fs-sm); margin:-8px 0 12px;}

.messages{list-style:none; padding:0; margin:0 0 12px;}
.messages li{
  background:rgba(88,123,127,0.09);
  color:var(--teal-dark);
  padding:7px 12px;
  border-radius:0;
  font-size:var(--fs-sm);
  margin-bottom:6px;
}


/* =========================================================
   FORUM — MyBB-style layout: persistent left sidebar +
   category bars / board tables / thread tables / post panels
   ========================================================= */

.breadcrumb{font-size:var(--fs-xs); color:var(--muted); margin-bottom:8px;}
.breadcrumb a{color:var(--muted);}
.breadcrumb a:hover{color:var(--teal);}

.toolbar{display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:10px; flex-wrap:wrap; gap:10px;}

/* ---------- layout: sidebar + main ---------- */
.forum-layout{
  display:grid;
  grid-template-columns:220px 1fr;
  gap:16px;
  align-items:start;
}
.forum-sidebar{
  position:sticky; top:calc(var(--topbar-h) + 12px);
  max-height:calc(100vh - var(--header-h) - 32px);
  overflow-y:auto;
  scrollbar-width:thin;
}
.fsidebar-block{
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:0;
  padding:10px 12px;
  margin-bottom:10px;
}
.fsidebar-block h3{
  font-family:var(--font-body);
  font-size:var(--fs-xxs);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:0.06em;
  color:var(--teal);
  margin:0 0 10px;
}
.fsidebar-tree{list-style:none; margin:0; padding:0; font-size:var(--fs-sm);}
.fsidebar-tree > li{margin-bottom:10px;}
.fsidebar-tree > li:last-child{margin-bottom:0;}
.fsidebar-cat{font-weight:700; color:var(--ink);}
.fsidebar-tree ul{list-style:none; margin:6px 0 0; padding-left:14px; font-weight:400;}
.fsidebar-tree ul li{margin-bottom:6px;}
.fsidebar-tree a{color:var(--muted);}
.fsidebar-tree a:hover{color:var(--teal);}

.fsidebar-stats{list-style:none; margin:0; padding:0; font-size:var(--fs-sm);}
.fsidebar-stats li{display:flex; justify-content:space-between; padding:5px 0; border-bottom:1px solid var(--border-soft);}
.fsidebar-stats li:last-child{border-bottom:none;}
.fsidebar-stats span{color:var(--muted);}
.fsidebar-stats strong{color:var(--ink);}

.fsidebar-links{list-style:none; margin:0; padding:0; font-size:var(--fs-sm);}
.fsidebar-links li{margin-bottom:8px;}
.fsidebar-links li:last-child{margin-bottom:0;}

.fsidebar-search{display:flex; gap:6px;}
.fsidebar-search input{padding:8px 10px; font-size:var(--fs-sm);}

@media (max-width:900px){
  .forum-layout{grid-template-columns:1fr;}
  .forum-sidebar{position:static; display:grid; grid-template-columns:1fr 1fr; gap:12px;}
  .fsidebar-search{grid-column:1 / -1;}
}
@media (max-width:560px){
  .forum-sidebar{grid-template-columns:1fr;}
}

/* ---------- category bar ---------- */
.fcategory{margin-bottom:12px;}
.fcategory-bar{
  background:var(--teal);
  color:#fff;
  font-weight:700;
  font-size:var(--fs-sm);
  letter-spacing:0.01em;
  padding:5px 12px;
  border-radius:0;
}

/* ---------- board table (forum index: forums within a category) ---------- */
.fboard-table, .fthread-table{
  background:var(--surface);
  border:1px solid var(--border);
  border-top:none;
  border-radius:0;
  overflow:hidden;
}
.fboard-header, .fthread-header{
  display:grid;
  grid-template-columns:auto 1fr 90px 90px 220px;
  gap:10px;
  padding:4px 12px;
  background:var(--bg);
  border-bottom:1px solid var(--border);
  font-size:var(--fs-xxs);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:0.05em;
  color:var(--muted);
}
.fboard-header{grid-template-columns:40px 1fr 90px 90px 220px;}
.fboard-header > div:nth-child(1){grid-column:2;}
.fthread-header{grid-template-columns:40px 1fr 100px 90px 200px;}
.fthread-header > div:nth-child(1){grid-column:2;}

.fboard-row{
  display:grid;
  grid-template-columns:40px 1fr 90px 90px 220px;
  gap:12px;
  align-items:center;
  padding:7px 12px;
  border-bottom:1px solid var(--border-soft);
}
.fboard-row:last-child{border-bottom:none;}
.fboard-row:hover{background:var(--hover);}
.fboard-row-empty{padding:10px 12px; color:var(--muted); font-size:var(--fs-sm);}
.fboard-icon{font-size:var(--fs-lg); text-align:center;}
.fboard-name{font-weight:700; font-family:var(--font-heading); font-size:var(--fs-base);}
.fboard-desc{color:var(--muted); font-size:var(--fs-sm); margin-top:2px;}
.fboard-subforums{font-size:var(--fs-xs); color:var(--muted); margin-top:3px;}
.fboard-subforums a{color:var(--teal);}
.fboard-stat{text-align:center; font-size:var(--fs-sm); color:var(--muted);}
.fboard-last{font-size:var(--fs-xs); color:var(--muted); line-height:1.5;}
.fboard-last a{color:var(--ink); font-weight:600;}

@media (max-width:700px){
  .fboard-header{display:none;}
  .fboard-row, .fthread-row{grid-template-columns:32px 1fr; grid-template-areas:"icon title" ". stats"; row-gap:4px;}
  .fboard-stat, .fboard-last, .fthread-last{grid-column:2;}
}

/* ---------- thread table (topic list within a forum) ---------- */
.fthread-groupname{
  padding:5px 12px;
  background:var(--surface-alt);
  font-size:var(--fs-xxs);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:0.05em;
  color:var(--muted);
  border-bottom:1px solid var(--border-soft);
}
.fthread-row{
  display:grid;
  grid-template-columns:40px 1fr 100px 90px 200px;
  gap:12px;
  align-items:center;
  padding:7px 12px;
  border-bottom:1px solid var(--border-soft);
  font-size:var(--fs-sm);
}
.fthread-row:last-child{border-bottom:none;}
.fthread-row:hover{background:var(--hover);}
.fthread-icon{font-size:var(--fs-lg); text-align:center;}
.ftopic-title{font-weight:600;}
.fthread-last-author{font-size:var(--fs-sm);}
.fthread-last-date{font-size:var(--fs-xs); line-height:1.5;}
.fthread-last-date a{color:inherit; text-decoration:none;}
.fthread-last-date a:hover{text-decoration:underline;}
.smart-time-relative{display:block; font-weight:600; color:var(--ink);}
.smart-time-absolute{display:block;}
.badge{
  display:inline-block;
  font-size:var(--fs-xxs);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:0.04em;
  padding:1px 7px;
  line-height:1.6;
  border-radius:0;
  margin-right:6px;
}
.badge-pinned{background:rgba(226,192,68,0.18); color:#8a6d10;}
.badge-locked{background:rgba(179,38,30,0.1); color:#b3261e;}
.badge-collab{background:var(--teal); color:#fff;}
.badge-open{background:rgba(46,139,87,0.15); color:#1f6b45;}
html[data-theme="dark"] .badge-open{background:rgba(46,139,87,0.25); color:#7fd7a8;}
.fmeta{font-size:var(--fs-xs); color:var(--muted);}

/* ---------- poll result bars (polls app) ---------- */
.poll-bar{background:var(--bg); border:1px solid var(--border); border-radius:0; height:10px; overflow:hidden;}
.poll-bar-fill{background:var(--teal); height:100%; border-radius:0; transition:width .3s ease;}

@media (max-width:700px){
  .fthread-header{display:none;}
}

/* ---------- posts (topic detail) ---------- */
.fpost{
  display:grid;
  grid-template-columns:170px 1fr;
  gap:0;
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:0;
  margin-bottom:16px;
  overflow:hidden;
}
.fpost-userpanel{
  background:var(--bg);
  padding:12px 12px;
  text-align:center;
  border-right:1px solid var(--border);
}
.fpost-avatar{
  width:64px; height:64px;
  border-radius:0;
  object-fit:cover;
  background:var(--surface);
  margin:0 auto 8px;
  display:block;
}
.fpost-avatar-placeholder{
  width:64px; height:64px;
  border-radius:0;
  background:var(--teal);
  color:#fff;
  display:flex; align-items:center; justify-content:center;
  font-family:var(--font-body);
  font-weight:700;
  font-size:var(--fs-h1);
  margin:0 auto 8px;
}
.fpost-name{font-weight:700; font-size:var(--fs-base);}
.fpost-stats{
  list-style:none; margin:14px 0 0; padding:10px 0 0;
  border-top:1px solid var(--border-soft);
  font-size:var(--fs-xxs);
  text-align:left;
}
.fpost-stats li{display:flex; justify-content:space-between; padding:2px 0; color:var(--muted);}
.fpost-stats strong{color:var(--ink);}

.fpost-body-col{padding:12px 16px;}
.fpost-meta{
  font-size:var(--fs-xs); color:var(--muted);
  margin:-12px -16px 10px;
  padding:6px 16px;
  background:var(--surface-alt);
  border-bottom:1px solid var(--border-soft);
  display:flex; justify-content:space-between; flex-wrap:wrap; gap:8px;
}
.fpost-body{font-size:var(--fs-base); line-height:1.7; white-space:pre-wrap;}
.fpost-quote{
  background:var(--bg); border-left:3px solid var(--teal); border-radius:0;
  padding:10px 14px; margin-bottom:12px; font-size:var(--fs-sm);
}
.fpost-quote-head{display:flex; justify-content:space-between; gap:10px; margin-bottom:6px; font-size:var(--fs-xs);}
.fpost-quote-date{color:var(--muted); font-weight:500; white-space:nowrap;}
.fpost-quote-body{color:var(--muted); white-space:pre-wrap; line-height:1.6;}
.link-action{
  background:none; border:none; color:var(--teal); cursor:pointer; padding:0; font-size:var(--fs-xs); font-family:inherit;
}
.link-action:hover{text-decoration:underline;}
.fpost-signature{margin-top:14px; border-top:1px solid var(--border-soft); padding-top:10px; font-style:italic;}
.fpost-actions{display:flex; gap:14px; margin-top:16px; padding-top:12px; border-top:1px solid var(--border-soft); font-size:var(--fs-xs);}
.fpost-attachments{margin-top:16px; display:flex; flex-wrap:wrap; gap:10px;}
.fpost-attachments img{max-width:180px; border-radius:0; border:1px solid var(--border); display:block;}
.fpost-attachments .file-chip{
  display:inline-flex; align-items:center; gap:6px;
  background:var(--bg); border:1px solid var(--border);
  border-radius:0; padding:8px 12px; font-size:var(--fs-xs);
}

@media (max-width:700px){
  .fpost{grid-template-columns:1fr;}
  .fpost-userpanel{
    border-right:none; border-bottom:1px solid var(--border);
    display:flex; align-items:center; gap:12px; text-align:left; padding:14px 18px;
  }
  .fpost-avatar, .fpost-avatar-placeholder{margin:0;}
  .fpost-stats{display:none;}
}

/* ---------- pagination ---------- */
.pagination{display:flex; gap:6px; justify-content:center; margin:12px 0; font-size:var(--fs-xs);}
.pagination a, .pagination span{
  padding:6px 12px;
  border-radius:0;
  border:1px solid var(--border);
  background:var(--surface);
}
.pagination .current{background:var(--teal); color:#fff; border-color:var(--teal);}

/* ---------- profile ---------- */
.profile-header{display:flex; gap:16px; align-items:center; margin-bottom:14px; flex-wrap:wrap;}
.profile-header .fpost-avatar, .profile-header .fpost-avatar-placeholder{width:72px; height:72px; font-size:var(--fs-display); margin:0;}
.profile-role{font-size:var(--fs-sm); font-weight:600; color:var(--teal-dark); text-transform:uppercase; letter-spacing:0.03em; margin-bottom:8px;}
.profile-stats{display:flex; gap:16px; margin-top:6px; font-size:var(--fs-sm); color:var(--muted); flex-wrap:wrap;}
.profile-stats strong{color:var(--ink); font-size:var(--fs-h3); display:block; font-family:var(--font-body);}
@media (max-width:560px){
  .profile-header{gap:14px;}
  .profile-header .fpost-avatar, .profile-header .fpost-avatar-placeholder{width:64px; height:64px; font-size:var(--fs-h1);}
  .profile-header > div[style*="margin-left"]{margin-left:0 !important; width:100%;}
}

/* ---------- moderation queue ---------- */
.report-row{
  background:var(--surface); border:1px solid var(--border); border-radius:0;
  padding:12px 14px; margin-bottom:8px;
}
.report-row .reason{font-style:italic; color:var(--muted); margin:8px 0;}

/* ---------- post under-review ---------- */
.badge-review{background:rgba(230,126,34,0.15); color:#b3600b;}
.fpost-review-highlight{border-left:3px solid #e67e22;}
.fpost-review-placeholder{
  background:#fff7ee; border:1px dashed #e6b980; border-radius:0;
  padding:10px 12px; color:#8a5a1f; font-size:var(--fs-sm); font-style:italic;
}

/* ---------- multi-select chip picker (self-coded, no external lib) ---------- */
.multiselect-native{
  position:absolute;
  width:1px; height:1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
}
.multiselect-wrapper{margin-bottom:6px;}
.multiselect-presets{display:flex; flex-wrap:wrap; gap:6px; margin-bottom:8px;}
.multiselect-preset{
  background:var(--surface); border:1.5px solid var(--teal); color:var(--teal);
  border-radius:0; padding:5px 13px; font-size:var(--fs-xs); font-weight:600;
  cursor:pointer; font-family:inherit;
}
.multiselect-preset:hover{background:rgba(88,123,127,0.08);}
.multiselect-preset.active{background:var(--teal); color:#fff;}
.multiselect-chips{display:flex; flex-wrap:wrap; gap:6px; margin-bottom:8px;}
.multiselect-chips:empty{margin-bottom:0;}
.chip{
  display:inline-flex; align-items:center; gap:6px;
  background:rgba(88,123,127,0.12); color:var(--teal-dark);
  border-radius:0; padding:2px 5px 2px 10px; font-size:var(--fs-xs); font-weight:600;
}
.chip button{
  background:none; border:none; color:var(--teal-dark); cursor:pointer;
  font-size:var(--fs-md); line-height:1; padding:2px 4px; border-radius:0;
}
.chip button:hover{background:rgba(88,123,127,0.2);}
.multiselect-inputwrap{position:relative;}
.multiselect-input{width:100%;}
.multiselect-suggestions{
  position:absolute; top:calc(100% + 4px); left:0; right:0; z-index:20;
  background:var(--surface); border:1px solid var(--border); border-radius:0;
  box-shadow:0 12px 24px rgba(43,46,51,0.1);
  max-height:220px; overflow-y:auto;
}
.multiselect-suggestion{padding:9px 14px; font-size:var(--fs-sm); cursor:pointer;}
.multiselect-suggestion:hover{background:var(--bg); color:var(--teal);}
.multiselect-suggestions.is-dropdown{max-height:260px; overflow-y:auto;}
.multiselect-suggestion-new{color:var(--teal); font-weight:600; border-top:1px solid var(--border-soft);}

/* ---------- profile form sections ---------- */
.form-section{margin-bottom:16px;}
.form-section h2{font-size:var(--fs-base); margin-bottom:8px; padding-bottom:4px; border-bottom:1px solid var(--border-soft);}
.form-row-2{display:grid; grid-template-columns:1fr 1fr; gap:0 12px;}
@media (max-width:600px){.form-row-2{grid-template-columns:1fr;}}
.avatar-preview{
  width:80px; height:80px; border-radius:0; object-fit:cover;
  border:1px solid var(--border); margin-bottom:10px; display:block;
}

/* ---------- approval queue ---------- */
.approval-card{
  background:var(--surface); border:1px solid var(--border); border-radius:0;
  padding:12px 14px; margin-bottom:8px; display:grid; grid-template-columns:56px 1fr; gap:12px;
}
.approval-card .fpost-avatar, .approval-card .fpost-avatar-placeholder{width:52px; height:52px; font-size:var(--fs-xl);}
.approval-meta{display:grid; grid-template-columns:1fr 1fr; gap:6px 20px; font-size:var(--fs-sm); color:var(--muted); margin:10px 0;}
.approval-meta strong{color:var(--ink);}
.approval-actions{display:flex; gap:10px; margin-top:14px; align-items:flex-start; flex-wrap:wrap;}
.approval-actions textarea{width:220px; height:38px; font-size:var(--fs-xs);}

/* ---------- user directory ---------- */
.directory-toolbar{display:flex; justify-content:space-between; align-items:center; margin-bottom:20px; flex-wrap:wrap; gap:12px;}
.view-switch{display:flex; gap:6px;}
.view-switch a{
  padding:4px 11px; border-radius:0; border:1.5px solid var(--border); font-size:var(--fs-xs); font-weight:600; color:var(--muted);
}
.view-switch a.active{background:var(--teal); border-color:var(--teal); color:#fff;}
.directory-filters{
  background:var(--surface); border:1px solid var(--border); border-radius:0; padding:12px 14px; margin-bottom:12px;
  display:grid; grid-template-columns:repeat(4,1fr); gap:10px; align-items:end;
}
.directory-filters .field{display:flex; flex-direction:column;}
.directory-filters label{font-size:var(--fs-xxs);}
@media (max-width:900px){.directory-filters{grid-template-columns:1fr 1fr;}}
@media (max-width:560px){.directory-filters{grid-template-columns:1fr;}}

.directory-list-row{
  display:grid; grid-template-columns:44px 1fr auto; gap:12px; align-items:center;
  background:var(--surface); border:1px solid var(--border); border-radius:0; padding:8px 12px; margin-bottom:6px;
}
.directory-list-row .fpost-avatar, .directory-list-row .fpost-avatar-placeholder{width:40px; height:40px; font-size:var(--fs-h3); margin:0;}

.directory-gallery{display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:12px;}
.gallery-card{
  background:var(--surface); border:1px solid var(--border); border-radius:0; padding:12px; text-align:center;
  transition:transform .2s ease, box-shadow .2s ease;
}
.gallery-card:hover{transform:translateY(-3px); box-shadow:0 12px 24px rgba(43,46,51,0.08);}
.gallery-card .fpost-avatar, .gallery-card .fpost-avatar-placeholder{width:80px; height:80px; font-size:var(--fs-display); margin:0 auto 10px;}
.gallery-card .g-name{font-weight:700;}
.gallery-card .g-meta{font-size:var(--fs-xs); color:var(--muted); margin-top:4px;}

.swipe-stage{max-width:380px; margin:0 auto;}
.swipe-card{
  background:var(--surface); border:1px solid var(--border); border-radius:0; overflow:hidden;
  box-shadow:0 20px 40px rgba(43,46,51,0.1); text-align:center; padding:32px 24px;
}
.swipe-card .fpost-avatar, .swipe-card .fpost-avatar-placeholder{width:120px; height:120px; font-size:var(--fs-hero); margin:0 auto 16px;}
.swipe-card h2{margin-bottom:6px;}
.swipe-card .g-meta{color:var(--muted); font-size:var(--fs-sm); margin-bottom:14px;}
.swipe-card .tag-list{display:flex; flex-wrap:wrap; gap:6px; justify-content:center; margin-top:14px;}
.swipe-actions{display:flex; justify-content:center; gap:16px; margin-top:22px;}
.swipe-actions button, .swipe-actions a{
  width:56px; height:56px; border-radius:0; border:1.5px solid var(--border); background:var(--surface);
  font-size:var(--fs-h1); cursor:pointer; display:flex; align-items:center; justify-content:center;
}
.swipe-actions .swipe-next{border-color:var(--teal); color:var(--teal);}
.swipe-actions .swipe-profile{border-color:var(--gold); color:var(--gold);}
.tag-pill{
  background:var(--bg); border:1px solid var(--border); border-radius:0; padding:2px 10px; font-size:var(--fs-xxs); color:var(--muted);
  display:inline-block; margin:2px 4px 2px 0;
}
.username-link{font-weight:600;}
.username-link:hover{text-decoration:underline;}

/* =========================================================
   LMS — course library, builder, lesson viewer, dashboard
   ========================================================= */

.lms-toolbar{display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; flex-wrap:wrap; gap:8px;}
.lms-toolbar .view-toggle{margin-left:auto;}
.lms-search{display:flex; gap:6px; flex-wrap:wrap; margin-bottom:10px;}
.lms-search input[type="text"]{min-width:200px;}
.lms-search select{width:auto;}

.lms-section-title{
  display:flex; justify-content:space-between; align-items:baseline; margin:14px 0 6px;
  padding-bottom:4px; border-bottom:1px solid var(--border);
}
.lms-section-title h2{margin:0; font-size:var(--fs-h2);}

/* ---------- clear, reusable separators (used between major page sections) ---------- */
hr.divider{border:none; border-top:1px solid var(--border); margin:18px 0;}
.section-gap{margin-top:24px;}

/* ---------- collapsible sections — native <details>/<summary>, no JS needed ---------- */
details.collapsible{
  background:var(--surface); border:1px solid var(--border); border-radius:0; margin-bottom:14px; overflow:hidden;
}
details.collapsible > summary{
  list-style:none; cursor:pointer; padding:9px 12px; font-weight:700; font-family:var(--font-heading);
  font-size:var(--fs-h3); display:flex; align-items:center; justify-content:space-between; gap:10px;
  background:var(--bg);
}
details.collapsible > summary::-webkit-details-marker{display:none;}
details.collapsible > summary::after{
  content:"▾"; font-family:var(--font-body); font-size:var(--fs-sm); color:var(--muted); transition:transform .15s ease; flex:none;
}
details.collapsible[open] > summary::after{transform:rotate(180deg);}
details.collapsible > summary:hover{background:var(--border-soft);}
details.collapsible .collapsible-body{padding:10px 12px;}
details.collapsible + details.collapsible{margin-top:-2px;}

.course-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:12px;}
.course-card{
  background:var(--surface); border:1px solid var(--border); border-radius:0; overflow:hidden;
  transition:transform .2s ease, box-shadow .2s ease; display:flex; flex-direction:column;
}
.course-card:hover{transform:translateY(-3px); box-shadow:0 14px 28px rgba(43,46,51,0.09);}
.course-card-cover{
  height:78px; background:linear-gradient(135deg, var(--teal), var(--teal-dark));
  display:flex; align-items:center; justify-content:center; color:#fff; font-size:var(--fs-display); gap:8px;
  background-size:cover; background-position:center;
}
.course-card-body{padding:10px 12px; flex:1; display:flex; flex-direction:column;}
.course-card-title{font-family:var(--font-heading); font-weight:700; font-size:var(--fs-base); margin-bottom:3px; line-height:1.3;}
.course-card-summary{font-size:var(--fs-xs); color:var(--muted); flex:1; margin-bottom:6px; line-height:1.4;}
.course-card-meta{display:flex; justify-content:space-between; align-items:center; font-size:var(--fs-xs); color:var(--muted);}
.level-pill{
  background:rgba(88,123,127,0.12); color:var(--teal-dark); border-radius:0;
  padding:2px 8px; font-size:var(--fs-xxs); font-weight:700; text-transform:uppercase; letter-spacing:0.03em;
}
.course-card-progress{margin-top:10px;}

.status-pill{
  border-radius:0; padding:3px 10px; font-size:var(--fs-xxs); font-weight:700;
  text-transform:uppercase; letter-spacing:0.03em; display:inline-block;
}
.status-open{background:rgba(226,192,68,0.22); color:#8a6d10;}
.status-answered{background:rgba(88,123,127,0.12); color:var(--teal-dark);}
.status-closed{background:var(--border-soft); color:var(--muted);}
.status-draft{background:var(--border-soft); color:var(--muted);}
.status-sending{background:rgba(226,192,68,0.22); color:#8a6d10;}
.status-sent{background:rgba(88,123,127,0.12); color:var(--teal-dark);}
.status-failed{background:#fbe2df; color:#b3261e;}
.status-queued{background:var(--border-soft); color:var(--muted);}
.status-delivered{background:rgba(88,123,127,0.12); color:var(--teal-dark);}
.status-opened{background:rgba(226,192,68,0.22); color:#8a6d10;}
.status-bounced{background:#fbe2df; color:#b3261e;}
.status-blocked{background:#fbe2df; color:#b3261e;}

.newsletter-preview-frame{
  background:#F0EEE8; border:1px solid var(--border); border-radius:0; padding:24px; display:flex; justify-content:center;
}
.newsletter-preview-frame iframe{width:100%; max-width:600px; height:640px; border:none; background:var(--surface); border-radius:0;}
.ticket-row{transition:box-shadow .15s ease;}
.ticket-row:hover{box-shadow:0 2px 10px rgba(0,0,0,0.06);}
.ticket-reply-staff{border-left:3px solid var(--teal); background:#f5fbfa;}

.progress-track{background:var(--bg); border-radius:0; height:8px; overflow:hidden;}
.progress-fill{background:var(--gold); height:100%; border-radius:0;}
.progress-label{font-size:var(--fs-xxs); color:var(--muted); margin-top:4px; display:block;}

.course-header{display:grid; grid-template-columns:1fr 280px; gap:18px; margin-bottom:18px;}
@media (max-width:800px){.course-header{grid-template-columns:1fr;}}
.course-header-cover{
  border-radius:0; height:130px; background:var(--surface-alt); border:1px solid var(--border);
  background-size:cover; background-position:center; margin-bottom:10px;
}
.course-header-meta{display:flex; gap:8px; flex-wrap:wrap; margin-bottom:12px;}
.course-side-card{background:var(--surface); border:1px solid var(--border); border-radius:0; padding:14px;}
.course-side-card .btn{width:100%; text-align:center; margin-bottom:6px;}
.course-side-stats{list-style:none; margin:10px 0 0; padding:10px 0 0; border-top:1px solid var(--border-soft); font-size:var(--fs-sm);}
.course-side-stats li{display:flex; justify-content:space-between; padding:4px 0; color:var(--muted);}
.course-side-stats strong{color:var(--ink);}
.instructor-chip{display:flex; align-items:center; gap:8px; margin-top:6px; font-size:var(--fs-sm);}

.module-block{background:var(--surface); border:1px solid var(--border); border-radius:0; margin-bottom:10px; overflow:hidden;}
.module-block-head{
  padding:8px 12px; background:var(--bg); border-bottom:1px solid var(--border);
  display:flex; justify-content:space-between; align-items:center; font-weight:700; cursor:grab;
}
.module-block-head .drag-handle{color:var(--muted); margin-right:8px; cursor:grab;}
.lesson-row{
  display:flex; align-items:center; gap:10px; padding:8px 12px; border-bottom:1px solid var(--border-soft); font-size:var(--fs-sm);
}
.lesson-row:last-child{border-bottom:none;}
.lesson-row:hover{background:var(--hover);}
.lesson-row .drag-handle{color:var(--muted); cursor:grab; font-size:var(--fs-sm);}
.lesson-icon{width:22px; text-align:center; color:var(--teal);}
.lesson-row-title{flex:1;}
.lesson-row-title a{color:var(--ink); font-weight:600;}
.lesson-row.locked .lesson-row-title a{color:var(--muted); pointer-events:none;}
.lesson-row-lock{color:var(--muted); font-size:var(--fs-xs);}
.lesson-row-check{color:#3f8f5c; font-size:var(--fs-md);}
.lesson-row-edit{font-size:var(--fs-xs); display:flex; gap:10px;}

.lesson-viewer{background:var(--surface); border:1px solid var(--border); border-radius:0; padding:20px 22px; margin-bottom:12px;}
.lesson-viewer video{width:100%; border-radius:0; background:#000;}
.lesson-viewer iframe{width:100%; aspect-ratio:16/9; border:none; border-radius:0;}

.webinar-video-wrap{margin-top:14px;}
video.webinar-video{width:100%; max-height:520px; border-radius:0; background:#000; display:block;}
iframe.webinar-video{width:100%; aspect-ratio:16/9; border:none; border-radius:0; display:block;}
.lesson-body-text{font-size:var(--fs-md); line-height:1.75; white-space:pre-wrap; margin-top:16px;}
.lesson-locked{
  background:#fff7ee; border:1px dashed #e6b980; border-radius:0; padding:28px; text-align:center; color:#8a5a1f;
}
.lesson-nav{display:flex; justify-content:space-between; margin:20px 0; font-size:var(--fs-base); gap:12px; flex-wrap:wrap;}
.lesson-progressbar{margin-bottom:24px;}
.lesson-actions-bar{display:flex; justify-content:space-between; align-items:center; margin-top:14px; flex-wrap:wrap; gap:12px;}

.quiz-question{background:var(--bg); border-radius:0; padding:12px 14px; margin-bottom:10px;}
.quiz-question h4{margin:0 0 10px; font-size:var(--fs-base);}
.quiz-choice{display:flex; align-items:center; gap:10px; padding:6px 0; font-size:var(--fs-base);}
.quiz-choice input{width:auto;}
.quiz-result{
  border-radius:0; padding:10px 14px; margin-bottom:12px; font-size:var(--fs-base);
}
.quiz-result.passed{background:rgba(63,143,92,0.12); color:#2b6b41;}
.quiz-result.failed{background:rgba(179,38,30,0.08); color:#b3261e;}

.submission-box{background:var(--bg); border-radius:0; padding:12px 14px; margin-bottom:12px; font-size:var(--fs-sm);}
.submission-status{font-weight:700; text-transform:uppercase; font-size:var(--fs-xxs); letter-spacing:0.04em;}

.dash-grid{display:grid; grid-template-columns:2fr 1fr; gap:14px;}
@media (max-width:900px){.dash-grid{grid-template-columns:1fr;}}
.dash-course-row{
  display:grid; grid-template-columns:48px 1fr auto; gap:12px; align-items:center;
  background:var(--surface); border:1px solid var(--border); border-radius:0; padding:8px 12px; margin-bottom:6px;
}
.dash-course-icon{
  width:56px; height:56px; border-radius:0; background:var(--surface-alt); border:1px solid var(--border);
  display:flex; align-items:center; justify-content:center; color:var(--teal); font-size:var(--fs-xl); background-size:cover; background-position:center;
}
.cert-row{display:flex; align-items:center; gap:12px; background:var(--surface); border:1px solid var(--border); border-radius:0; padding:12px 16px; margin-bottom:10px; font-size:var(--fs-sm);}
.cert-icon{color:var(--gold); font-size:var(--fs-xl);}
.points-badge{
  background:rgba(226,192,68,0.18); color:#8a6d10; border-radius:0; padding:4px 12px; font-size:var(--fs-xs); font-weight:700;
}

.certificate-wrap{max-width:720px; margin:0 auto;}
.certificate-card{
  background:var(--surface); border:2px solid var(--gold); border-radius:0; padding:56px 40px; text-align:center;
}
.certificate-card h1{font-size:var(--fs-display); margin-bottom:6px;}
.certificate-card .cert-course{font-size:var(--fs-xl); color:var(--teal-dark); margin:18px 0;}
.certificate-code{font-size:var(--fs-xs); color:var(--muted); margin-top:24px; letter-spacing:0.05em;}

.announcement-card{background:var(--surface); border:1px solid var(--border); border-radius:0; padding:10px 14px; margin-bottom:8px;}
.announcement-card h4{margin:0 0 4px; font-size:var(--fs-base);}

.students-table{width:100%; border-collapse:collapse; background:var(--surface); border:1px solid var(--border); border-radius:0; overflow:hidden;}
.students-table th, .students-table td{padding:6px 10px; text-align:left; font-size:var(--fs-sm); border-bottom:1px solid var(--border-soft);}
.students-table th{background:var(--bg); font-size:var(--fs-xxs); text-transform:uppercase; letter-spacing:0.04em; color:var(--muted);}
.students-table tr:last-child td{border-bottom:none;}
/* Wide data tables (admin lists, student rosters, etc.) scroll horizontally
   on narrow screens instead of squashing columns unreadably. Works directly
   on the <table> element (no wrapper div needed in ~15 templates) since
   browsers keep the internal thead/tbody/tr/td table layout even once the
   table itself is a block-level scroll container. */
@media (max-width:700px){
  .students-table{display:block; overflow-x:auto; -webkit-overflow-scrolling:touch; border-radius:0;}
  .students-table th, .students-table td{white-space:nowrap;}
}

.formset-row{border:1px solid var(--border); border-radius:0; padding:14px; margin-bottom:10px; background:var(--bg);}
.formset-row.deleted-row{opacity:0.5;}

@media (max-width:700px){
  .course-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));}
  .lesson-viewer{padding:20px;}
  .lesson-nav{flex-direction:column;}
  .module-block-head{padding:12px 16px;}
  .lesson-row{padding:12px 16px; flex-wrap:wrap;}
}

/* =========================================================
   WEBINARS — list/detail cards, live badge, Jitsi embed
   ========================================================= */

.webinar-card-cover{
  background:var(--surface-alt);
  position:relative;
}
.webinar-card-when{font-size:var(--fs-xs); color:var(--muted); margin-bottom:8px;}
.badge-live{
  position:absolute; top:10px; right:10px;
  background:#b3261e; color:#fff; animation:pulse-live 2s infinite;
}
@keyframes pulse-live{
  0%, 100%{opacity:1;}
  50%{opacity:0.65;}
}

.jitsi-embed{
  width:100%; height:75vh; min-height:420px;
  background:#111; border-radius:0; overflow:hidden;
}

@media (max-width:700px){
  .jitsi-embed{height:60vh; min-height:320px; border-radius:0;}
}

/* =========================================================
   GESTIÓN — admin panel hub, stat cards
   ========================================================= */

.admin-stat-grid{
  display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:8px; margin:8px 0 16px;
}
.admin-stat-card{
  background:var(--surface); border:1px solid var(--border); border-radius:0; padding:8px 10px;
  display:flex; align-items:baseline; gap:8px; text-decoration:none;
}
.admin-stat-card:hover{border-color:var(--teal); text-decoration:none;}
.admin-stat-card.is-alert{border-color:rgba(179,38,30,0.35); background:rgba(179,38,30,0.04);}
.admin-stat-num{
  font-family:var(--font-body); font-size:var(--fs-xl); font-weight:700; color:var(--teal-dark); display:block; line-height:1.1; font-variant-numeric:tabular-nums;
}
.admin-stat-card.is-alert .admin-stat-num{color:#b3261e;}
.admin-stat-label{font-size:var(--fs-xs); color:var(--muted); display:block; line-height:1.25;}

.admin-quick-links{display:flex; flex-wrap:wrap; gap:10px; margin-bottom:12px;}

/* =========================================================
   MENSAJES — private messaging (1:1 + group DMs)
   ========================================================= */

.dm-layout{
  display:grid; grid-template-columns:300px 1fr; gap:0;
  background:var(--surface); border:1px solid var(--border); border-radius:0; overflow:hidden;
  height:calc(100vh - var(--header-h) - 64px); min-height:480px;
}
.dm-sidebar{border-right:1px solid var(--border); display:flex; flex-direction:column; min-height:0;}
.dm-sidebar-head{
  display:flex; justify-content:space-between; align-items:center; padding:8px 12px;
  border-bottom:1px solid var(--border); background:var(--surface); flex-shrink:0;
}
.dm-sidebar-head h3{margin:0; font-size:var(--fs-md);}
.dm-list{display:flex; flex-direction:column; overflow-y:auto; flex:1; min-height:0;}
.dm-list-item{
  display:grid; grid-template-columns:38px 1fr auto; gap:10px; align-items:center;
  padding:10px 14px; border-bottom:1px solid var(--border-soft); color:var(--ink); position:relative;
}
.dm-list-item:hover{background:var(--bg); text-decoration:none;}
.dm-list-item.active{background:rgba(88,123,127,0.1);}
.dm-list-avatar{width:38px; height:38px; display:flex; align-items:center; justify-content:center; font-size:var(--fs-xl);}
.dm-list-avatar .fpost-avatar, .dm-list-avatar .fpost-avatar-placeholder{width:38px; height:38px; font-size:var(--fs-base);}
.dm-list-text{display:flex; flex-direction:column; gap:1px; min-width:0;}
.dm-list-top{display:flex; justify-content:space-between; align-items:baseline; gap:8px;}
.dm-list-name{font-weight:700; font-size:var(--fs-sm); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.dm-list-time{font-size:var(--fs-xxs); color:var(--muted); flex-shrink:0;}
.dm-list-preview{font-size:var(--fs-xs); color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.dm-list-item.has-unread .dm-list-preview{color:var(--ink); font-weight:600;}
.dm-unread-dot{
  background:var(--gold); color:#fff; font-size:var(--fs-xxs); font-weight:700;
  min-width:18px; height:18px; border-radius:0; display:flex; align-items:center; justify-content:center; padding:0 5px;
}

.dm-main{display:flex; flex-direction:column; min-height:0;}
.dm-empty-state{
  flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px;
  color:var(--muted); text-align:center; padding:40px;
}
.dm-new{padding:22px 26px; max-width:640px;}
.dm-new h1{font-size:var(--fs-h2); margin-bottom:4px;}

.dm-thread-head{
  display:flex; justify-content:space-between; align-items:center; gap:12px; padding:12px 20px;
  border-bottom:1px solid var(--border); flex-shrink:0;
}
.dm-thread-title{min-width:0;}
.dm-thread-head h2{margin:0 0 2px; font-size:var(--fs-h3); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.dm-thread-head .fmeta{margin:0; font-size:var(--fs-xs); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.dm-thread-head .fmeta a{color:inherit;}
.dm-group-icon{margin-right:6px;}
.dm-thread-actions{display:flex; gap:10px; align-items:center; flex-shrink:0;}
.dm-thread-actions form{display:inline;}
.dm-add-panel{padding:12px 20px; border-bottom:1px solid var(--border); background:var(--surface-alt);}
.dm-add-panel label{font-size:var(--fs-sm); font-weight:600; display:block; margin-bottom:6px;}
.dm-add-panel .btn{margin-top:6px;}

.dm-thread{flex:1; overflow-y:auto; padding:16px 20px; display:flex; flex-direction:column; gap:10px; min-height:0;}
.dm-empty-thread{margin:auto; text-align:center;}
.dm-message{display:flex; gap:10px; align-items:flex-end; max-width:78%;}
.dm-message .fpost-avatar, .dm-message .fpost-avatar-placeholder{width:30px; height:30px; font-size:var(--fs-xs); flex-shrink:0;}
.dm-message.own{align-self:flex-end; flex-direction:row-reverse;}
.dm-message-body{display:flex; flex-direction:column; min-width:0;}
.dm-message.own .dm-message-body{align-items:flex-end;}
.dm-message-meta{display:flex; gap:8px; align-items:baseline; font-size:var(--fs-xxs); margin:0 6px 2px; color:var(--muted);}
.dm-message-author{font-weight:700; color:var(--ink);}
.dm-bubble{position:relative;}
.dm-message-text{
  margin:0; background:var(--bg); border-radius:0; padding:8px 13px; font-size:var(--fs-base); line-height:1.45;
  display:inline-block; overflow-wrap:anywhere;
}
.dm-message.own .dm-message-text{background:rgba(88,123,127,0.16); border-radius:0;}
.dm-message-text.deleted-text{color:var(--muted); font-style:italic; background:transparent; padding:0 6px;}
.dm-message-actions{display:flex; gap:10px; margin:2px 6px 0; opacity:0; transition:opacity .12s;}
.dm-message.own .dm-message-actions{justify-content:flex-end;}
.dm-message:hover .dm-message-actions, .dm-message:focus-within .dm-message-actions{opacity:1;}
.dm-message-actions form{display:inline;}
.dm-action-btn{background:none; border:none; color:var(--muted); cursor:pointer; padding:0; font-size:var(--fs-xxs); font-family:inherit;}
.dm-action-btn:hover{color:var(--teal); text-decoration:underline;}
.dm-message.editing .dm-bubble{display:none;}
.dm-edit-form{display:flex; flex-direction:column; gap:6px; width:min(480px, 78vw);}
.dm-edit-form[hidden], .dm-add-panel[hidden]{display:none;}
.dm-edit-form textarea{font-size:var(--fs-sm); width:100%;}
.dm-edit-buttons{display:flex; gap:8px; justify-content:flex-end;}

.dm-composer{display:flex; gap:10px; padding:12px 20px; border-top:1px solid var(--border); align-items:flex-end; flex-shrink:0; background:var(--surface);}
.dm-composer textarea{resize:none; font-size:var(--fs-base); flex:1; min-height:42px; max-height:160px; line-height:1.4;}
.dm-composer .btn{flex-shrink:0;}

.user-picker-row{display:flex; gap:10px; align-items:center;}
.user-picker-avatar{width:28px; height:28px; border-radius:0; background:var(--teal); color:#fff; display:flex; align-items:center; justify-content:center; font-size:var(--fs-xs); font-weight:700; overflow:hidden; flex-shrink:0;}
.user-picker-avatar img{width:100%; height:100%; object-fit:cover;}
.user-picker-row small{color:var(--muted); font-size:var(--fs-xs);}

@media (max-width:800px){
  .dm-layout{grid-template-columns:1fr; height:auto; min-height:auto;}
  .dm-sidebar{max-height:240px;}
  .dm-main{min-height:60vh;}
  .dm-thread{max-height:48vh;}
  .dm-message{max-width:92%;}
  .dm-message-actions{opacity:1;}
}

/* =========================================================
   BIENVENIDA — mandatory onboarding wizard (welcome + T&C / privacy / guidelines)
   ========================================================= */

.onboard-wrap{max-width:640px; margin:0 auto;}
.onboard-progress{margin-bottom:18px;}
.onboard-progress span{font-size:var(--fs-xs); color:var(--muted); display:block; margin-bottom:6px;}
.onboard-card h1{font-size:var(--fs-xl);}
.onboard-legal-text, .onboard-info-text{
  font-size:var(--fs-base); line-height:1.7; max-height:360px; overflow-y:auto; margin:18px 0 22px;
  padding:16px 20px; background:var(--bg); border-radius:0;
}
.onboard-checkbox{
  display:flex; align-items:flex-start; gap:10px; font-weight:500; font-size:var(--fs-base); margin-bottom:16px; cursor:pointer;
}
.onboard-checkbox input{width:auto; margin-top:3px;}

.legal-wrap{max-width:760px; margin:0 auto;}
.legal-card h1{font-size:var(--fs-display);}
.legal-updated{font-size:var(--fs-sm); color:var(--muted); margin:-6px 0 22px;}
.legal-text{font-size:var(--fs-base); line-height:1.6;}
.legal-text strong{color:var(--ink);}


footer .app-version{opacity:0.55; font-size:var(--fs-xs);}

.changelog-entry{padding:16px 20px; margin-bottom:14px;}
.changelog-version{margin:0 0 8px; font-size:var(--fs-lg);}
.changelog-date{font-weight:400; color:var(--muted); font-size:var(--fs-base);}
.changelog-items{margin:0; padding-left:20px;}
.changelog-items li{margin-bottom:5px; line-height:1.55;}

.faq-list{margin-top:20px;}
.faq-item{border:1px solid var(--border); border-radius:0; margin-bottom:10px; overflow:hidden; background:var(--surface);}
.faq-question{
  width:100%; display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:16px 20px; background:none; border:none; text-align:left; cursor:pointer;
  font-family:inherit; font-size:var(--fs-md); font-weight:600; color:var(--ink);
}
.faq-question:hover{color:var(--teal);}
.faq-caret{transition:transform .15s ease; color:var(--muted); flex-shrink:0;}
.faq-open .faq-caret{transform:rotate(180deg);}
.faq-answer{max-height:0; overflow:hidden; transition:max-height .2s ease;}
.faq-open .faq-answer{max-height:2000px;}
.faq-answer .legal-text{padding:0 20px 18px; font-size:var(--fs-base); line-height:1.7;}
.faq-answer .legal-text :first-child{margin-top:0;}
.faq-answer .legal-text pre{background:var(--bg); padding:10px 14px; border-radius:0; overflow-x:auto;}
.faq-answer .legal-text code{background:var(--bg); padding:1px 5px; border-radius:0; font-size:var(--fs-sm);}
.faq-answer .legal-text pre code{background:none; padding:0;}
.faq-answer .legal-text blockquote{border-left:3px solid var(--teal); margin:0; padding:2px 14px; color:var(--muted);}
.faq-answer .legal-text table{border-collapse:collapse; width:100%; margin:10px 0;}
.faq-answer .legal-text th, .faq-answer .legal-text td{border:1px solid var(--border); padding:6px 10px; text-align:left;}

.project-card-cover{background:var(--surface-alt);}

.blog-card-cover{background:var(--surface-alt); color:var(--teal); font-size:var(--fs-display); display:flex; align-items:center; justify-content:center; position:relative;}
.blog-card-cover .badge{position:absolute; top:8px; right:8px;}
.blog-body pre{background:var(--bg); padding:10px 14px; border-radius:0; overflow-x:auto;}
.blog-body code{background:var(--bg); padding:1px 5px; border-radius:0; font-size:var(--fs-sm);}
.blog-body pre code{background:none; padding:0;}
.blog-body blockquote{border-left:3px solid var(--teal); margin:0; padding:2px 14px; color:var(--muted);}
.blog-body table{border-collapse:collapse; width:100%; margin:10px 0;}
.blog-body th, .blog-body td{border:1px solid var(--border); padding:6px 10px; text-align:left;}
.blog-body img{max-width:100%; border-radius:0;}

.notif-list{display:flex; flex-direction:column; gap:14px;}
.notif-item{background:var(--surface); border:1px solid var(--border); border-radius:0; padding:10px 14px;}
.notif-item.notif-unread{border-color:var(--teal); background:#f5fbfa;}
.notif-item-head{display:flex; align-items:center; gap:10px; margin-bottom:6px; font-size:var(--fs-md);}

.dash-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:8px; align-items:start;}
.dash-col{background:var(--surface); border:1px solid var(--border); border-radius:0; padding:10px 12px; display:flex; flex-direction:column;}
.dash-col h2{font-size:var(--fs-xs); font-weight:600; margin:0 0 6px; text-transform:uppercase; letter-spacing:.06em; color:var(--muted);}
.dash-col > .link-action{margin-top:auto; padding-top:8px; font-size:var(--fs-sm);}
.dash-activity-row{display:grid; grid-template-columns:1fr auto; align-items:baseline; column-gap:12px; padding:8px 0; border-bottom:1px solid var(--border-soft); font-size:var(--fs-sm); color:var(--ink); text-decoration:none; line-height:1.4;}
.dash-activity-row > div{min-width:0;}
.dash-activity-row > div > .fmeta{display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;}
.dash-activity-row > .fmeta{white-space:nowrap; font-size:var(--fs-xs);}
.dash-activity-row:last-of-type{border-bottom:none;}
.dash-activity-row:hover{background:var(--hover);}

.landing-hero{text-align:center; max-width:680px; margin:20px auto 40px; padding:0 12px;}
.landing-hero h1{font-size:var(--fs-hero); margin-bottom:14px;}
.landing-hero p{font-size:var(--fs-md); line-height:1.7; color:var(--muted); margin-bottom:22px;}
.landing-features{display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:18px; margin-bottom:36px;}
.landing-feature{background:var(--surface); border:1px solid var(--border); border-radius:0; padding:22px 18px; text-align:center;}
.landing-feature-icon{font-size:var(--fs-display); margin-bottom:8px;}
.landing-feature h3{font-size:var(--fs-md); margin:0 0 6px;}
.landing-feature p{font-size:var(--fs-sm); color:var(--muted); line-height:1.6; margin:0;}

/* --- WYSIWYG editor (static/js/wysiwyg.js) --- */
.wysiwyg-wrap{border:1px solid var(--input-border); border-radius:0; overflow:hidden; background:var(--surface);}
.wysiwyg-toolbar{
  display:flex; flex-wrap:wrap; align-items:center; gap:3px;
  background:var(--bg); border-bottom:1px solid var(--border); padding:6px 8px;
}
.wysiwyg-btn{
  background:var(--surface); border:1px solid var(--border); border-radius:0; padding:5px 9px;
  font-size:var(--fs-xs); font-weight:600; color:var(--ink); cursor:pointer; font-family:inherit;
}
.wysiwyg-btn:hover{border-color:var(--teal); color:var(--teal-dark);}
.wysiwyg-sep{width:1px; align-self:stretch; background:var(--border-soft); margin:2px 4px;}
.wysiwyg-editor{
  min-height:140px; padding:12px 14px; font-size:var(--fs-base); line-height:1.6; color:var(--ink);
  outline:none; overflow-y:auto;
}
.wysiwyg-editor:empty:before{content:attr(data-placeholder); color:var(--muted);}
.wysiwyg-editor p{margin:0 0 10px;}
.wysiwyg-editor h2{font-size:var(--fs-xl); margin:14px 0 8px;}
.wysiwyg-editor h3{font-size:var(--fs-lg); margin:12px 0 6px;}
.wysiwyg-editor blockquote{
  margin:8px 0; padding:6px 14px; border-left:3px solid var(--teal); color:var(--muted); background:var(--bg);
}
.wysiwyg-editor ul, .wysiwyg-editor ol{margin:0 0 10px; padding-left:24px;}
.wysiwyg-editor a{color:var(--teal); text-decoration:underline;}
.wysiwyg-link-dialog{
  display:flex; gap:6px; align-items:center; padding:8px; background:var(--bg); border-bottom:1px solid var(--border);
}
.wysiwyg-link-input{
  flex:1; padding:6px 9px; border:1px solid var(--input-border); border-radius:0; font-size:var(--fs-sm); font-family:inherit;
}

/* --- Postcode autofill hint (static/js/postal_autofill.js) --- */
.postal-autofill-hint{font-size:var(--fs-xs);}
.postal-autofill-hint:hover{text-decoration:underline;}

/* --- Crosslink picker (static/js/crosslink_picker.js) --- */
.crosslink-dialog{
  position:absolute; z-index:200; background:var(--surface); border:1px solid var(--border); border-radius:0;
  box-shadow:0 12px 28px rgba(43,46,51,0.18); padding:10px; width:min(420px, 90vw);
}
.crosslink-search-input{
  width:100%; padding:8px 10px; border:1px solid var(--input-border); border-radius:0; font-size:var(--fs-sm); font-family:inherit; margin-bottom:8px;
}
.crosslink-results{max-height:260px; overflow-y:auto;}
.crosslink-result{
  display:flex; align-items:center; gap:8px; padding:7px 8px; border-radius:0; cursor:pointer; font-size:var(--fs-sm);
}
.crosslink-result:hover{background:var(--bg);}
.crosslink-result-type{
  font-size:var(--fs-xxs); font-weight:700; text-transform:uppercase; letter-spacing:.02em; color:#fff;
  background:var(--teal); border-radius:0; padding:2px 6px; flex-shrink:0;
}
.crosslink-result-title{color:var(--ink);}
.crosslink-empty{padding:10px; color:var(--muted); font-size:var(--fs-sm); text-align:center;}
.crosslink-dialog-actions{display:flex; justify-content:flex-end; gap:6px; margin-top:8px;}

/* ---------- calendar (events app) — self-coded month grid, no JS library ---------- */
.cal-nav{display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:14px;}
.cal-nav h2{margin:0; font-size:var(--fs-xl);}
.cal-grid-wrap{overflow-x:auto; margin-bottom:28px;}
.cal-grid{display:grid; grid-template-columns:repeat(7,minmax(110px,1fr)); gap:1px; background:var(--border); border:1px solid var(--border); border-radius:0; overflow:hidden; min-width:780px;}
.cal-weekday{
  background:var(--surface-alt); color:var(--muted); font-size:var(--fs-xxs); font-weight:700;
  text-transform:uppercase; letter-spacing:.03em; padding:8px 10px;
}
.cal-day{background:var(--surface); min-height:104px; padding:8px; display:flex; flex-direction:column; gap:4px;}
.cal-day.is-other-month{background:var(--bg); color:var(--muted);}
.cal-day.is-today .cal-day-num{
  background:var(--teal); color:#fff; border-radius:0; width:22px; height:22px;
  display:inline-flex; align-items:center; justify-content:center;
}
.cal-day-num{font-size:var(--fs-xs); font-weight:700; color:var(--ink);}
.cal-day.is-other-month .cal-day-num{color:var(--muted); font-weight:500;}
.cal-event-pill{
  display:block; background:var(--teal); color:#fff; font-size:var(--fs-xxs); font-weight:600;
  border-radius:0; padding:2px 6px; text-decoration:none; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.cal-event-pill:hover{background:var(--teal-dark); text-decoration:none;}
.cal-event-pill.is-pending{background:var(--gold); color:var(--ink);}
@media (max-width:700px){
  .cal-grid{min-width:640px;}
  .cal-day{min-height:84px;}
}

/* =========================================================
   v1.20.0 — passwordless login + cookie notice + pronouns
   ========================================================= */
.otp-input{font-size:var(--fs-display); letter-spacing:10px; text-align:center; font-variant-numeric:tabular-nums; max-width:260px;}
.profile-pronouns{font-family:var(--font-body); font-size:var(--fs-md); font-weight:400; color:var(--muted);}
.cookie-notice{
  position:fixed; left:16px; right:16px; bottom:16px; z-index:60;
  display:flex; gap:14px; align-items:center; justify-content:space-between;
  max-width:760px; margin:0 auto; padding:12px 16px;
  background:var(--surface); color:var(--ink); border:1px solid var(--border);
  border-radius:0; box-shadow:0 8px 28px rgba(0,0,0,0.12); font-size:var(--fs-sm);
}
.cookie-notice[hidden]{display:none;}
.cookie-notice p{margin:0;}
.cookie-notice a{color:var(--teal); text-decoration:underline;}
@media (max-width:560px){ .cookie-notice{flex-direction:column; align-items:stretch; text-align:center;} }

/* v1.21.0 — newsletter archive, delivery preference, digest toolbar */
.list-row{display:flex; align-items:center; justify-content:space-between; gap:14px; padding:12px 16px; margin-bottom:8px; background:var(--surface); border:1px solid var(--border); border-radius:0; color:inherit; text-decoration:none;}
.list-row:hover{border-color:var(--teal);}
.list-row-main{display:flex; flex-direction:column; gap:2px; min-width:0;}
.list-row-main strong{font-family:var(--font-heading); color:var(--teal-dark); font-size:var(--fs-md);}
.delivery-options label{display:flex; gap:8px; align-items:center; margin:6px 0;}
.digest-toolbar{display:flex; flex-wrap:wrap; gap:10px; align-items:center; padding:10px 12px; margin-bottom:14px; background:var(--surface-alt); border:1px dashed var(--border); border-radius:0;}
.digest-toolbar select{padding:6px 8px;}

/* v1.21.2 — text typeahead (municipios / organizaciones) */
.typeahead-wrap{position:relative;}
.typeahead-list{top:100%;}
.typeahead-row small{color:var(--muted); font-size:var(--fs-xs);}
.typeahead-row.is-active{background:var(--bg); color:var(--teal);}


/* =========================================================
   v1.22.0 — LIST / CARDS VIEW for content listings.
   `.course-grid.view-grid` is the opt-in container used by the six
   listing pages (projects, skills market, courses, webinars, blog, KB).
   Without <html data-view="cards"> it renders as a compact list; with it,
   the classic card grid. Other .course-grid users (hub, KB categories,
   calendar) keep the grid unconditionally. See static/js/view_toggle.js.
   ========================================================= */
.view-toggle{display:inline-flex; border:1px solid var(--border); border-radius:0; padding:2px; background:var(--surface);}
.view-toggle-btn{
  display:inline-flex; align-items:center; justify-content:center; width:26px; height:22px;
  border:none; border-radius:0; background:transparent; color:var(--muted); cursor:pointer; padding:0;
}
.view-toggle-btn:hover{color:var(--teal-dark); background:var(--bg);}
.view-toggle-btn[aria-pressed="true"]{background:var(--teal); color:#fff;}
.view-toggle-btn svg{display:block;}

.view-grid{display:flex; flex-direction:column; gap:4px;}
.view-grid .course-card{flex-direction:row; align-items:center; gap:12px; padding:5px 12px 5px 6px; border-radius:0;}
.view-grid .course-card:hover{transform:none; box-shadow:0 3px 12px rgba(43,46,51,0.07);}
.view-grid .course-card-cover{
  /* Icon tile. A status badge (BUSCA COLABORADORES, EN DIRECTO, BORRADOR…)
     stacks under the icon and wraps inside a narrow column instead of
     stretching the tile across the row. */
  flex-direction:column; gap:2px; height:auto; min-height:36px; min-width:36px; max-width:132px; width:auto;
  padding:3px 7px; border-radius:0; font-size:var(--fs-h3); line-height:1; flex:none;
}
.view-grid .course-card-cover .badge{
  margin:0; font-size:var(--fs-xxs); padding:0 5px; line-height:1.3; white-space:normal; text-align:center; letter-spacing:0.02em;
}
.view-grid .course-card-body{padding:0; flex-direction:row; align-items:center; flex-wrap:wrap; gap:4px 16px; min-width:0;}
.view-grid .course-card-title{flex:1 1 220px; margin:0; font-size:var(--fs-base); min-width:0;}
.view-grid .course-card-summary{
  flex:2 1 260px; margin:0; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.view-grid .course-card-meta{flex:0 0 auto; justify-content:flex-start; gap:10px; margin-left:auto;}
.view-grid .course-card-meta + .course-card-meta{margin-left:0;}
.view-grid .webinar-card-when{margin:0; flex:0 0 auto;}
.view-grid .course-card-progress{flex-basis:100%; margin-top:2px;}
@media (max-width:760px){
  .view-grid .course-card-body{flex-direction:column; align-items:flex-start; gap:3px;}
  .view-grid .course-card-title, .view-grid .course-card-summary{flex:none; width:100%;}
  .view-grid .course-card-summary{white-space:normal; display:-webkit-box; -webkit-line-clamp:1; -webkit-box-orient:vertical;}
  .view-grid .course-card{gap:10px; padding:8px 10px 8px 8px;}
  .view-grid .course-card-meta{margin-left:0;}
}

html[data-view="cards"] .view-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:16px;}
html[data-view="cards"] .view-grid .course-card{flex-direction:column; align-items:stretch; gap:0; padding:0; border-radius:0;}
html[data-view="cards"] .view-grid .course-card:hover{transform:translateY(-3px); box-shadow:0 14px 28px rgba(43,46,51,0.09);}
html[data-view="cards"] .view-grid .course-card-cover{
  flex-direction:row; gap:8px; height:96px; min-height:0; width:auto; min-width:0; max-width:none; padding:0; border-radius:0; font-size:var(--fs-display); line-height:normal;
}
html[data-view="cards"] .view-grid .course-card-cover .badge{
  margin-right:6px; font-size:var(--fs-xxs); padding:1px 7px; line-height:1.6; white-space:nowrap; letter-spacing:0.04em;
}
html[data-view="cards"] .view-grid .course-card-body{padding:14px 16px; flex-direction:column; align-items:stretch; flex-wrap:nowrap; gap:0;}
html[data-view="cards"] .view-grid .course-card-title{flex:none; margin-bottom:4px; font-size:var(--fs-md);}
html[data-view="cards"] .view-grid .course-card-summary{flex:1; margin-bottom:8px; white-space:normal; overflow:visible; display:block;}
html[data-view="cards"] .view-grid .course-card-meta{flex:none; justify-content:space-between; margin-left:0;}
html[data-view="cards"] .view-grid .webinar-card-when{margin-bottom:8px;}

/* =========================================================
   v1.23.0 — DESARROLLO (project-development workspace)
   ========================================================= */
.dev-list{display:flex; flex-direction:column; gap:6px;}
.dev-row{
  display:flex; align-items:center; gap:14px; padding:7px 12px; background:var(--surface);
  border:1px solid var(--border); border-radius:0; color:var(--ink); text-decoration:none;
}
.dev-row:hover{box-shadow:0 3px 12px rgba(43,46,51,0.07); text-decoration:none;}
.dev-row-main{flex:1 1 320px; min-width:0;}
.dev-row-title{font-family:var(--font-heading); font-weight:700; font-size:var(--fs-md); display:flex; align-items:center; gap:8px; flex-wrap:wrap;}
.dev-row-main .fmeta{white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.dev-row-meta{display:flex; align-items:center; gap:12px; font-size:var(--fs-xs); color:var(--muted); flex:none;}
.dev-mini-progress{display:inline-block; width:60px; height:6px; background:var(--bg); border-radius:0; overflow:hidden;}
.dev-mini-progress i{display:block; height:100%; background:var(--gold);}
.dev-status-idea,.dev-status-design{background:var(--bg); color:var(--muted);}
.dev-status-funding{background:rgba(226,192,68,0.22); color:#8a6d10;}
.dev-status-active{background:rgba(46,139,87,0.15); color:#1f6b45;}
.dev-status-paused,.dev-status-archived{background:var(--border-soft); color:var(--muted);}
.dev-status-completed{background:var(--teal); color:#fff;}

.dev-head{display:flex; justify-content:space-between; align-items:flex-start; gap:16px; flex-wrap:wrap; margin-bottom:12px;}
.dev-head-actions{display:flex; gap:6px; align-items:center; flex-wrap:wrap; justify-content:flex-end;}
.dev-head-actions form{display:inline; margin:0;}
.dev-head-actions .btn{white-space:nowrap;}
.dev-tabs{display:flex; gap:2px; border-bottom:2px solid var(--border); margin-bottom:12px; overflow-x:auto; scrollbar-width:none; position:sticky; top:0; z-index:5; background:var(--bg); padding-top:4px;}
.dev-tabs a{
  padding:6px 10px; font-size:var(--fs-sm); font-weight:600; color:var(--muted); border-bottom:2px solid transparent; margin-bottom:-2px;
  white-space:nowrap; text-decoration:none;
}
.dev-tabs a small{font-weight:700; font-size:var(--fs-xxs); background:var(--bg); border-radius:0; padding:1px 6px; margin-left:2px; color:var(--muted);}
.dev-tabs a:hover{color:var(--teal-dark); text-decoration:none;}
.dev-tabs a.is-active{color:var(--teal-dark); border-bottom-color:var(--teal);}
.dev-panel[hidden]{display:none;}
.dev-panel-toolbar{display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:12px;}
.dev-grid-2{display:grid; grid-template-columns:2fr 1fr; gap:12px;}
@media (max-width:860px){.dev-grid-2{grid-template-columns:1fr;}}
.dev-card{margin-top:0; padding:14px 16px; margin-bottom:10px;}
.dev-card h2{font-size:var(--fs-h3); margin-bottom:10px;}
.dev-card h3{font-size:var(--fs-md); margin:14px 0 6px;}
.dev-card h4{font-size:var(--fs-base); margin:12px 0 6px;}
.dev-table{width:100%; border-collapse:collapse; font-size:var(--fs-sm);}
.dev-table td,.dev-table th{padding:5px 7px; vertical-align:middle; text-align:left;}
.dev-table-bordered{background:var(--surface); border:1px solid var(--border); border-radius:0; overflow:hidden;}
.dev-table-bordered th{background:var(--bg); font-size:var(--fs-xxs); text-transform:uppercase; letter-spacing:0.05em; color:var(--muted);}
.dev-table-bordered td{border-top:1px solid var(--border-soft);}
.dev-table-bordered tfoot th{font-size:var(--fs-sm); text-transform:none; letter-spacing:0;}
.dev-table tr.is-muted td{color:var(--muted); opacity:0.7;}
.text-danger{color:#b3261e;}

/* theory of change */
.toc-board{display:grid; grid-template-columns:repeat(6,minmax(150px,1fr)); gap:10px; overflow-x:auto;}
@media (max-width:1000px){.toc-board{grid-template-columns:repeat(3,minmax(160px,1fr));}}
@media (max-width:600px){.toc-board{grid-template-columns:1fr;}}
.toc-col{background:var(--bg); border:1px solid var(--border); border-radius:0; padding:8px; min-height:120px;}
.toc-col-head{font-size:var(--fs-xxs); font-weight:700; text-transform:uppercase; letter-spacing:0.05em; color:var(--muted); display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; padding:0 2px;}
.toc-add{display:inline-flex; width:20px; height:20px; align-items:center; justify-content:center; border-radius:0; background:var(--surface); border:1px solid var(--border); color:var(--teal); font-weight:700; text-decoration:none;}
.toc-add:hover{background:var(--teal); color:#fff; text-decoration:none;}
.toc-item{background:var(--surface); border:1px solid var(--border); border-radius:0; padding:6px 8px; margin-bottom:4px; font-size:var(--fs-xs);}
.toc-item-title{font-weight:600; margin-bottom:2px;}
.toc-sub{font-size:var(--fs-xxs); color:var(--muted); margin-top:4px;}
.toc-empty{color:var(--muted); text-align:center; font-size:var(--fs-xs); padding:10px 0;}

/* OKR */
.okr-head{display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap;}
.okr-progress{display:flex; align-items:center; gap:8px; min-width:180px; font-size:var(--fs-xs); font-weight:700; color:var(--muted);}
.okr-progress .progress-track{flex:1;}
.kr-title{width:40%;}
.kr-bar{width:22%;}
.kr-bar .progress-track{height:6px;}
.kr-num{white-space:nowrap; font-size:var(--fs-xs); color:var(--muted);}
.kr-form{display:inline-flex; align-items:center; gap:4px;}
.kr-form input{width:70px; padding:3px 6px; font-size:var(--fs-xs);}
.kr-form .btn-sm{padding:3px 8px; font-size:var(--fs-xxs);}
.kr-date{white-space:nowrap;}

/* timeline */
.timeline{list-style:none; margin:0; padding:0 0 0 14px; border-left:2px solid var(--border);}
.tl-item{position:relative; padding:0 0 14px 18px;}
.tl-item::before{content:""; position:absolute; left:-21px; top:4px; width:12px; height:12px; border-radius:0; background:var(--surface); border:2px solid var(--teal);}
.tl-item.is-done::before{background:var(--teal);}
.tl-item.is-overdue::before{border-color:#b3261e;}
.tl-item.is-today::before{border-color:var(--gold); background:var(--gold);}
.tl-deadline::before{border-radius:0;}
.tl-date{font-size:var(--fs-xs); font-weight:700; color:var(--muted); text-transform:uppercase; letter-spacing:0.03em;}
.tl-title{display:flex; align-items:center; gap:8px; flex-wrap:wrap; font-weight:600; font-size:var(--fs-base);}
.tl-item.is-done .tl-title a{text-decoration:line-through; color:var(--muted);}
.tl-toggle{display:inline;}
.tl-toggle button{background:none; border:none; cursor:pointer; font-size:var(--fs-h3); padding:0; line-height:1; color:var(--teal);}

/* kanban */
.kanban{display:grid; grid-template-columns:repeat(4,1fr); gap:10px;}
@media (max-width:900px){.kanban{grid-template-columns:repeat(2,1fr);}}
@media (max-width:520px){.kanban{grid-template-columns:1fr;}}
.kanban-col{background:var(--bg); border:1px solid var(--border); border-radius:0; padding:8px; min-height:140px;}
.kanban-head{font-size:var(--fs-xxs); font-weight:700; text-transform:uppercase; letter-spacing:0.05em; color:var(--muted); display:flex; align-items:center; gap:6px; margin-bottom:6px; padding:0 2px;}
.kanban-head small{background:var(--surface); border-radius:0; padding:1px 6px;}
.kanban-head .toc-add{margin-left:auto;}
.kanban-done .kanban-card{opacity:0.75;}
.kanban-card{background:var(--surface); border:1px solid var(--border); border-left:3px solid var(--border); border-radius:0; padding:6px 8px; margin-bottom:4px; font-size:var(--fs-xs);}
.kanban-card.prio-high{border-left-color:#b3261e;}
.kanban-card.prio-normal{border-left-color:var(--teal);}
.kanban-card.prio-low{border-left-color:var(--border);}
.kanban-card.is-overdue .kanban-meta{color:#b3261e;}
.kanban-title{font-weight:600; margin-bottom:3px;}
.kanban-meta{display:flex; gap:8px; flex-wrap:wrap; align-items:center;}
.kanban-actions{display:flex; gap:4px; margin-top:6px;}
.kanban-actions form{display:inline;}
.kanban-actions button{background:var(--bg); border:1px solid var(--border); border-radius:0; cursor:pointer; font-size:var(--fs-xxs); padding:2px 7px; color:var(--muted);}
.kanban-actions button:hover{color:var(--teal-dark); border-color:var(--teal);}

/* grants + risks */
.grant-identified,.grant-preparing{background:var(--bg); color:var(--muted);}
.grant-submitted{background:rgba(226,192,68,0.22); color:#8a6d10;}
.grant-awarded{background:rgba(46,139,87,0.15); color:#1f6b45;}
.grant-rejected,.grant-closed{background:var(--border-soft); color:var(--muted);}
.risk-score{display:inline-block; min-width:26px; text-align:center; border-radius:0; padding:1px 6px; font-weight:700; font-size:var(--fs-xs); background:var(--bg);}
.risk-6,.risk-9{background:rgba(179,38,30,0.12); color:#b3261e;}
.risk-3,.risk-4{background:rgba(226,192,68,0.22); color:#8a6d10;}

/* AI analysis */
.analysis-wait{font-weight:600; color:var(--teal-dark);}
.suggestions{display:flex; flex-direction:column; gap:8px;}
.suggestion{display:flex; gap:12px; align-items:flex-start; justify-content:space-between; background:var(--bg); border:1px solid var(--border); border-radius:0; padding:8px 10px;}
.suggestion-main{flex:1; min-width:0; font-size:var(--fs-sm);}
.suggestion-title{font-weight:600; display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-bottom:2px;}
.suggestion-preview{font-size:var(--fs-xs); color:var(--ink); background:var(--surface); border-left:3px solid var(--teal); padding:6px 10px; margin-top:6px; border-radius:0; white-space:pre-wrap;}
.suggestion-actions{display:flex; gap:6px; flex:none; align-items:center;}
.suggestion-actions form{display:inline;}
.suggestion-applied{opacity:0.7;}
.suggestion-dismissed{opacity:0.5;}
@media (max-width:640px){.suggestion{flex-direction:column;} .suggestion-actions{align-self:flex-end;}}

/* dossier print */
.dossier{max-width:820px; margin:0 auto;}
@media print{
  header, footer, .sidebar, .topbar, .footer, .sb-scrim, .no-print, .cookie-notice, .breadcrumb{display:none !important;}
  .content, html[data-sidebar="collapsed"] .content{margin-left:0 !important; padding-bottom:0 !important;}
  main{padding:0;}
  .dossier{border:none; box-shadow:none; padding:0; max-width:none;}
  body{background:#fff; color:#000;}
}

/* v1.24.0 — desarrollo: panel, comments, activity, grant draft */
.panel-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:12px;}
@media (max-width:1000px){.panel-grid{grid-template-columns:1fr 1fr;}}
@media (max-width:640px){.panel-grid{grid-template-columns:1fr;}}
.panel-row{display:flex; justify-content:space-between; gap:10px; padding:5px 0; border-bottom:1px solid var(--border-soft); font-size:var(--fs-sm);}
.panel-row:last-child{border-bottom:none;}
.panel-row a{font-weight:600; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.panel-row .fmeta{flex:none; white-space:nowrap;}
.panel-row.is-overdue a{color:#b3261e;}
.activity-list{list-style:none; margin:0; padding:0; font-size:var(--fs-sm);}
.activity-list li{padding:4px 0; border-bottom:1px solid var(--border-soft); line-height:1.4;}
.activity-list li:last-child{border-bottom:none;}
.activity-list .fmeta{margin-right:4px;}
.comment{padding:8px 0; border-bottom:1px solid var(--border-soft); font-size:var(--fs-sm);}
.comment:last-of-type{border-bottom:none;}
.comment-head{display:flex; gap:8px; align-items:baseline; margin-bottom:2px;}
.comment-head form{margin-left:auto;}
.comment-body{white-space:pre-wrap;}
.comment-form{margin-top:10px; display:flex; flex-direction:column; gap:6px; align-items:flex-start;}
.comment-form textarea{width:100%;}
.grant-draft{margin-top:10px; padding-top:10px; border-top:1px solid var(--border);}

/* v1.25.0 — community projects: campaigns + light PM */
.campaign-cover{background:linear-gradient(135deg, #b3261e, #7a1a14);}
.campaign-goal{margin-bottom:10px;}
.campaign-goal .okr-head{margin-bottom:6px; font-size:var(--fs-md);}
.campaign-cta{display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap; margin-top:8px;}
/* v1.38.3 — campaign actions members tick as done */
.campaign-actions-head{display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap; margin-top:14px; padding-top:12px; border-top:1px solid var(--border-soft);}
.campaign-actions-head h2{margin:0; font-size:var(--fs-h3);}
.campaign-actions{list-style:none; margin:8px 0 0; padding:0;}
.campaign-action{display:flex; justify-content:space-between; align-items:flex-start; gap:12px; padding:9px 0; border-bottom:1px solid var(--border-soft);}
.campaign-action:last-child{border-bottom:none;}
.campaign-action-body{min-width:0; flex:1;}
.campaign-action-body strong{display:block; font-size:var(--fs-base);}
.campaign-action-actions{display:flex; gap:6px; align-items:center; flex:none; flex-wrap:wrap; justify-content:flex-end;}
.campaign-action.is-done .campaign-action-body strong{color:var(--teal-dark);}
.campaign-action.is-inactive .campaign-action-body{opacity:.6;}
@media (max-width:560px){ .campaign-action{flex-direction:column; align-items:stretch;} .campaign-action-actions{justify-content:flex-start;} }
.kanban-3{grid-template-columns:repeat(3,1fr);}
@media (max-width:760px){.kanban-3{grid-template-columns:1fr;}}
.inline-add{align-items:center;}
.inline-add input[type="text"]{flex:1; min-width:180px;}
.inline-add select{width:auto;}
.team-actions{display:flex; gap:4px; flex-wrap:wrap; align-items:center;}
.team-actions form{display:inline;}
.role-coordinator{background:var(--gold); color:#3b2f05;}
.role-member{background:var(--teal); color:#fff;}
.role-interested{background:var(--bg); color:var(--muted);}

/* v1.26.0 — local groups + cerca de mí */
.near-1{background:rgba(46,139,87,0.15); color:#1f6b45; border-color:transparent;}
.near-2{background:rgba(226,192,68,0.22); color:#8a6d10; border-color:transparent;}
.near-3{background:var(--bg); color:var(--muted);}
.group-scope{font-size:var(--fs-xxs); text-transform:uppercase; letter-spacing:0.04em; color:var(--muted); font-weight:700;}
.group-head-meta{display:flex; gap:10px; flex-wrap:wrap; align-items:center; font-size:var(--fs-sm); color:var(--muted); margin-bottom:6px;}
.group-post{padding:10px 0; border-bottom:1px solid var(--border-soft);}
.group-post:last-child{border-bottom:none;}
.group-post h3{margin:0 0 4px; font-size:var(--fs-md);}
.member-chips{display:flex; flex-wrap:wrap; gap:6px;}
.member-chip{display:inline-flex; align-items:center; gap:6px; background:var(--bg); border:1px solid var(--border); border-radius:0; padding:2px 10px 2px 4px; font-size:var(--fs-xs);}
.member-chip .fpost-avatar, .member-chip .fpost-avatar-placeholder{width:22px; height:22px; font-size:var(--fs-xxs); margin:0;}
.member-chip form{display:inline;}

/* v1.27.0 — linked group chats */
.dm-linked-note{color:var(--teal-dark); font-weight:600;}
#dmRenamePanel input{max-width:320px;}

/* v1.29.0 — follows, personal notifications, mentions */
.follow-form{display:inline;}
.btn-following{background:var(--gold); color:#3b2f05; border:1.5px solid var(--gold);}
.btn-following:hover{background:#cfae3a;}
a.mention{font-weight:600; color:var(--teal-dark); background:rgba(88,123,127,0.10); border-radius:0; padding:0 3px; text-decoration:none;}
a.mention:hover{text-decoration:underline;}
.notif-h2{font-size:var(--fs-h3); margin:0 0 4px;}
.pn-list{list-style:none; margin:0 0 6px; padding:0;}
.pn-item{display:flex; gap:8px; align-items:flex-start; padding:6px 8px; border-bottom:1px solid var(--border-soft); font-size:var(--fs-sm); border-radius:0;}
.pn-item.pn-unread{background:rgba(226,192,68,0.14);}
.pn-icon{flex:none; width:20px; text-align:center; font-weight:700; color:var(--teal-dark);}
.pn-text a{font-weight:600;}

/* v1.31.0 — global search */
.nav-search{display:inline-flex; align-items:center; gap:4px; background:var(--bg); border:1px solid var(--border); border-radius:0; padding:2px 8px 2px 8px; margin:0 2px;}
.nav-search .nav-icon{width:16px; height:16px; color:var(--muted); flex:none;}
.nav-search input{border:none; background:transparent; width:clamp(56px, 7vw, 96px); min-width:0; padding:2px 4px; font-size:var(--fs-xs); transition:width .15s ease;}
.nav-search input:focus{outline:none; width:170px;}
@media (min-width:861px){.nav-search{flex:0 1 auto; min-width:0;}}
.nav-search.active{border-color:var(--teal);}
@media (max-width:860px){.nav-search{width:100%; margin:6px 0;} .nav-search input, .nav-search input:focus{width:100%;}}
.gsearch-form{display:flex; gap:6px; margin-bottom:12px; max-width:720px;}
.gsearch-form input{flex:1; font-size:var(--fs-md); padding:8px 12px;}
.gsearch-tabs{display:flex; gap:4px; flex-wrap:wrap; margin-bottom:12px;}
.gsearch-tabs a{font-size:var(--fs-xs); padding:3px 10px; border:1px solid var(--border); border-radius:0; color:var(--muted); text-decoration:none;}
.gsearch-tabs a.is-active{background:var(--teal); color:#fff; border-color:var(--teal);}
.gsearch-group{margin-bottom:14px;}
.gsearch-group h2{font-size:var(--fs-h3); margin:0 0 6px; display:flex; gap:8px; align-items:baseline;}
.gsearch-snippet{white-space:normal !important; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;}

/* v1.32.0 — event registration */
.rsvp-state{font-weight:700; margin:0 0 8px; padding:6px 10px; border-radius:0; font-size:var(--fs-sm);}
.rsvp-going{background:rgba(46,139,87,0.15); color:#1f6b45;}
.rsvp-wait{background:rgba(226,192,68,0.22); color:#8a6d10;}
.rsvp-avatars{display:flex; flex-wrap:wrap; gap:4px; margin-top:10px;}
.rsvp-avatars .fpost-avatar, .rsvp-avatars .fpost-avatar-placeholder{width:26px; height:26px; font-size:var(--fs-xxs); margin:0;}
.checkin-btn{background:none; border:none; font-size:var(--fs-h2); cursor:pointer; color:var(--teal); padding:0; line-height:1;}
tr.is-checked td{background:rgba(46,139,87,0.06);}

/* v1.33.0 — shared files */
.files-folder{font-size:var(--fs-sm); margin:10px 0 4px; color:var(--muted); text-transform:uppercase; letter-spacing:.04em;}
.files-list{display:flex; flex-direction:column; gap:4px;}
.file-row{display:flex; gap:10px; align-items:center; padding:6px 8px; border:1px solid var(--border-soft); border-radius:0; background:var(--surface); font-size:var(--fs-sm);}
.file-icon{flex:none; font-size:var(--fs-h2);}
.file-main{flex:1; min-width:0;}
.file-main a{font-weight:600;}
.files-upload{margin-top:12px; padding-top:10px; border-top:1px solid var(--border);}

/* v1.35.0 — analytics */
.kpi-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:8px;}
@media (max-width:900px){.kpi-grid{grid-template-columns:repeat(2,1fr);}}
.kpi{background:var(--surface); border:1px solid var(--border); border-radius:0; padding:8px 10px;}
.kpi-num{font-family:var(--font-body); font-size:var(--fs-xl); font-weight:700; color:var(--teal-dark); line-height:1.2;}
.kpi-num small{font-size:var(--fs-xxs); color:var(--muted); font-weight:400; font-family:var(--font-body);}
.kpi-label{font-size:var(--fs-xxs); color:var(--muted);}
.series-wrap{overflow-x:auto;}
.series-table td.num, .series-table th.num, .dev-table td.num{text-align:right; font-variant-numeric:tabular-nums;}
.series-table td.chart svg{height:34px; width:180px; display:block;}
.crm-table td, .crm-table th{font-size:var(--fs-xs); padding:4px 6px;}

/* v1.36.0 — organisation profiles */
.org-logo{flex:none; width:40px; height:40px; border-radius:0; background:var(--bg); border:1px solid var(--border); display:inline-flex; align-items:center; justify-content:center; font-size:var(--fs-xl); overflow:hidden;}
.org-logo img{width:100%; height:100%; object-fit:contain;}
.org-logo-lg{width:72px; height:72px; font-size:var(--fs-hero); border-radius:0;}
.org-row{gap:12px;}
.needs-card{border-left:3px solid var(--gold);}

/* v1.37.0 — translated content */
.tr-panel{display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:4px 0 10px; font-size:var(--fs-sm);}
.tr-langs{display:inline-flex; gap:4px; flex-wrap:wrap; margin:0;}
.tr-lang{cursor:pointer; border:1px solid var(--border); background:var(--bg); font:inherit; font-size:var(--fs-xs);}
.tr-lang.active{background:var(--gold); border-color:var(--gold); color:#fff;}
.tr-field{margin-bottom:10px;}
.tr-cols{display:grid; grid-template-columns:1fr 1fr; gap:14px;}
.tr-original{background:var(--bg); border:1px solid var(--border); border-radius:0; padding:8px 10px; font-size:var(--fs-base); max-height:420px; overflow:auto;}
.tr-target textarea, .tr-target input{width:100%;}
@media (max-width:760px){.tr-cols{grid-template-columns:1fr;}}

/* v1.38.0 — FAQ sections + header/detail polish */
.faq-section{margin-top:22px;}
.faq-section h2{font-size:var(--fs-lg); margin:0 0 8px; display:flex; align-items:center; gap:8px;}
.faq-section h2 small{font-weight:600; font-size:var(--fs-xs); color:var(--muted);}
.faq-toc{display:flex; flex-wrap:wrap; gap:6px; margin:10px 0 4px;}
.faq-toc a{font-size:var(--fs-xs); padding:3px 10px; border:1px solid var(--border); border-radius:0; text-decoration:none; color:var(--teal-dark); background:var(--surface);}
.faq-toc a:hover{border-color:var(--teal);}
.faq-item{border-radius:0; margin-bottom:6px;}
.faq-question{padding:10px 14px; font-size:var(--fs-base);}
.faq-answer .legal-text{padding:0 14px 12px; font-size:var(--fs-base); line-height:1.6;}
.faq-manage{font-size:var(--fs-xs); margin-left:auto;}
.btn-danger-outline{background:transparent; color:#b3261e; border:1.5px solid #d9a5a1;}
.btn-danger-outline:hover{background:#fbeceb; color:#8f1d16;}
.dev-head h1{font-size:var(--fs-display); line-height:1.2;}
.dev-status-bar{display:flex; gap:8px; flex-wrap:wrap; align-items:center; font-size:var(--fs-xs); color:var(--muted); margin-bottom:6px;}

/* v1.39.0 — "Mi zona": inline SVG map of members and organisations around me */
.zone-radius{display:flex; align-items:center; gap:8px; font-size:var(--fs-sm);}
.zone-radius select{padding:6px 10px;}
.zone-grid{display:grid; grid-template-columns:minmax(0,1.4fr) minmax(0,1fr); gap:14px; align-items:start;}
@media (max-width:900px){ .zone-grid{grid-template-columns:1fr;} }
.zone-map-card .okr-head{margin-bottom:8px;}
.zone-map{width:100%; height:auto; max-height:70vh; background:var(--bg); border-radius:0; border:1px solid var(--border-soft);}
.zone-provinces path{fill:var(--surface); stroke:var(--border); stroke-linejoin:round;}
html[data-theme="dark"] .zone-provinces path{fill:rgba(255,255,255,0.04); stroke:rgba(255,255,255,0.18);}
.zone-range{fill:rgba(200,160,40,0.10); stroke:var(--gold); stroke-dasharray:2 2;}
.zone-person{fill:var(--teal); stroke:#fff; stroke-width:0.4; cursor:pointer;}
.zone-person:hover{fill:var(--teal-dark);}
.zone-org{fill:#b3261e; stroke:#fff; stroke-width:0.3; cursor:pointer;}
.zone-me{fill:var(--gold); stroke:#fff;}
.zone-label{fill:var(--ink); font-family:var(--font-body); font-weight:700; paint-order:stroke; stroke:var(--bg); stroke-width:1.2px; pointer-events:none;}
.zone-legend{margin:8px 0 0; display:flex; align-items:center; gap:6px; flex-wrap:wrap;}
.zone-key{display:inline-block; width:10px; height:10px; border-radius:0; vertical-align:middle;}
.zone-key-me{background:var(--gold);} .zone-key-person{background:var(--teal);} .zone-key-org{background:#b3261e; border-radius:0;}
.checkbox-row{display:flex; flex-wrap:wrap; align-items:center; gap:6px;}
.checkbox-row input[type=checkbox]{width:auto; margin:0;}

/* v1.39.1 — volunteer availability pills */
.tag-pill-avail{background:rgba(200,160,40,0.16); color:#6b4f00;}
html[data-theme="dark"] .tag-pill-avail{background:rgba(233,196,106,0.2); color:#e9c46a;}

/* v1.40.0 — Noticias (RSS reader, easy-read mode) */
.news-filters{flex-wrap:wrap;}
.news-list{display:flex; flex-direction:column; gap:10px;}
.news-card{display:flex; gap:14px; background:var(--surface); border:1px solid var(--border); border-radius:0; padding:12px 14px;}
.news-card.is-unread{border-left:4px solid var(--gold);}
.news-thumb{flex:none; width:120px; height:90px; border-radius:0; overflow:hidden; background:var(--bg);}
.news-thumb img{width:100%; height:100%; object-fit:cover; display:block;}
.news-body{min-width:0; flex:1;}
.news-meta{display:flex; align-items:center; gap:8px; flex-wrap:wrap; font-size:var(--fs-xs); color:var(--muted); margin-bottom:4px;}
.news-source{font-weight:600; color:var(--teal-dark);}
.news-title{font-size:var(--fs-lg); margin:0 0 4px;}
.news-title a{color:inherit;}
.news-card.is-unread .news-title{font-weight:700;}
.news-excerpt{margin:0 0 6px; font-size:var(--fs-base); color:var(--ink);}
.news-actions{display:flex; gap:12px; flex-wrap:wrap; font-size:var(--fs-xs);}
.news-actions form{display:inline;}
.news-actions .link-action{background:none; border:0; padding:0; color:var(--teal); cursor:pointer; font:inherit; font-size:var(--fs-xs);}
.tag-pill-lang{background:rgba(88,123,127,0.10); color:var(--teal-dark);}
.news-article h1{margin:6px 0 10px;}
.news-toolbar{display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-bottom:12px;}
.news-toolbar form{display:inline;}
.news-hero{max-width:100%; height:auto; border-radius:0; margin-bottom:12px;}
.news-easy-read{font-size:var(--fs-lg); line-height:1.65; max-width:70ch;}
.news-easy-read img{max-width:100%; height:auto; border-radius:0; display:block; margin:12px 0;}
.news-easy-read iframe{max-width:100%; aspect-ratio:16/9; height:auto; border:0; border-radius:0; margin:12px 0;}
.news-easy-read figure{margin:12px 0;}
.news-easy-read figcaption{font-size:var(--fs-sm); color:var(--muted);}
.news-easy-read blockquote{border-left:3px solid var(--border); margin:12px 0; padding:4px 14px; color:var(--muted);}
.news-easy-read h2,.news-easy-read h3,.news-easy-read h4{margin:18px 0 6px;}
@media (max-width:560px){ .news-card{flex-direction:column;} .news-thumb{width:100%; height:160px;} .news-easy-read{font-size:var(--fs-h3);} }

/* ---- Onboarding paths (v1.41.0): wizard cards, "Mi camino", dashboard panel ---- */
.path-cards{display:grid; grid-template-columns:1fr; gap:10px; margin:14px 0 18px;}
.path-card{display:flex; gap:12px; align-items:flex-start; padding:12px 14px; border:1px solid var(--border); border-radius:0; cursor:pointer; background:var(--surface);}
.path-card:hover{border-color:var(--teal);}
.path-card.is-selected, .path-card:has(input:checked){border-color:var(--teal); box-shadow:0 0 0 2px color-mix(in srgb, var(--teal) 30%, transparent);}
.path-card input{width:auto; margin-top:5px; flex:0 0 auto;}
.path-card-icon{font-size:var(--fs-display); line-height:1; flex:0 0 auto;}
.path-card-body{display:flex; flex-direction:column; gap:3px;}
.path-head{display:flex; gap:14px; align-items:center; margin-bottom:10px;}
.path-head .path-card-icon{font-size:var(--fs-hero);}
.path-steps{margin:4px 0 10px; padding-left:18px; columns:2; column-gap:24px;}
.path-steps li{margin-bottom:4px;}
.path-suggest-grid{display:grid; grid-template-columns:repeat(3, 1fr); gap:12px;}
.path-suggest-grid h3{font-size:var(--fs-sm); margin:0 0 4px; text-transform:uppercase; letter-spacing:.05em; color:var(--muted);}
.path-suggest-grid .panel-row{display:flex; justify-content:space-between; gap:8px; padding:5px 0; border-bottom:1px solid var(--border);}
@media (max-width:760px){ .path-suggest-grid{grid-template-columns:1fr;} }

/* ---- Moderation queue, warnings and blocks (v1.42.0) ---- */
.mod-banner{background:#fff4d6; border:1px solid #e6c45a; color:#5a4300; border-radius:0; padding:10px 14px; margin-bottom:14px;}
:root[data-theme="dark"] .mod-banner{background:#3a3010; border-color:#7a6420; color:#f3e2a0;}
.mod-status{display:inline-block; font-size:var(--fs-xs); padding:2px 8px; border-radius:0; border:1px solid var(--border); color:var(--muted);}
.mod-status-escalated{border-color:#c0392b; color:#c0392b;}
.mod-status-in_review{border-color:var(--teal); color:var(--teal);}
.mod-status-resolved, .mod-status-dismissed{opacity:.75;}
.mod-sla-dot{display:inline-block; width:9px; height:9px; border-radius:0; background:#3aa76d; margin-right:4px; vertical-align:middle;}
.mod-sla-due_soon .mod-sla-dot{background:#e6a23c;}
.mod-sla-breached .mod-sla-dot{background:#c0392b;}
tr.mod-sla-breached td:first-child{box-shadow:inset 4px 0 0 #c0392b;}
tr.mod-sla-due_soon td:first-child{box-shadow:inset 4px 0 0 #e6a23c;}
tr.mod-high td{font-weight:600;}
.mod-evidence{background:var(--bg); border-left:3px solid var(--border); padding:10px 12px; border-radius:0; margin:8px 0; white-space:pre-line;}
.mod-timeline{margin-top:10px; display:grid; gap:4px;}
.mod-outcomes{display:grid; gap:6px; margin:8px 0 12px;}
.mod-outcome input[type=radio]{width:auto; margin:0;}
.mod-warning{border-left:4px solid #e6a23c;}
.mod-warning-2{border-left-color:#e67e22;}
.mod-warning-3{border-left-color:#c0392b;}
.nav-badge-alert{background:#c0392b;}
.dm-blocked-note{padding:10px 0;}

/* ---- Coordination between organisations (v1.43.0) ---- */
.coord-nav{display:flex; gap:6px; flex-wrap:wrap; margin:6px 0 14px;}
.coord-nav a{padding:6px 12px; border:1px solid var(--border); border-radius:0; font-size:var(--fs-sm); text-decoration:none; color:var(--ink);}
.coord-nav a.active, .coord-nav a:hover{border-color:var(--teal); color:var(--teal);}
.cal-list{display:grid; gap:10px;}
.cal-day{display:grid; grid-template-columns:64px 1fr; gap:12px; padding:10px 12px; border:1px solid var(--border); border-radius:0; background:var(--surface);}
.cal-day.is-today{border-color:var(--teal); box-shadow:0 0 0 2px color-mix(in srgb, var(--teal) 25%, transparent);}
.cal-day.is-past{opacity:.75;}
.cal-day-head{display:flex; flex-direction:column; align-items:center; justify-content:center; border-right:1px solid var(--border);}
.cal-day-head strong{font-size:var(--fs-display); line-height:1;}
.cal-day-head span{font-size:var(--fs-xs); color:var(--muted);}
.cal-day-items{display:grid; gap:6px;}
.cal-item{display:grid; grid-template-columns:24px 1fr auto; gap:8px; align-items:center; text-decoration:none; color:var(--ink); padding:4px 6px; border-radius:0;}
.cal-item:hover{background:var(--bg);}
.cal-item.is-done .cal-title{text-decoration:line-through; color:var(--muted);}
.cal-milestone .cal-icon{filter:saturate(1.2);}
.stmt-signers{padding-left:20px; display:grid; grid-template-columns:repeat(auto-fill, minmax(260px, 1fr)); gap:4px 16px;}
.board-hint{background:#eef7f5; border:1px solid var(--teal); border-radius:0; padding:8px 12px; color:var(--teal-dark);}
:root[data-theme="dark"] .board-hint{background:#12302c;}
.board-topic.is-overlap{border-left:4px solid var(--teal);}
.board-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(240px, 1fr)); gap:10px;}
.board-card{border:1px solid var(--border); border-radius:0; padding:10px 12px; background:var(--surface); display:grid; gap:4px;}
.board-card.board-done{opacity:.65;}
.board-card.board-paused{border-style:dashed;}
.board-org{font-weight:700;}
.board-meta a{text-decoration:none;}
@media (max-width:760px){ .cal-day{grid-template-columns:52px 1fr;} }


/* ---- Inline monochrome icons ({% icon %} tag, v1.43.1) ---- */
.ico{width:1em; height:1em; display:inline-block; vertical-align:-0.15em; flex:none;}
.ico-lg{width:1.4em; height:1.4em; vertical-align:-0.3em;}
h1 .ico, h2 .ico, h3 .ico{color:var(--teal);}
.landing-feature-icon .ico, .course-card-cover .ico, .blog-card-cover .ico, .dash-course-icon .ico, .webinar-card-cover .ico, .project-card-cover .ico{width:1.2em; height:1.2em;}
.btn .ico, .link-action .ico{margin-right:4px;}


/* =========================================================
   APP SHELL (v1.44.0) — dark collapsible left sidebar, slim top bar that
   hides on scroll down / returns on scroll up, fixed footer.
   Sidebar state lives on <html data-sidebar="collapsed"> (shell.js).
   ========================================================= */
:root{
  --sidebar-w:228px; --sidebar-w-min:56px; --topbar-h:48px; --footer-h:30px;
  --side-bg:#1f2428; --side-bg-hover:#272d32; --side-active:#2c343a; --side-ink:#d2d7db; --side-muted:#8a949b; --side-border:#2b3238; --side-accent:#8fb8bc;
}
html{scroll-padding-top:calc(var(--topbar-h) + 8px);}
.shell{min-height:100vh;}
.sidebar{
  position:fixed; top:0; left:0; bottom:0; width:var(--sidebar-w); background:var(--side-bg); color:var(--side-ink);
  display:flex; flex-direction:column; z-index:120; transition:width .18s ease, transform .2s ease; overflow:hidden;
}
.sb-head{display:flex; align-items:center; justify-content:space-between; height:var(--topbar-h); padding:0 10px 0 14px; border-bottom:1px solid var(--side-border); flex:none;}
.sb-head .brand{gap:9px; color:var(--side-ink);}
.sb-head .brand-logo-mark{display:block; height:30px; width:30px;}
.sb-head .brand-word{font-weight:700; letter-spacing:.14em; font-size:var(--fs-sm); color:var(--side-ink);}
.sb-collapse{background:none; border:1px solid var(--side-border); color:var(--side-muted); width:28px; height:28px; display:inline-flex; align-items:center; justify-content:center; cursor:pointer; flex:none;}
.sb-collapse:hover{color:var(--side-ink); border-color:var(--side-muted);}
.sb-collapse .nav-icon{width:16px; height:16px; transition:transform .18s ease;}
.sb-user{display:flex; align-items:center; gap:10px; padding:10px 14px; border-bottom:1px solid var(--side-border); color:var(--side-ink); text-decoration:none; flex:none;}
.sb-user:hover{background:var(--side-bg-hover); text-decoration:none; color:#fff;}
.sb-user-avatar{width:30px; height:30px; flex:none; display:inline-flex; align-items:center; justify-content:center; background:var(--side-active); color:var(--side-accent); font-weight:700; font-size:var(--fs-sm); border:1px solid var(--side-border);}
.sb-user-text{display:flex; flex-direction:column; min-width:0; line-height:1.2;}
.sb-user-kicker{font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:var(--side-muted);}
.sb-user-name{font-size:var(--fs-sm); font-weight:600; color:var(--side-accent); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
html[data-sidebar="collapsed"] .sb-user{justify-content:center; padding:10px 0;}
html[data-sidebar="collapsed"] .sb-user-text{display:none;}
.sb-nav{flex:1; overflow-y:auto; overflow-x:hidden; padding:8px 8px 12px; display:flex; flex-direction:column; scrollbar-width:thin; scrollbar-color:var(--side-border) transparent;}
.sb-group{margin-top:10px; display:flex; flex-direction:column;}
.sb-group-bottom{margin-top:auto; padding-top:10px; border-top:1px solid var(--side-border);}
.sb-group-label{display:block; padding:4px 10px 4px; font-size:10.5px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--side-muted); white-space:nowrap;}
.sb-link{
  display:flex; align-items:center; gap:10px; padding:7px 10px; color:var(--side-ink); text-decoration:none; font-size:var(--fs-sm); font-weight:500;
  border-left:2px solid transparent; white-space:nowrap; line-height:1.2;
}
.sb-link .ico{width:16px; height:16px; flex:none; color:var(--side-muted);}
.sb-link span:not(.sb-badge){overflow:hidden; text-overflow:ellipsis;}
.sb-link:hover{background:var(--side-bg-hover); color:#fff; text-decoration:none;}
.sb-link:hover .ico{color:var(--side-accent);}
.sb-link.active{background:var(--side-active); color:#fff; border-left-color:var(--gold);}
.sb-link.active .ico{color:var(--side-accent);}
.sb-link-admin{color:var(--side-accent);}
.sb-link-back{color:var(--side-muted); font-size:var(--fs-xs); margin-bottom:4px;}
.sb-badge{margin-left:auto; min-width:18px; padding:0 5px; height:18px; display:inline-flex; align-items:center; justify-content:center; background:var(--side-accent); color:var(--side-bg); font-size:var(--fs-xxs); font-weight:700;}
.sb-badge-alert{background:#d9736b; color:#fff;}
/* collapsed */
html[data-sidebar="collapsed"] .sidebar{width:var(--sidebar-w-min);}
html[data-sidebar="collapsed"] .sb-head{padding:0; justify-content:center;}
html[data-sidebar="collapsed"] .sb-head .brand-word{display:none;}
html[data-sidebar="collapsed"] .sb-head{padding:0; justify-content:center; flex-direction:column; height:auto; gap:6px; padding:8px 0;}
html[data-sidebar="collapsed"] .sb-collapse .nav-icon{transform:rotate(180deg);}
html[data-sidebar="collapsed"] .sb-group-label{height:1px; padding:0; margin:6px 10px; background:var(--side-border); font-size:0; overflow:hidden;}
html[data-sidebar="collapsed"] .sb-link{justify-content:center; padding:9px 0;}
html[data-sidebar="collapsed"] .sb-link > span:not(.sb-badge){display:none;}
html[data-sidebar="collapsed"] .sb-badge{position:absolute; margin:0; transform:translate(14px,-10px); height:14px; min-width:14px; font-size:9px; padding:0 3px;}
html[data-sidebar="collapsed"] .sb-link{position:relative;}
html[data-sidebar="collapsed"] .content{margin-left:var(--sidebar-w-min);}
html[data-sidebar="collapsed"] .footer{left:var(--sidebar-w-min);}

.content{margin-left:var(--sidebar-w); min-height:100vh; display:flex; flex-direction:column; padding-bottom:var(--footer-h); transition:margin-left .18s ease;}
.content > main{flex:1;}
.topbar{
  position:sticky; top:0; z-index:100; height:var(--topbar-h); background:var(--surface); border-bottom:1px solid var(--border);
  display:flex; align-items:center; gap:10px; padding:0 16px; transition:transform .22s ease, box-shadow .22s ease;
}
.topbar.is-hidden{transform:translateY(-100%);}
.topbar.is-scrolled{box-shadow:0 2px 10px rgba(31,36,40,0.06);}
.brand-mobile{display:none;}
.brand{display:flex; align-items:center; text-decoration:none;}
.brand-logo{height:28px; width:auto; display:block;}
.topbar-right{margin-left:auto; display:flex; align-items:center; gap:4px;}
.nav-search{display:flex; align-items:center; gap:6px; background:var(--bg); border:1px solid var(--border); padding:0 8px; height:32px; width:min(360px, 40vw);}
.nav-search input{border:none; background:none; padding:0; height:30px; font-size:var(--fs-sm); width:100%;}
.nav-search input:focus{outline:none;}
.nav-search .nav-icon{color:var(--muted);}
.nav-icon-link{display:inline-flex; align-items:center; padding:6px; color:var(--ink); position:relative;}
.nav-icon-link:hover{color:var(--teal); text-decoration:none;}
.nav-icon-link.active{color:var(--teal);}
.nav-icon{width:18px; height:18px; display:block; flex:none;}
.nav-badge{
  display:inline-flex; align-items:center; justify-content:center; min-width:16px; height:16px; padding:0 4px;
  background:var(--teal); color:#fff; font-size:var(--fs-xxs); font-weight:700; margin-left:2px; vertical-align:3px;
}
.nav-icon-link .nav-badge{position:absolute; top:0; right:-2px; margin:0;}
.theme-toggle-btn{background:none; border:none; cursor:pointer; color:var(--ink); font:inherit;}
.theme-toggle-btn:hover{color:var(--teal);}
.theme-icon-moon{display:none;}
html[data-theme="dark"] .theme-icon-sun{display:none;}
html[data-theme="dark"] .theme-icon-moon{display:block;}
.nav-toggle{display:none; flex-direction:column; justify-content:center; align-items:center; gap:4px; width:34px; height:34px; background:none; border:1px solid var(--border); cursor:pointer; flex:none;}
.nav-toggle-bar{display:block; width:16px; height:2px; background:var(--ink);}
.sb-scrim{display:none; position:fixed; inset:0; background:rgba(20,24,27,0.45); z-index:115;}
/* user menu */
.nav-dropdown{position:relative;}
.user-menu-btn{display:flex; align-items:center; gap:7px; background:none; border:1px solid transparent; padding:3px 6px 3px 3px; font-size:var(--fs-sm); font-weight:500; color:var(--ink); cursor:pointer; font-family:inherit; white-space:nowrap;}
.user-menu-btn:hover{border-color:var(--border);}
.user-avatar{width:26px; height:26px; border-radius:0; background:var(--teal); color:#fff; display:inline-flex; align-items:center; justify-content:center; font-size:var(--fs-xs); font-weight:700;}
.nav-dropdown-menu{list-style:none; margin:0; padding:4px; position:absolute; top:calc(100% + 4px); right:0; background:var(--surface); border:1px solid var(--border); box-shadow:0 10px 24px rgba(31,36,40,0.12); min-width:190px; display:none; z-index:50;}
.nav-dropdown-menu.open{display:block;}
.nav-dropdown-menu li{margin:0;}
.nav-dropdown-menu a, .nav-dropdown-menu button.nav-dropdown-btn{display:block; width:100%; padding:7px 10px; font-size:var(--fs-sm); font-weight:500; color:var(--ink); text-align:left; background:none; border:none; cursor:pointer; font-family:inherit;}
.nav-dropdown-menu a:hover, .nav-dropdown-menu button.nav-dropdown-btn:hover{background:var(--hover); text-decoration:none; color:var(--teal-dark);}
/* footer */
.footer{
  position:fixed; left:var(--sidebar-w); right:0; bottom:0; height:var(--footer-h); z-index:90;
  display:flex; align-items:center; gap:14px; padding:0 16px; background:var(--surface); border-top:1px solid var(--border);
  color:var(--muted); font-size:var(--fs-xxs); transition:left .18s ease; white-space:nowrap; overflow:hidden;
}
.footer a{color:inherit; text-decoration:none;}
.footer a:hover{color:var(--teal);}
.footer .app-version{margin-left:auto;}
.cookie-notice{bottom:calc(var(--footer-h) + 10px);}
/* page header helper (compact title rows) */
.page-head{display:flex; align-items:baseline; justify-content:space-between; gap:12px; flex-wrap:wrap; margin:0 0 10px;}
.page-head h1{margin:0;}
.page-head .fmeta{margin:0;}
/* dark theme for the shell */
html[data-theme="dark"]{--side-bg:#15181b; --side-bg-hover:#1d2125; --side-active:#23282d; --side-border:#262b30;}
/* narrow screens: off-canvas sidebar, hamburger in the top bar */
@media (max-width:900px){
  .sidebar{transform:translateX(-100%); width:var(--sidebar-w) !important;}
  html[data-sidebar="collapsed"] .sidebar{width:var(--sidebar-w) !important;}
  html[data-sidebar="collapsed"] .sb-link > span:not(.sb-badge){display:inline;}
  html[data-sidebar="collapsed"] .sb-link{justify-content:flex-start; padding:7px 10px;}
  html[data-sidebar="collapsed"] .sb-group-label{height:auto; padding:4px 10px; margin:0; background:none; font-size:10.5px;}
  html[data-sidebar="collapsed"] .sb-head .brand-word{display:inline;}
  html[data-sidebar="collapsed"] .sb-head{flex-direction:row; height:var(--topbar-h); padding:0 10px 0 14px;}
  .sb-collapse{display:none;}
  body.nav-open .sidebar{transform:translateX(0);}
  body.nav-open .sb-scrim{display:block;}
  body.nav-open{overflow:hidden;}
  .content, html[data-sidebar="collapsed"] .content{margin-left:0;}
  .footer, html[data-sidebar="collapsed"] .footer{left:0;}
  .nav-toggle{display:flex;}
  .brand-mobile{display:flex;}
  .nav-search{width:auto; flex:1; min-width:0;}
  .user-menu-name{display:none;}
  .footer{gap:10px; padding:0 12px;}
  .footer a:nth-child(n+4){display:none;}
}
@media (max-width:600px){
  .topbar{padding:0 10px; gap:6px;}
  .nav-search{display:none;}
  .lang-current{padding:4px 6px; gap:3px;}
  .lang-current > span:nth-child(2), .lang-current .lang-caret{display:none;}
  .user-menu-btn{padding:3px;}
  .user-menu-btn .lang-caret{display:none;}
  .nav-icon-link{padding:5px;}
}

/* ---- Temas / Para ti (v1.45.0) ---- */
.tag-link{text-decoration:none;}
.tag-link:hover{border-color:var(--teal); color:var(--teal); text-decoration:none;}
.tag-link.is-mine{border-color:var(--teal); color:var(--teal-dark); font-weight:600;}
.tag-link small{color:var(--muted); font-weight:400; margin-left:2px;}
.tag-row{margin:6px 0 10px; display:flex; flex-wrap:wrap; gap:4px;}
.tag-cloud{display:flex; flex-wrap:wrap; gap:6px;}
.tag-cloud .tag-pill{font-size:var(--fs-sm); padding:5px 10px;}
.rec-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:10px;}
.rec-section h2{font-size:var(--fs-md); display:flex; align-items:center; gap:6px;}
.rec-inline{display:grid; grid-template-columns:1fr auto; column-gap:12px; row-gap:4px; font-size:var(--fs-sm);}

/* ---- Hoja de ruta (v1.46.0) ---- */
.rm-nav{position:sticky; top:calc(var(--topbar-h) + 6px); z-index:5; background:var(--bg); padding:6px 0; margin-top:0;}
.rm-nav a{display:inline-flex; align-items:center; gap:5px;}
.rm-nav .ico{width:13px; height:13px;}
.rm-count{font-size:var(--fs-xxs); font-weight:600; color:var(--muted); background:var(--bg-soft,rgba(0,0,0,.05)); padding:0 5px; line-height:16px;}
.rm-stats{margin-bottom:6px;}
.rm-section{margin:18px 0 0; padding-top:12px; border-top:1px solid var(--border); scroll-margin-top:96px;}
.rm-section h2{font-size:var(--fs-md); display:flex; align-items:center; gap:6px; margin:0 0 4px; flex-wrap:wrap;}
.rm-section h2 .ico{width:15px; height:15px; color:var(--muted);}
.rm-section h3{font-size:var(--fs-sm); margin:14px 0 4px;}
.rm-more{font-size:var(--fs-xs); font-weight:400; margin-left:4px;}
.rm-table td{vertical-align:top; font-size:var(--fs-sm);}
.rm-table details summary{cursor:pointer; list-style:none;}
.rm-table details summary::-webkit-details-marker{display:none;}
.rm-table details summary strong::before{content:"+ "; color:var(--muted); font-weight:400;}
.rm-table details[open] summary strong::before{content:"– ";}
.rm-details{margin:4px 0 2px; color:var(--muted); font-size:var(--fs-xs); max-width:70ch;}
.rm-criteria{margin:4px 0 0 18px; font-size:var(--fs-xs); color:var(--muted);}
.rm-source{display:block; font-size:var(--fs-xxs); color:var(--muted);}
.rm-done td{color:var(--muted);}
.rm-done td strong{font-weight:500;}
.rm-kind{font-size:var(--fs-xxs); font-weight:500; margin-left:2px;}
.rm-p1{background:rgba(179,38,30,0.1); color:#b3261e;}
.rm-p2{background:rgba(226,192,68,0.18); color:#8a6d10;}
.rm-p3{background:rgba(0,0,0,0.06); color:var(--muted);}
.rm-status select{font-size:var(--fs-xs); padding:2px 4px; max-width:140px;}
.rm-edit{font-size:var(--fs-xs);}
.rm-edit-inline{display:none;}
.rm-versions{display:grid; gap:4px;}
.rm-version{border:1px solid var(--border); padding:6px 10px; background:var(--card);}
.rm-version summary{cursor:pointer; font-size:var(--fs-sm);}
.rm-version ul{margin:6px 0 2px 18px; font-size:var(--fs-xs); color:var(--muted);}
.rm-closed{margin-top:8px; font-size:var(--fs-xs);}
.rm-closed ul{margin:4px 0 0 18px;}
html[data-theme="dark"] .rm-p3, html[data-theme="dark"] .rm-count{background:rgba(255,255,255,0.08);}


/* ---- Responsive pass (v1.46.1): phone and tablet safety net ---- */
img, video, iframe, canvas{max-width:100%;}
img{height:auto;}
h1, h2, h3, h4, p, li, .card-title, td, th, dt, dd, summary, .legal-text, .blog-body{overflow-wrap:anywhere;}
code, kbd{overflow-wrap:anywhere;}
pre{max-width:100%; overflow-x:auto;}
@media (max-width:700px){
  main{padding-top:12px;}
  .table, main table{display:block; overflow-x:auto; max-width:100%; -webkit-overflow-scrolling:touch;}
  .table thead, .table tbody, main table thead, main table tbody{display:table; width:100%; min-width:100%;}
  .btn, button:not(.sb-collapse):not(.nav-toggle):not(.user-menu-btn), input[type="submit"], input[type="button"],
  input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="hidden"]), select, textarea{min-height:44px;}
  .btn-sm{min-height:40px;}
  .pagination a, .pagination span, .coord-nav a, .rm-nav a, .dev-tabs a, .dev-tabs button{min-height:40px; display:inline-flex; align-items:center;}
  .tag-link, .tag-pill{min-height:36px; display:inline-flex; align-items:center;}
  .page-head{flex-direction:column; align-items:flex-start; gap:4px;}
  .form-row-2, .form-row-3{grid-template-columns:1fr;}
  .admin-stat-grid, .kpi-grid{grid-template-columns:1fr 1fr;}
  .rec-grid{grid-template-columns:1fr;}
  .rec-inline{grid-template-columns:1fr; row-gap:2px;}
  .rec-inline > :nth-child(even){margin-bottom:6px; color:var(--muted);}
}
@media (max-width:900px){
  .sb-link{padding:11px 10px; min-height:44px;}
  .sb-user{min-height:52px;}
  .nav-icon-link, .user-menu-btn, .lang-current, .nav-toggle{min-height:40px; min-width:40px; display:inline-flex; align-items:center; justify-content:center;}
  .brand-mobile{min-height:40px;}
}
@media (max-width:420px){
  .admin-stat-grid, .kpi-grid{grid-template-columns:1fr 1fr;}
  .admin-stat-num{font-size:var(--fs-h2);}
}
@media (max-width:560px){
  .path-steps{columns:1;}
  /* calendar: 7 compact columns that fit a phone, events shown as dots with the day number */
  .cal-grid-wrap{overflow:visible;}
  .cal-grid{min-width:0; grid-template-columns:repeat(7,minmax(0,1fr));}
  .cal-weekday{padding:6px 2px; text-align:center; font-size:10px;}
  .cal-day{min-height:48px; padding:4px 2px; display:block; text-align:center;}
  .cal-day-num{font-size:var(--fs-xs); display:block; margin-bottom:2px;}
  .cal-day.is-today .cal-day-num{display:inline-flex; margin:0 auto 2px;}
  .cal-event-pill{height:14px; padding:0; font-size:0; overflow:hidden; display:block; width:100%; margin-top:2px;}
  /* roadmap: one scrollable row of section links instead of a wall of pills */
  .rm-nav{position:static; flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none; gap:4px; padding:4px 0; margin-bottom:8px;}
  .rm-nav a{white-space:nowrap; padding:6px 9px; min-height:36px;}
  .rm-table th:nth-child(2), .rm-table td:nth-child(2), .rm-table th:nth-child(5), .rm-table td:nth-child(5),
  .rm-table th:nth-child(6), .rm-table td:nth-child(6), .rm-table td:nth-child(3) .muted{display:none;}
  .rm-edit-inline{display:inline-block; margin-top:2px;}
  .rm-status select{max-width:none; min-width:96px;}
}
@media (max-width:700px){
  select, input, textarea{max-width:100%;}
  .lms-search{max-width:100%;}
  .lms-search input[type="text"]{min-width:0; flex:1 1 160px;}
  .lms-search select{min-width:0; max-width:100%; flex:1 1 140px; width:auto;}
  .lms-section-title{flex-wrap:wrap; gap:4px 10px;}
  .panel-row{flex-direction:column; gap:1px; padding:7px 0;}
  .panel-row a{white-space:normal;}
  .panel-row .fmeta{white-space:normal;}
  .okr-head{gap:6px;}
}
@media (max-width:900px){
  .forum-sidebar{order:2; position:static; max-height:none; overflow:visible;}
  .forum-main{order:1;}
  .topbar .brand-mobile{min-height:40px; align-items:center;}
}
@media (max-width:900px){
  .dev-table, .students-table, .table{display:block; overflow-x:auto; max-width:100%; -webkit-overflow-scrolling:touch;}
  .dev-table thead, .dev-table tbody, .table thead, .table tbody{display:table; width:100%; min-width:100%;}
}
@media (max-width:700px){
  .link-action{display:inline-flex; align-items:center; min-height:40px;}
  .rec-inline a, .dash-list a, .crosslink-list a{display:block; padding:7px 0;}
  .footer a{display:inline-flex; align-items:center; min-height:30px; padding:0 4px;}
}
.forum-main{min-width:0;}
@media (max-width:1100px){
  .fboard-header, .fboard-row{grid-template-columns:40px 1fr 76px 76px 150px; gap:8px;}
}

/* ---- v1.47.0: warmer UI, gold hover, preferences, admin colours ---- */
td a, .table a, .list-row a, .dev-row a, .panel-row a, .rec-inline a, .fboard-row a, .fthread-row a, .dash-list a, .crosslink-list a,
.admin-stat-card, .rm-table a, .notif-item a, .news-card a, .course-card, .gallery-card{text-decoration:none;}
td a:hover, .table a:hover, .panel-row a:hover, .rec-inline a:hover, .fboard-row a:hover, .fthread-row a:hover, .dash-list a:hover{text-decoration:none; color:var(--teal-dark);}
.table tbody tr:hover td, .rm-table tbody tr:hover td, .dev-table tbody tr:hover td{background:var(--hover);}
.panel-row:hover, .rec-inline a:hover, .dash-list li:hover, .list-row:hover, .dev-row:hover, .crosslink-list li:hover{background:var(--hover);}
.list-row:hover{border-color:var(--gold);}
.admin-stat-card:hover{border-color:var(--gold); background:var(--hover);}
.pagination a:hover, .coord-nav a:hover, .rm-nav a:hover, .view-switch a:hover, .tag-link:hover{background:var(--hover); color:var(--teal-dark); border-color:var(--gold-ink);}
.faq-question:hover{background:var(--hover);}
.sb-link:hover{background:var(--side-bg-hover); color:#fff;}
.sb-link:hover .ico{color:var(--gold);}
.sb-link.active .ico{color:var(--gold);}
.sb-badge{background:var(--gold); color:#1f2428;}
.sb-user-name{color:var(--gold);}
.sb-user-avatar{color:var(--gold);}

/* preferences rows inside the language menu */
.lang-menu{min-width:232px;}
.pref-rows{border-top:1px solid var(--border); margin-top:4px; padding-top:4px;}
.pref-row{display:flex; align-items:center; justify-content:space-between; gap:8px; padding:5px 8px;}
.pref-label{font-size:var(--fs-xs); color:var(--muted); font-weight:600;}
.pref-group{display:inline-flex; border:1px solid var(--border);}
.pref-btn{background:none; border:none; border-right:1px solid var(--border); color:var(--ink); font-family:inherit; font-size:var(--fs-xs); font-weight:600; min-width:34px; height:28px; padding:0 8px; cursor:pointer; display:inline-flex; align-items:center; justify-content:center;}
.pref-btn:last-child{border-right:none;}
.pref-btn .nav-icon{width:15px; height:15px;}
.pref-btn:hover{background:var(--hover);}
.pref-btn.active{background:var(--gold); color:#1f2428;}
.pref-btn:disabled{opacity:.35; cursor:default;}
.nav-dropdown-logout{border-top:1px solid var(--border); margin-top:4px; padding-top:4px;}
.nav-logout-btn{display:inline-flex; align-items:center; gap:8px; color:#b3261e;}
.nav-logout-btn .ico{width:16px; height:16px;}
.nav-logout-btn:hover{color:#8f1d16;}

/* admin (Gestión): the sidebar turns to the logo yellow so you always know where you are */
body.is-admin{--side-bg:#2b2714; --side-bg-hover:#37321a; --side-active:#403a1e; --side-ink:#e9e3c9; --side-muted:#b3a86f; --side-border:#3d3720; --side-accent:#e3c84a;}
body.is-admin .sb-user-kicker{color:#e3c84a;}
body.is-admin .sb-link-admin{color:#e3c84a;}
body.is-admin .sb-group-label{color:#cdb94f;}
body.is-admin .sidebar{border-right:2px solid var(--gold);}
html[data-theme="dark"] body.is-admin{--side-bg:#1f1c0e; --side-bg-hover:#2a2612; --side-active:#332e16; --side-border:#2f2a13;}

/* legal pages in the normal layout */
.legal-wrap{max-width:860px;}
.legal-card h1{margin-top:0;}

/* ---- v1.48.0: section side panels (filters / navigation on the left, content on the right) ---- */
.split{display:grid; grid-template-columns:260px minmax(0,1fr); gap:20px; align-items:start;}
.split[data-split="collapsed"]{grid-template-columns:52px minmax(0,1fr);}
.split-side{position:sticky; top:calc(var(--topbar-h) + 12px); max-height:calc(100vh - var(--topbar-h) - 60px); overflow-y:auto; overflow-x:hidden; background:var(--surface); border:1px solid var(--border); scrollbar-width:thin; display:flex; flex-direction:column;}
.split-side-head{display:flex; align-items:center; justify-content:space-between; gap:6px; padding:8px 10px 8px 12px; border-bottom:1px solid var(--border-soft); min-height:44px;}
.split-side-head h2{margin:0; font-size:var(--fs-sm); text-transform:uppercase; letter-spacing:.08em; color:var(--muted);}
.split-toggle{background:none; border:1px solid var(--border); color:var(--muted); width:28px; height:28px; display:inline-flex; align-items:center; justify-content:center; cursor:pointer; flex:none;}
.split-toggle:hover{color:var(--ink); border-color:var(--gold-ink); background:var(--hover);}
.split-toggle .ico{width:15px; height:15px; transition:transform .18s ease;}
.split[data-split="collapsed"] .split-toggle .ico{transform:rotate(180deg);}
.split[data-split="collapsed"] .split-side-head h2, .split[data-split="collapsed"] .split-body, .split[data-split="collapsed"] .split-nav span:not(.split-count), .split[data-split="collapsed"] .split-count{display:none;}
.split[data-split="collapsed"] .split-side-head{justify-content:center; padding:8px 0;}
.split[data-split="collapsed"] .split-nav a{justify-content:center; padding:10px 0;}
.split-nav{display:flex; flex-direction:column; padding:6px;}
.split-nav a, .split-nav button{display:flex; align-items:center; gap:9px; padding:8px 10px; color:var(--ink); text-decoration:none; font-size:var(--fs-sm); border-left:3px solid transparent; background:none; border-top:none; border-right:none; border-bottom:none; font-family:inherit; cursor:pointer; text-align:left; width:100%;}
.split-nav a .ico, .split-nav button .ico{width:16px; height:16px; flex:none; color:var(--muted);}
.split-nav a:hover, .split-nav button:hover{background:var(--hover); text-decoration:none; color:var(--teal-dark);}
.split-nav a.active, .split-nav button.active{background:var(--hover); border-left-color:var(--gold); font-weight:600;}
.split-nav a.active .ico{color:var(--gold-ink);}
.split-count{margin-left:auto; font-size:var(--fs-xxs); color:var(--muted); font-weight:500;}
.split-nav-label{padding:10px 12px 4px; font-size:var(--fs-xxs); font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--muted);}
.split-body{padding:10px 12px 12px;}
.split-body .field{margin-bottom:10px;}
.split-body label{font-size:var(--fs-xs);}
.split-main{min-width:0;}
.az{display:flex; flex-wrap:wrap; gap:2px; padding:6px 10px 10px;}
.az a{display:inline-flex; align-items:center; justify-content:center; width:26px; height:26px; font-size:var(--fs-xs); font-weight:600; color:var(--ink); text-decoration:none; border:1px solid transparent;}
.az a:hover{background:var(--hover); border-color:var(--gold-ink); text-decoration:none;}
.az a.active{background:var(--gold); color:#1f2428;}
.az a.az-all{width:auto; padding:0 8px;}
@media (max-width:900px){
  .split{grid-template-columns:1fr; gap:12px;}
  .split[data-split="collapsed"]{grid-template-columns:1fr;}
  .split-side{position:static; max-height:none;}
  .split-toggle{display:none;}
  .split[data-split="collapsed"] .split-side-head h2, .split[data-split="collapsed"] .split-body, .split[data-split="collapsed"] .split-nav span, .split[data-split="collapsed"] .split-count{display:revert;}
  .split[data-split="collapsed"] .split-nav a{justify-content:flex-start; padding:8px 10px;}
}

/* FAQ: left category list, borderless questions, +/- control */
.faq-cats a{font-size:var(--fs-sm);}
.faq-section{margin-bottom:28px; scroll-margin-top:70px;}
.faq-section > h2{font-size:var(--fs-h2); font-weight:500; margin:0 0 6px; color:var(--ink);}
.faq-list{margin-top:0;}
.faq-item{border:none; border-bottom:1px solid var(--border); margin:0; background:transparent;}
.faq-question{display:flex; align-items:center; justify-content:space-between; gap:14px; width:100%; padding:14px 4px; background:none; border:none; font-family:inherit; font-size:var(--fs-md); font-weight:600; color:var(--ink); text-align:left; cursor:pointer;}
.faq-question:hover{background:var(--hover); color:var(--ink);}
.faq-caret{display:inline-flex; align-items:center; justify-content:center; width:30px; height:30px; flex:none; background:var(--surface-alt); border:1px solid var(--border); color:var(--teal-dark); font-size:var(--fs-lg); line-height:1; transition:none; transform:none;}
.faq-caret::before{content:"+";}
.faq-open .faq-caret{background:var(--gold); border-color:var(--gold); color:#1f2428; transform:none;}
.faq-open .faq-caret::before{content:"−";}
.faq-answer .legal-text{padding:0 4px 18px; font-size:var(--fs-base); line-height:1.7;}
.faq-head{margin-bottom:18px;}
.faq-head h1 span{color:var(--gold-ink);}

/* organisations: logo box that keeps rectangular logos aligned */
.org-logo{width:110px; height:48px; padding:4px; background:var(--surface); border:1px solid var(--border-soft);}
.org-logo img{width:100%; height:100%; object-fit:contain; object-position:center;}
.org-logo .ico{width:22px; height:22px; color:var(--muted);}
.org-logo-lg{width:180px; height:80px;}

/* profile */
.profile-avatar, .profile-header .fpost-avatar, .profile-header .fpost-avatar-placeholder{width:140px; height:140px; border-radius:0; object-fit:cover; font-size:var(--fs-hero); flex:none;}
.avatar-preview{width:140px; height:140px; object-fit:cover; border-radius:0;}
.char-counter{display:block; text-align:right; margin-top:2px;}
.tab-pane[hidden]{display:none;}
.profile-section{margin-bottom:18px;}
.profile-section h2{font-size:var(--fs-h3); margin:0 0 8px;}
.profile-kv{display:grid; grid-template-columns:150px 1fr; gap:6px 14px; font-size:var(--fs-sm);}
.profile-kv dt{color:var(--muted); margin:0;}
.profile-kv dd{margin:0;}

/* ---- v1.47.1: forum rows, polls, radios ---- */
.fthread-last{font-size:var(--fs-sm); line-height:1.35;}
.fthread-last .fmeta{font-size:var(--fs-xs);}
input[type="radio"], input[type="checkbox"]{width:auto; accent-color:var(--teal-dark); margin:0;}
.poll-options{list-style:none; padding:0; margin:14px 0;}
.poll-option{display:flex; align-items:center; gap:10px; padding:9px 12px; border:1px solid var(--border); margin-bottom:6px; font-weight:500; cursor:pointer;}
.poll-option:hover{background:var(--hover); border-color:var(--gold-ink);}
.poll-option input{flex:none;}
.poll-results{list-style:none; padding:0; margin:14px 0;}
.poll-result{margin-bottom:12px;}
.poll-result-head{display:flex; justify-content:space-between; font-weight:600; margin-bottom:4px; gap:10px;}
.search-hit-snippet{font-size:var(--fs-sm); color:var(--muted); margin-top:2px;}
.search-hit-snippet mark{background:var(--gold); color:#1f2428; padding:0 2px;}

/* ---- v1.48.0 organisations' campaigns ---------------------------------- */
.org-tagline{margin:2px 0 6px;color:var(--muted);font-size:var(--fs-md, 1.05rem);max-width:60ch}
.org-row-tagline{color:var(--ink);opacity:.82;font-size:var(--fs-sm, .92rem);margin:2px 0 3px;max-width:70ch}
.org-campaign{padding:14px 0;border-top:1px solid var(--border-soft)}
.org-campaign:first-of-type{border-top:0}
.org-campaign.is-ended{opacity:.72}
.org-campaign-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 14px}
.org-campaign h3{margin:0;font-size:var(--fs-lg, 1.1rem)}
.org-campaign h3 a{text-decoration:none}
.org-campaign h3 a:hover{color:var(--gold-ink)}
.org-campaign-status{font-size:var(--fs-xs, .8rem);text-transform:uppercase;letter-spacing:.06em;color:var(--teal-dark);font-weight:600}
.org-campaign.is-ended .org-campaign-status{color:var(--muted)}
.org-campaign p{margin:6px 0 0}
.org-campaign-org a{display:inline-flex;align-items:center;gap:6px;text-decoration:none;font-weight:600}
.org-campaign-org img{width:20px;height:20px;object-fit:contain}
.org-campaign-action{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 14px;background:var(--surface-alt);padding:8px 10px}
.org-campaign-action span{display:inline-flex;align-items:center;gap:6px}
.org-campaign-tools{display:flex;gap:14px;align-items:center;margin-top:8px;font-size:var(--fs-sm, .9rem)}
.org-campaign-tools form{margin:0}
.link-danger{background:none;border:0;padding:0;color:var(--danger, #b3261e);cursor:pointer;font:inherit}
.org-campaigns{background:var(--surface);border:1px solid var(--border);padding:4px 18px}
.check-row{display:flex;align-items:center;gap:8px;margin:4px 0 10px;font-size:var(--fs-sm, .92rem)}

/* =========================================================
   v1.50.0 — visitors (not logged in) get no sidebar: every member page
   needs an account, so the shell is just the top bar with the brand.
   Members get the display preferences (text size, colour mode) in the
   sidebar footer.
   ========================================================= */
.is-anon .content{margin-left:0;}
.is-anon .footer{left:0;}
.brand-anon{gap:9px; color:var(--ink);}
.brand-anon:hover{text-decoration:none;}
.brand-anon .brand-logo-mark{height:30px; width:30px;}
.brand-anon .brand-word{font-weight:700; letter-spacing:.14em; font-size:var(--fs-sm);}
.sb-foot{flex:none; border-top:1px solid var(--side-border); padding:6px 8px 10px; display:flex; flex-direction:column; gap:2px;}
.sb-foot .pref-row{padding:3px 2px;}
.sb-foot .pref-label{color:var(--side-muted); font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; font-weight:600;}
.sb-foot .pref-group{border-color:var(--side-border);}
.sb-foot .pref-btn{color:var(--side-ink); border-right-color:var(--side-border); min-width:30px; height:26px; padding:0 7px;}
.sb-foot .pref-btn:hover{background:var(--side-bg-hover); color:#fff;}
.sb-foot .pref-btn.active{background:var(--gold); color:#1f2428;}
html[data-sidebar="collapsed"] .sb-foot{padding:6px 0 10px; align-items:center;}
html[data-sidebar="collapsed"] .sb-foot .pref-label,
html[data-sidebar="collapsed"] .sb-foot [data-fs-set],
html[data-sidebar="collapsed"] .sb-foot [data-theme-set="auto"]{display:none;}
html[data-sidebar="collapsed"] .sb-foot .pref-row{justify-content:center;}
html[data-sidebar="collapsed"] .sb-foot .pref-group{flex-direction:column;}
html[data-sidebar="collapsed"] .sb-foot .pref-btn{border-right:none; border-bottom:1px solid var(--side-border); min-width:34px;}
html[data-sidebar="collapsed"] .sb-foot .pref-btn:last-child{border-bottom:none;}

/* v1.50.0: whole-row links (static/js/row_link.js) */
.is-row-link{cursor:pointer;}
/* Forum board: the title column gets the room; one compact "Actividad" cell
   (posts + messages) and a last-message cell that truncates the topic title. */
@media (min-width:701px){
  .fboard-header, .fboard-row{grid-template-columns:36px minmax(0,1fr) 128px minmax(170px,26%); gap:14px;}
}
.fboard-activity{display:flex; flex-direction:column; align-items:flex-start; gap:2px; text-align:left; font-size:var(--fs-xs);}
.fboard-activity b{color:var(--ink); font-weight:700; margin-left:2px;}
.fboard-header .fboard-stat{text-align:left; font-size:inherit; color:inherit;}
.fboard-last{min-width:0; display:flex; flex-direction:column; gap:1px;}
.fboard-last-title{display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-size:var(--fs-sm);}
.fboard-name{font-size:var(--fs-md);}
@media (max-width:700px){
  .fboard-activity{flex-direction:row; gap:12px;}
}

/* =========================================================
   v1.51.0 — a warmer, less dull platform, borrowing from imae.es:
   gold primary buttons, block hover instead of underlines, the animated
   I·M·Λ·E mark in the sidebar, an accordion sidebar, tabs on topic pages
   and more room between dashboard blocks.
   ========================================================= */
/* Primary buttons are gold like the public site (teal stays for outline). */
.btn{background:var(--gold); border-color:var(--gold); color:#1f2428;}
.btn:hover{background:#e3c84a; border-color:#e3c84a; color:#1f2428;}
.btn-outline{background:transparent; color:var(--teal-dark); border-color:var(--teal);}
.btn-outline:hover{background:var(--hover); color:var(--teal-dark); border-color:var(--teal-dark);}
.btn-danger, .btn-danger:hover{color:#fff;}
html[data-theme="dark"] .btn-outline{color:#8fb8bc; border-color:#8fb8bc;}
html[data-theme="dark"] .btn-outline:hover{color:#fff;}

/* Blocks of content highlight as a whole on hover; nothing inside them
   underlines. */
.course-card:hover, .news-card:hover, .dev-row:hover, .report-row:hover, .panel-row:hover, .dash-course-row:hover,
.dash-activity-row:hover, .notif-item:hover, .pn-item:hover, .gallery-card:hover, .kanban-card:hover, .is-row-link:hover,
.rec-inline a:hover, .dash-list li:hover, .list-row:hover, .crosslink-list li:hover, .lesson-row:hover, .cert-row:hover,
.dm-list-item:hover, .split-nav a:hover{background:var(--hover);}
.course-card:hover{transform:none; box-shadow:0 10px 24px -14px rgba(31,36,40,.25); border-color:var(--gold);}
.course-card:hover a, .course-card a:hover, .news-card:hover a, .dev-row:hover a, .report-row:hover a, .panel-row:hover a,
.dash-course-row:hover a, .dash-activity-row:hover *, .notif-item:hover a, .pn-item:hover a, .gallery-card:hover a,
.kanban-card:hover a, .is-row-link:hover a, .lesson-row:hover a, .cert-row:hover a, .dm-list-item:hover *,
.admin-stat-card:hover *, .tag-link:hover, .split-nav a:hover *{text-decoration:none;}
.dash-course-row{transition:background .15s;}

/* Section headings get the public site's gold kicker mark. */
.lms-section-title{margin-top:22px;}
.lms-section-title h2, .dash-col h2, .rec-section h2{display:flex; align-items:center; gap:8px;}
.dash-col h2::before, .rec-section h2::before{content:""; width:8px; height:8px; background:var(--gold); flex:none;}

/* Dashboard: more air between blocks. */
.dash-grid{gap:14px;}
.dash-col{padding:14px 16px 12px;}
.dash-col h2{margin-bottom:10px;}
.dash-activity-row{padding:10px 4px; margin:0 -4px;}
.dash-col > .link-action{padding-top:12px;}
.card{padding:16px 18px; margin-top:12px;}
.path-panel{padding:18px 20px 16px;}
.path-steps{margin:6px 0 16px; column-gap:32px;}
.path-suggest-grid{gap:20px 28px; margin-top:4px;}
.path-suggest-grid > div{padding-top:12px; border-top:1px solid var(--border-soft);}
.path-suggest-grid .panel-row{padding:7px 4px; margin:0 -4px;}
.admin-stat-grid{gap:12px;}
.admin-stat-card{padding:14px 16px;}
.dash-course-row{padding:12px 14px; margin-bottom:10px;}

/* Sidebar accordion: one group open at a time (shell.js). */
.sb-group-toggle{display:flex; align-items:center; gap:6px; width:100%; background:none; border:0; color:var(--side-muted); cursor:pointer;
  font:inherit; font-size:10.5px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; padding:6px 10px 4px; text-align:left; white-space:nowrap;}
.sb-group-toggle:hover{color:var(--side-ink);}
.sb-group-toggle .sb-caret{margin-left:auto; width:12px; height:12px; transition:transform .18s ease; flex:none;}
.sb-group.is-open .sb-group-toggle .sb-caret{transform:rotate(180deg);}
.sb-group-body{display:flex; flex-direction:column;}
.sb-group[data-acc]:not(.is-open) .sb-group-body{display:none;}
.sb-group.is-open .sb-group-toggle{color:var(--side-ink);}
html[data-sidebar="collapsed"] .sb-group-toggle{height:1px; padding:0; margin:6px 10px; background:var(--side-border); font-size:0; overflow:hidden; pointer-events:none;}
html[data-sidebar="collapsed"] .sb-group-toggle .sb-caret{display:none;}
html[data-sidebar="collapsed"] .sb-group[data-acc]:not(.is-open) .sb-group-body{display:flex;}

/* The I·M·Λ·E mark as four tiles (same as imae.es): the Λ flips every few
   seconds, the tiles spread a little when the brand is hovered. */
.brand-mark{--s:0; display:grid; grid-template-columns:repeat(2,14px); gap:2px; flex:none;}
.brand-mark i{display:flex; align-items:center; justify-content:center; width:14px; height:14px; font-style:normal; font-weight:800; font-size:9px; line-height:1; color:#fff;
  transition:transform .35s cubic-bezier(.2,.7,.2,1);}
.brand-mark .bm-i{background:#353d45; transform:translate(calc(var(--s) * -2px),calc(var(--s) * -2px));}
.brand-mark .bm-m{background:#5a7f87; transform:translateX(calc(var(--s) * 8px));}
.brand-mark .bm-a{background:var(--gold); color:#1f2428; border-radius:50%; transform:translateY(calc(var(--s) * 6px)) scale(calc(1 + var(--s) * .3)); perspective:60px;}
.brand-mark .bm-a b{display:block; font-weight:800; animation:bm-flip 9s ease-in-out infinite;}
.brand-mark .bm-e{background:#1f2428; box-shadow:inset 0 0 0 1px rgba(255,255,255,.18); transform:translate(calc(var(--s) * 4px),calc(var(--s) * 3px));}
.brand:hover .brand-mark{--s:1;}
.brand-anon .brand-mark .bm-e{box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);}
@keyframes bm-flip{0%,78%{transform:rotateY(0)} 86%{transform:rotateY(180deg) scale(1.2)} 94%,100%{transform:rotateY(360deg)}}
@media (prefers-reduced-motion:reduce){.brand-mark .bm-a b{animation:none;}}

/* Tab strip (topic pages; works with split.js [data-tabs]). */
.tab-strip{display:flex; gap:2px; border-bottom:1px solid var(--border); margin:0 0 16px; overflow-x:auto; scrollbar-width:none;}
.tab-strip a{display:inline-flex; align-items:center; gap:7px; padding:9px 14px; margin-bottom:-1px; color:var(--muted); text-decoration:none; font-weight:600;
  font-size:var(--fs-sm); white-space:nowrap; border-bottom:2px solid transparent;}
.tab-strip a .ico{width:15px; height:15px;}
.tab-strip a:hover{color:var(--ink); background:var(--hover); text-decoration:none;}
.tab-strip a.active{color:var(--ink); border-bottom-color:var(--gold);}
.tab-strip .split-count{margin-left:0; background:var(--surface-alt); border:1px solid var(--border); padding:0 6px; min-width:22px; text-align:center; height:18px; line-height:16px;}
.tab-strip a.active .split-count{background:var(--gold); border-color:var(--gold); color:#1f2428;}
.topic-list{background:var(--surface); border:1px solid var(--border);}
.topic-row{display:grid; grid-template-columns:40px 1fr auto; gap:12px; align-items:center; padding:10px 14px; border-top:1px solid var(--border-soft); color:var(--ink); text-decoration:none;}
.topic-row:first-child{border-top:0;}
.topic-row:hover{background:var(--hover); text-decoration:none;}
.topic-row-ico{width:40px; height:40px; display:flex; align-items:center; justify-content:center; background:var(--surface-alt); color:var(--teal); overflow:hidden;}
.topic-row-ico img{width:100%; height:100%; object-fit:cover;}
.topic-row-ico .ico{width:18px; height:18px;}
.topic-row-ico.is-avatar{background:var(--teal); color:#fff; font-weight:700;}
.topic-row b{font-weight:650; display:block; line-height:1.3;}
.topic-row small{color:var(--muted); font-size:var(--fs-xs);}
.topic-row .fmeta{white-space:nowrap;}
@media (max-width:560px){.topic-row .fmeta{display:none;}}

/* Topics side panel: a tighter list without the "Para ti / Todos" tabs. */
.split-nav-tight a{padding:4px 10px; font-size:var(--fs-xs); gap:7px;}
.split-nav-tight a .ico{width:13px; height:13px;}
.split-nav-tight .split-count{font-size:10px;}
/* Cards and rows that are links themselves: no underline on hover either. */
a[class*="-card"]:hover, a[class*="-row"]:hover, a.is-row-link:hover, a.topic-row:hover, a.dm-list-item:hover, .split-nav a:hover, .tab-strip a:hover{text-decoration:none;}
a[class*="-card"]:hover *, a[class*="-row"]:hover *{text-decoration:none;}

/* "Ver como" bubble (v1.51.0, admins only): a small pill at the top that
   expands on hover/focus to switch the experience between admin,
   leadership (desarrollo) and member. */
.viewas{position:fixed; top:6px; left:50%; transform:translateX(-50%); z-index:130; font-size:var(--fs-xs);}
.viewas-pill{display:inline-flex; align-items:center; gap:7px; padding:4px 10px 4px 8px; background:#1f2428; color:#e8ebed; border:1px solid rgba(255,255,255,.18); border-radius:999px;
  box-shadow:0 6px 18px -8px rgba(0,0,0,.6); cursor:default; opacity:.55; transition:opacity .2s;}
.viewas:hover .viewas-pill, .viewas:focus-within .viewas-pill{opacity:1;}
.viewas-pill .ico{width:13px; height:13px; color:var(--gold);}
.viewas-pill b{font-weight:700; color:var(--gold);}
.viewas.is-preview .viewas-pill{opacity:.9; border-color:var(--gold);}
.viewas-menu{display:none; position:absolute; top:100%; left:50%; transform:translateX(-50%); margin-top:6px; min-width:260px; background:var(--surface); color:var(--ink);
  border:1px solid var(--border); box-shadow:0 14px 30px -14px rgba(31,36,40,.4); padding:8px;}
.viewas:hover .viewas-menu, .viewas:focus-within .viewas-menu{display:block;}
.viewas-menu::before{content:""; position:absolute; left:0; right:0; top:-8px; height:8px;} /* keeps hover while moving down */
.viewas-menu p{margin:0 0 6px; padding:0 6px; color:var(--muted); font-size:var(--fs-xxs); text-transform:uppercase; letter-spacing:.08em; font-weight:600;}
.viewas-menu form{margin:0;}
.viewas-menu button{display:flex; align-items:center; gap:8px; width:100%; padding:7px 8px; background:none; border:0; border-left:3px solid transparent; color:var(--ink); font:inherit; font-size:var(--fs-sm); cursor:pointer; text-align:left;}
.viewas-menu button:hover{background:var(--hover);}
.viewas-menu button.active{border-left-color:var(--gold); background:var(--hover); font-weight:600;}
.viewas-menu button small{margin-left:auto; color:var(--muted); font-size:var(--fs-xxs);}
@media (max-width:700px){.viewas{top:auto; bottom:calc(var(--footer-h) + 8px);} .viewas-menu{top:auto; bottom:100%; margin:0 0 6px;}}

/* Gestión › Proyecto (v1.52.0): filters, sortable headers, two columns on the summary */
.rm-filters{display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin:4px 0 10px;}
.rm-filters input[type=search]{flex:1 1 220px; min-width:160px;}
.rm-filters select{max-width:260px;}
.rm-shown{font-size:var(--fs-xs); color:var(--muted); white-space:nowrap;}
.rm-shown b{color:var(--ink);}
th[data-sort]{cursor:pointer; user-select:none; white-space:nowrap;}
th[data-sort]::after{content:"↕"; margin-left:5px; color:var(--muted); font-size:var(--fs-xxs);}
th.is-sorted-asc::after{content:"↑"; color:var(--gold-ink);} th.is-sorted-desc::after{content:"↓"; color:var(--gold-ink);}
.rm-history td{font-size:var(--fs-sm); line-height:1.45;}
.rm-ver{white-space:nowrap;} .rm-date{white-space:nowrap;}
.rm-sec{background:var(--surface-alt); border:1px solid var(--border); color:var(--ink); font:inherit; font-size:var(--fs-xxs); padding:2px 7px; cursor:pointer; white-space:nowrap;}
.rm-sec:hover{background:var(--hover); border-color:var(--gold-ink);}
.rm-two{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:24px; margin-top:16px;}
.rm-h2{font-size:var(--fs-md); display:flex; align-items:center; gap:6px; margin:0 0 4px;}
.rm-h2 .ico{width:15px; height:15px; color:var(--muted);}
.rm-todo .legal-text{font-size:var(--fs-sm);}
.rm-todo .legal-text h2{font-size:var(--fs-base); margin:14px 0 6px;} .rm-todo .legal-text h2:first-child{margin-top:0;}
.rm-todo .legal-text ul{padding-left:20px;} .rm-todo .legal-text li{margin:4px 0;}
#projectTabs .tab-strip{margin-bottom:12px;}
@media (max-width:900px){.rm-two{grid-template-columns:1fr;}}
.viewas-menu{max-width:calc(100vw - 24px);}
@media (max-width:700px){.viewas-pill{padding:3px 8px; font-size:var(--fs-xxs); opacity:.45;} .viewas-pill span{display:none;}}
@media print{.viewas, .sidebar, .topbar, .footer, .cookie-notice{display:none !important;} .content{margin:0;}}
