/* ============================================================================
   EDUARD GERMIS · File Browser skin                       custom.css  ·  v1
   ----------------------------------------------------------------------------
   Drop-in skin for File Browser 2.63.12. Targets the REAL rendered class names
   of the Vue SPA (header / #listing / .share / #login / .card / nav / #nav …).

   The same near-monochrome system as the video-platform admin & the Seafile
   skin: a dark workspace lit by ONE accent blue used as punctuation. Anaheim
   caps for titles, Poppins for everything else. Token names + values are kept
   identical across all three tools so they read as one system.

   HOW IT LOADS (native — no fork, no patch):
     File Browser sets  branding.files = /branding  and, if that folder holds a
     custom.css, injects  <link href="/static/custom.css">  at the end of <body>
     (so this file always wins the cascade). The img/ subfolder is served too —
     that's why the fonts below resolve from  img/fonts/  relative to this file.

   PARTS
     A  Fonts            G  Buttons & inputs     M  Settings / dashboard
     B  Token remap      H  Cards / modals       N  Previewer (lightbox)
     C  Base & type      I  Sidebar drawer       O  Shell / search / toast
     D  Header           J  Login                P  Brand atoms (share JS)
     E  Breadcrumbs      K  Share pages          Q  Responsive
     F  File listing     L  Icons (file types)
   ========================================================================== */


/* ============================================================ A · FONTS ===== */
@font-face{font-family:'Anaheim';font-weight:600;font-display:swap;src:url('img/fonts/Anaheim-600.ttf') format('truetype');}
@font-face{font-family:'Anaheim';font-weight:400;font-display:swap;src:url('img/fonts/Anaheim-400.ttf') format('truetype');}
@font-face{font-family:'Anaheim';font-weight:700;font-display:swap;src:url('img/fonts/Anaheim-700.ttf') format('truetype');}
@font-face{font-family:'Anaheim';font-weight:800;font-display:swap;src:url('img/fonts/Anaheim-800.ttf') format('truetype');}
@font-face{font-family:'Poppins';font-weight:300;font-display:swap;src:url('img/fonts/Poppins-300.ttf') format('truetype');}
@font-face{font-family:'Poppins';font-weight:400;font-display:swap;src:url('img/fonts/Poppins-400.ttf') format('truetype');}
@font-face{font-family:'Poppins';font-weight:500;font-display:swap;src:url('img/fonts/Poppins-500.ttf') format('truetype');}
@font-face{font-family:'Poppins';font-weight:600;font-display:swap;src:url('img/fonts/Poppins-600.ttf') format('truetype');}
@font-face{font-family:'Poppins';font-weight:700;font-display:swap;src:url('img/fonts/Poppins-700.ttf') format('truetype');}


/* ===================================================== B · TOKEN REMAP ====== */
/* File Browser themes itself entirely from these CSS variables. Remapping them
   to the EG palette repaints ~80% of the app for free; Parts C–Q handle the
   rest. Declared on :root AND :root.dark so the skin is dark even if
   branding.theme isn't set to "dark" (set it anyway — it's cleaner). */
:root,
:root.dark{
  /* —— EG brand tokens (shared with brand-admin.css / eg-seafile.css) —— */
  --eg-accent:#009ABD;  --eg-accent-deep:#007E9B;
  --eg-ink:#0a0a0b;     --eg-ink-2:#0e0e10;
  --eg-panel:#161618;   --eg-panel-2:#1c1c1f;  --eg-panel-3:#232327;
  --eg-charcoal:#38383B;
  --eg-line:rgba(255,255,255,.07);  --eg-line-2:rgba(255,255,255,.12);
  --eg-fg:#F1EFEA;      --eg-fg-2:#B6B2AA;     --eg-fg-3:#7C7A74;
  --eg-display:'Anaheim',system-ui,sans-serif;
  --eg-text:'Poppins',system-ui,sans-serif;
  --eg-r-soft:10px;     --eg-r-card:14px;
  --eg-shadow:0 1px 2px rgba(0,0,0,.4), 0 12px 34px rgba(0,0,0,.34);
  --eg-ease:.16s cubic-bezier(.4,0,.2,1);

  /* —— File Browser's own variables, repointed —— */
  --blue:var(--eg-accent);
  --dark-blue:var(--eg-accent-deep);
  --red:#D2675A;  --dark-red:#c0584b;
  --moon-grey:var(--eg-panel-2);

  /* file-type icon hues → quiet near-mono; only folders get the accent (Part L) */
  --icon-red:#9a9da3;    --icon-orange:#9a9da3;  --icon-yellow:#9a9da3;
  --icon-green:#9a9da3;  --icon-blue:#9a9da3;     --icon-violet:#9a9da3;

  --input-red:rgba(210,103,90,.18);
  --input-green:rgba(52,178,123,.18);
  --item-selected:rgba(0,154,189,.14);

  --action:var(--eg-fg-2);

  --background:var(--eg-ink-2);
  --surfacePrimary:var(--eg-panel);
  --surfaceSecondary:var(--eg-panel-2);
  --divider:var(--eg-line);
  --iconPrimary:var(--eg-accent);
  --iconSecondary:#ffffff;
  --iconTertiary:#4a4a50;
  --textPrimary:var(--eg-fg-2);
  --textSecondary:var(--eg-fg);
  --hover:rgba(255,255,255,.06);
  --borderPrimary:var(--eg-line);
  --borderSecondary:var(--eg-line-2);
  --dividerPrimary:rgba(10,10,11,.5);
  --dividerSecondary:rgba(10,10,11,.7);
}


/* ====================================================== C · BASE & TYPE ===== */
html,body{background:var(--eg-ink-2);}
body{
  font-family:var(--eg-text);
  color:var(--eg-fg);
  -webkit-font-smoothing:antialiased;
}
::selection{background:rgba(0,154,189,.32);}

/* Kill native <button> UA chrome everywhere (the grey/white boxes). This only
   removes default appearance — explicit backgrounds (.button, .btn, .eg-dl-btn,
   accent CTAs) are untouched. */
button{appearance:none;-webkit-appearance:none;background:none;border:none;}

/* a calmer scrollbar for the dark workspace */
*{scrollbar-width:thin;scrollbar-color:#34343a transparent;}
*::-webkit-scrollbar{width:10px;height:10px;}
*::-webkit-scrollbar-thumb{background:#2c2c31;border-radius:8px;border:2px solid var(--eg-ink-2);}
*::-webkit-scrollbar-thumb:hover{background:#3a3a40;}

#loading{background:var(--eg-ink-2)!important;}
#loading .spinner>div{background:var(--eg-accent)!important;}
.link,a.link{color:var(--eg-accent);}


/* ========================================================== D · HEADER ====== */
/* FB's default header is 4em (64px) — too cramped for the logo (~10px each side).
   96px gives ~26px breathing room each side, matching the spec's "~30px from the top".
   body{padding-top}, nav{top}, and .breadcrumbs{top} must all track this value. */
header{
  background:rgba(14,14,16,.86);
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
  border-bottom:1px solid var(--eg-line);
  box-shadow:none;
  height:96px;
}
/* Push content below our 96px header (overrides FB's body{padding-top:4em=64px}) */
body{padding-top:96px;}
/* FB's <img> logo is bypassed — eg-filebrowser.js injects the real HTML lockup
   as the header's first child (see Part R + IMPLEMENTATION.md). */
header img{display:none!important;}
/* CSS-only fallback: if the JS layer hasn't injected the lockup, still show an
   "EG" monogram so the header is never brand-less. */
header:not(:has(.eg-brand-lockup))::before{
  content:"EG";
  font-family:var(--eg-display);font-weight:400;font-size:22px;line-height:1.08;
  letter-spacing:.12em;color:var(--eg-fg);
  border-bottom:3px solid var(--eg-accent);padding-bottom:3px;
  margin:0 1.1em 0 .25em;flex:0 0 auto;
}
header title{
  font-family:var(--eg-display);
  font-weight:400;
  text-transform:uppercase;
  letter-spacing:.12em;
  line-height:1.08;
  font-size:1.05em;
  color:var(--eg-fg);
}
header .action{color:var(--eg-fg-2);background:transparent;appearance:none;-webkit-appearance:none;border:0;}
header .action i{font-size:1.35rem;}
header .action:hover{background:var(--hover);color:var(--eg-fg);}

/* search stays in header: off-screen when idle, full overlay when active.
   Nav proxy trigger (eg-filebrowser.js) activates it — avoids Vue DOM conflicts. */
header #search:not(.active){
  position:absolute!important;top:-9999px!important;left:-9999px!important;
  pointer-events:none!important;
}
header #search.active{
  position:fixed!important;top:96px!important;left:248px!important;right:0!important;
  height:calc(100vh - 96px)!important;
  z-index:9998!important;
  background:var(--eg-ink-2)!important;
  border-bottom:1px solid var(--eg-line-2)!important;
  display:flex!important;flex-direction:column!important;
  pointer-events:auto!important;
}
header #search.active #input{
  display:flex!important;align-items:center!important;gap:10px;
  padding:14px 18px!important;flex:none;
}
header #search.active #input i{color:var(--eg-fg-3)!important;font-size:18px;opacity:.85;flex:none;}
header #search.active #input input{
  display:block!important;visibility:visible!important;opacity:1!important;
  position:static!important;flex:1!important;
  color:var(--eg-fg)!important;background:transparent!important;
  border:0!important;outline:0!important;
  font-family:var(--eg-text)!important;font-size:15px!important;font-weight:400!important;
}
header #search.active #input input::placeholder{color:var(--eg-fg-3)!important;}
header #search.active #result{
  flex:1!important;height:0!important;min-height:0!important;overflow-y:auto!important;
}

/* —— the EG brand lockup (injected into the header by eg-filebrowser.js) —— */
.eg-brand-lockup{
  display:inline-flex;align-items:center;gap:13px;
  padding:4px 8px;margin-right:auto;
  text-decoration:none;line-height:1;flex:0 0 auto;
  color:var(--eg-fg);
}
.eg-brand-lockup .eg-mark{display:inline-flex;flex-direction:column;align-items:flex-start;line-height:1;flex:none;}
.eg-brand-lockup .eg-mark .mk{
  font-family:var(--eg-display);font-weight:700;font-size:26px;
  letter-spacing:.02em;color:var(--eg-fg);line-height:1;
}
.eg-brand-lockup .eg-mark .bar{margin-top:6px;width:30px;height:4px;background:var(--eg-accent);border-radius:1px;}
.eg-brand-lockup .brand-meta{display:inline-flex;flex-direction:column;line-height:1.1;}
.eg-brand-lockup .brand-meta .name{
  font-family:var(--eg-display);font-weight:400;font-size:14px;
  letter-spacing:.12em;text-transform:uppercase;color:var(--eg-fg);
  line-height:1.08;
}
.eg-brand-lockup .brand-meta .sub{
  display:block;margin-top:7px;
  font-family:var(--eg-text);font-weight:500;font-size:9.5px;
  letter-spacing:.28em;text-transform:uppercase;color:var(--eg-fg-3);
}


/* ===================================================== E · BREADCRUMBS ====== */
.breadcrumbs{
  background:var(--eg-ink-2);
  border-bottom:1px solid var(--eg-line);
  height:3.2em;
  color:var(--eg-fg-3);
  font-size:.95em;
  top:96px;  /* override FB's top:4em=64px to match our 96px header */
}
.breadcrumbs a{color:var(--eg-fg-2);border-radius:7px;transition:var(--eg-ease);}
.breadcrumbs a:hover{background:var(--eg-panel-2);color:var(--eg-fg);}
.breadcrumbs span:last-child a{color:var(--eg-fg);font-weight:600;}
.breadcrumbs .chevron i,.breadcrumbs i{color:var(--eg-fg-3);}


/* ====================================================== F · FILE LISTING ==== */
#listing h2{
  color:var(--eg-fg-3);
  font-family:var(--eg-text);
  font-weight:600;
  font-size:.72em;
  letter-spacing:.16em;
  text-transform:uppercase;
  margin:1.4em 0 .4em .15em;
}

/* —— sort header row —— */
#listing.list .item.header{
  background:transparent;
  border:0;
  border-bottom:1px solid var(--eg-line);
  padding:.5em 1em .9em;
}
#listing.list .item.header p{
  color:var(--eg-fg-3);
  font-size:.72em;
  font-weight:600;
  letter-spacing:.1em;
  text-transform:uppercase;
}
#listing.list .item.header .active{color:var(--eg-fg);}
#listing.list .header i{color:var(--eg-accent);}

/* —— rows —— */
#listing.list .item{
  background:transparent;
  border:0;
  border-bottom:1px solid var(--eg-line);
  padding:.55em 1em;
  transition:background var(--eg-ease);
}
#listing.list .item:hover{background:var(--eg-panel);}
#listing .item .name{color:var(--eg-fg);font-weight:400;}
#listing .item .size,#listing .item .modified{color:var(--eg-fg-3);font-size:.86em;}
#listing .item .modified time{color:var(--eg-fg-3);}

/* icon tile — a quiet rounded chip instead of a bare glyph */
#listing.list .item>div:first-of-type{display:flex;align-items:center;justify-content:center;}
#listing.list .item>div:first-of-type i{
  font-size:20px;
  width:36px;height:36px;
  display:grid;place-items:center;
  background:var(--eg-panel-2);
  border:1px solid var(--eg-line);
  border-radius:9px;
}
#listing.list .item>div:first-of-type img{
  width:36px;height:36px;border-radius:9px;object-fit:cover;
  border:1px solid var(--eg-line-2);
}

/* selection — accent-tinted, NOT a loud solid fill */
#listing .item[aria-selected="true"]{
  background:var(--item-selected)!important;
  color:var(--eg-fg)!important;
  box-shadow:inset 3px 0 0 var(--eg-accent);
}
#listing .item[aria-selected="true"] .name{color:var(--eg-fg)!important;}
.file-icons [aria-selected="true"] i{color:var(--eg-accent)!important;}
#listing .item[aria-selected="true"]>div:first-of-type i{
  background:rgba(0,154,189,.16);border-color:rgba(0,154,189,.34);
}

/* —— grid / mosaic —— */
#listing.mosaic .item{
  background:var(--eg-panel);
  border:1px solid var(--eg-line);
  border-radius:var(--eg-r-card);
  box-shadow:none;
  transition:var(--eg-ease);
}
#listing.mosaic .item:hover{
  border-color:var(--eg-line-2);
  box-shadow:var(--eg-shadow)!important;
  transform:translateY(-2px);
}
#listing.mosaic .item>div:first-of-type i{font-size:2.6em;}
#listing.mosaic.gallery .item[data-type="image"] div:last-of-type{
  background:linear-gradient(#0000,#000a);
}

/* bottom "multiple selection" bar — keep accent, square off the brand way */
#listing #multiple-selection{background:var(--eg-accent);}

/* empty / loading states */
.message{color:var(--eg-fg-2);}
.message i{color:var(--eg-fg-3);}
main .spinner>div{background:var(--eg-accent);}


/* =============================================== G · BUTTONS & INPUTS ======= */
.button{
  background:var(--eg-accent);
  color:#fff;
  border:0;
  border-radius:var(--eg-r-soft);
  box-shadow:none;
  font-family:var(--eg-text);
  font-weight:600;
  letter-spacing:.01em;
  padding:.62em 1.1em;
  transition:var(--eg-ease);
}
.button:hover{background:var(--eg-accent-deep);}
.button--flat{
  background:transparent;color:var(--eg-accent);
  text-transform:none;font-weight:600;letter-spacing:0;
}
.button--flat:hover{background:var(--eg-panel-2);}
.button--flat.button--grey{color:var(--eg-fg-2);}
.button--red{background:#D2675A;}
.button--flat.button--red{color:#D2675A;background:transparent;}

.input{
  background:var(--eg-panel-2);
  color:var(--eg-fg);
  border:1px solid var(--eg-line-2);
  border-radius:var(--eg-r-soft);
  padding:.62em .85em;
}
.input::placeholder{color:var(--eg-fg-3);}
input[type="checkbox"],input[type="radio"]{accent-color:var(--eg-accent);}
.input:hover{border-color:var(--eg-line-2);}
.input:focus{
  border-color:var(--eg-accent);
  box-shadow:0 0 0 3px rgba(0,154,189,.18);
  background:var(--eg-panel);
}


/* ============================================= H · CARDS / MODALS / OVERLAY = */
.card{
  background:var(--eg-panel);
  color:var(--eg-fg);
  border:1px solid var(--eg-line);
  border-radius:var(--eg-r-card);
  box-shadow:var(--eg-shadow);
}
.card .card-title h2,.card h2,.card h3{color:var(--eg-fg);font-family:var(--eg-display);}
.card .card-title h2,.card h2{
  font-weight:400;text-transform:uppercase;letter-spacing:.12em;font-size:1.15em;line-height:1.08;
}
.card h3{font-family:var(--eg-text);text-transform:none;font-weight:600;}
.card p,.card label,.card .card-content{color:var(--eg-fg-2);}
.card code,li code,p code{
  background:rgba(0,154,189,.1);
  border:1px solid rgba(0,154,189,.2);
  color:#8FD0DF;border-radius:5px;
}
.overlay{background-color:rgba(0,0,0,.62);}

/* prompt action grid (download formats etc.) */
.card .card-action.full .action{
  border:1px solid var(--eg-line-2);
  border-radius:var(--eg-r-soft);
  color:var(--eg-fg-2);
}
.card .card-action.full .action:hover{background:var(--eg-panel-2);color:var(--eg-fg);}
.card .card-action.full .action i{color:var(--eg-accent);}

/* move/copy file tree + share prompt */
.file-list li:hover{background:var(--eg-panel-2);}
.file-list li[aria-selected="true"]{background:var(--item-selected)!important;color:var(--eg-fg)!important;}
.file-list li[aria-selected="true"]:before{color:var(--eg-accent);}
.collapsible,.collapsible:last-of-type{border-color:var(--eg-line);}


/* ==================================================== I · SIDEBAR DRAWER ==== */
/* Canonical EG sidebar shell (see sidebar-nav-spec): dark dense column, rounded
   nav rows, muted icon that lights to accent on the active row only — NOT an
   accent geometry treatment. Values are lifted verbatim from the spec. */
nav{
  background:var(--eg-ink);                  /* #0A0A0B */
  border-right:1px solid var(--eg-line);     /* rgba(255,255,255,.07) */
  box-shadow:var(--eg-shadow);
  display:flex;flex-direction:column;
  width:248px;min-height:calc(100vh - 96px);
  padding:26px 18px;
  top:96px;  /* override FB's top:4em=64px to match our 96px header */
  overflow:visible;  /* allow search results dropdown to escape the sidebar */
}
nav .action{
  display:flex;align-items:center;gap:12px;
  width:100%;margin:0 0 2px;padding:10px 11px;
  border-radius:10px;
  background:transparent;appearance:none;-webkit-appearance:none;border:0;
  font-family:var(--eg-text);font-weight:500;font-size:14px;line-height:1.3;
  color:var(--eg-fg-2);                      /* #B6B2AA */
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
nav .action i{padding:0;margin:0;font-size:18px!important;color:var(--eg-fg-3);flex:none;width:18px;text-align:center;opacity:.85;}
nav .action span{overflow:hidden;text-overflow:ellipsis;}
nav .action:hover{background:var(--eg-panel);color:var(--eg-fg);}   /* #161618 / #F1EFEA */
/* active row = dark-card emphasis + accent leading icon (no rail, no bracket) */
nav .action.active,nav .action[aria-current="page"]{background:var(--eg-panel-2);color:var(--eg-fg);}
nav .action.active i,nav .action[aria-current="page"] i{color:var(--eg-accent);opacity:1;}
nav .action:hover i,nav #logout:hover i{color:var(--eg-accent);}
/* trailing count pill */
nav .action .count{margin-left:auto;padding:1px 8px;border-radius:999px;font-size:11.5px;color:var(--eg-fg-3);background:var(--eg-panel-2);}
/* section label */
nav .nav-label{padding:0 10px;margin:14px 0 8px;font-family:var(--eg-text);font-weight:600;font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--eg-fg-3);}
/* group separators between the FB action clusters (quiet, not every cluster) */
nav>div{border:0;margin:0;padding:0;}
/* footer — pinned to the bottom via margin-top:auto; JS moves p.credits last */
nav .credits{font-size:11.5px;color:var(--eg-fg-3);line-height:1.5;}
nav p.credits{
  margin-top:auto;margin-bottom:0;
  display:flex;flex-direction:column;gap:3px;
  padding-top:16px;border-top:1px solid var(--eg-line);
}
.credits a{color:var(--eg-fg-2);}
.credits a:hover{color:var(--eg-accent);}
/* account block (built by eg-filebrowser.js / present in spec'd shells) */
.eg-account{display:flex;align-items:center;gap:11px;margin-top:6px;padding:10px 6px 2px;}
.eg-account .avatar{width:30px;height:30px;border-radius:50%;background:var(--eg-charcoal);border:1px solid var(--eg-line-2);display:grid;place-items:center;color:var(--eg-fg);font-weight:600;font-size:12px;flex:none;}
.eg-account .who{display:flex;flex-direction:column;line-height:1.2;min-width:0;}
.eg-account .who .nm{font-size:13px;font-weight:500;color:var(--eg-fg);overflow:hidden;text-overflow:ellipsis;}
.eg-account .who .rl{font-size:11px;color:var(--eg-fg-3);}

/* proxy search trigger in nav — real #search stays in header, activated on click */
nav .eg-search-trigger{
  display:flex!important;align-items:center;gap:10px;
  width:100%;margin-bottom:16px;
  padding:10px 11px;border-radius:10px;
  background:var(--eg-panel)!important;
  border:1px solid var(--eg-line)!important;
  font-family:var(--eg-text);font-size:14px;font-weight:500;
  color:var(--eg-fg-3);cursor:pointer;
  appearance:none;-webkit-appearance:none;text-align:left;
}
nav .eg-search-trigger i{color:var(--eg-fg-3);font-size:18px!important;opacity:.85;flex:none;}
nav .eg-search-trigger span{overflow:hidden;text-overflow:ellipsis;}
nav .eg-search-trigger:hover{
  background:var(--eg-panel-2)!important;border-color:var(--eg-line-2)!important;
  color:var(--eg-fg-2);
}
nav .eg-search-trigger:hover i{color:var(--eg-accent);opacity:1;}

/* account row moved to footer — restyled as small muted credits text */
.eg-credits-account{
  display:flex!important;align-items:center;gap:6px;
  background:none!important;border-radius:0!important;
  padding:0 0 6px!important;margin:0!important;
  font-size:11.5px!important;font-weight:400!important;line-height:1.5;
  color:var(--eg-fg-3)!important;white-space:nowrap;overflow:hidden;
}
.eg-credits-account i{font-size:13px!important;width:auto!important;flex:none;opacity:.7;color:var(--eg-fg-3)!important;}
.eg-credits-account span{overflow:hidden;text-overflow:ellipsis;font-size:11.5px!important;}
.eg-credits-account:hover{background:none!important;color:var(--eg-fg-2)!important;}

/* disk-usage progress bar */
.progress-bar,.vue-simple-progress{border-radius:999px!important;}
.vue-simple-progress-bar{background:var(--eg-accent)!important;}


/* =========================================================== J · LOGIN ====== */
#login{
  background:
    radial-gradient(120% 90% at 50% -10%,rgba(0,154,189,.06),transparent 60%),
    var(--eg-ink-2);
}
/* if you drop a documentary still at img/login-bg.jpg, uncomment:
#login{background:linear-gradient(rgba(8,8,10,.78),rgba(8,8,10,.9)),
        url('img/login-bg.jpg') center/cover no-repeat;} */
#login form{
  max-width:21em;width:90%;
  background:var(--eg-panel);
  border:1px solid var(--eg-line);
  border-radius:var(--eg-r-card);
  box-shadow:var(--eg-shadow);
  padding:2.4em 2em 2em;
}
#login img{display:none;}
#login form::before{
  content:"EG";
  display:block;width:max-content;
  font-family:var(--eg-display);font-weight:400;font-size:34px;line-height:1.08;
  letter-spacing:.12em;color:var(--eg-fg);border-bottom:4px solid var(--eg-accent);
  padding-bottom:5px;margin:0 auto .1em;
}
#login h1{
  font-family:var(--eg-text);
  font-weight:300;
  font-size:1.05em;
  letter-spacing:.01em;
  color:var(--eg-fg-2);
  margin:.9em 0 1.4em;
}
#login .input{background:var(--eg-panel-2);}
#login .button{width:100%;padding:.78em;font-size:1em;}
#login p{color:var(--eg-accent);text-transform:none;}
#login .wrong{background:#D2675A;border-radius:var(--eg-r-soft);}
#login .logout-message{background:var(--eg-charcoal);border-radius:var(--eg-r-soft);}


/* ======================================================= K · SHARE PAGES ==== */
/* Public shares collapse to ONE full-width column (like the portal): the native
   breadcrumb, the left info card and the QR are intentionally removed — see
   IMPLEMENTATION.md §6. eg-filebrowser.js builds the eyebrow stack + toolbar and
   moves the download button up; these rules reshape the native Share.vue DOM. */
body:has(.share) .breadcrumbs{display:none;}            /* drop the home/breadcrumb */
.share{padding:0 34px 64px;gap:0;display:block;max-width:1180px;margin:0 auto;}
/* when our toolbar exists, hide the native info card (name/size/QR) + section head */
.share:has(.eg-share-toolbar) .share__box__info{display:none;}
.share:has(.eg-share-toolbar) .share__box__items{
  flex:none;width:100%;background:none;border:0;box-shadow:none;margin:0;border-radius:0;overflow:visible;
}
.share:has(.eg-share-toolbar) .share__box__items>.share__box__header{display:none;}

.share__box{
  background:var(--eg-panel);
  border:1px solid var(--eg-line);
  border-radius:var(--eg-r-card);
  box-shadow:var(--eg-shadow);
  color:var(--eg-fg-2);
}
.share__box__header{
  font-family:var(--eg-display);
  font-weight:400;text-transform:uppercase;letter-spacing:.12em;
  color:var(--eg-fg);line-height:1.08;
  border-bottom:1px solid var(--eg-line);
}
.share__box__element{border-top:1px solid var(--eg-line);}
.share__box__element strong{color:var(--eg-fg);font-weight:600;}
.share__box__icon i{color:var(--eg-accent)!important;}
.share__box__element .button{border-radius:var(--eg-r-soft);}
/* native <video>/<audio> in the share preview box */
.share__box video,.share__box audio,.share__box img{border-radius:10px;}
.share__box__items #listing.list .item{border-top:1px solid var(--eg-line);}
.share__wrong__password{background:#D2675A;border-radius:var(--eg-r-soft);}


/* ============================================= L · FILE-TYPE ICON COLOURS === */
/* All file glyphs recede to a quiet neutral; folders alone carry the accent. */
.file-icons i{color:#9a9da3;}
.file-icons [data-dir="true"] i{color:var(--eg-accent)!important;}
.file-icons [data-type="video"] i,
.file-icons [data-type="image"] i,
.file-icons [data-type="audio"] i{color:#a9adb4;}


/* ============================================= M · SETTINGS / DASHBOARD ===== */
.dashboard #nav .wrapper{border-bottom:2px solid var(--eg-line);}
.dashboard #nav ul{color:var(--eg-fg-2);}
.dashboard #nav ul li:hover{background:var(--eg-panel);}
.dashboard #nav ul li.active{color:var(--eg-accent);border-color:var(--eg-accent);}
.dashboard #nav ul li.active::before{background:var(--eg-accent);opacity:.1;}
table tr{border-bottom:1px solid var(--eg-line);}
table th{color:var(--eg-fg);font-family:var(--eg-text);font-weight:600;
  text-transform:uppercase;letter-spacing:.08em;font-size:.78em;}
table td{color:var(--eg-fg-2);}
.dashboard p label{color:var(--eg-fg-2);}


/* ================================================ N · PREVIEWER (lightbox) == */
#previewer{background-color:#08080a;}
#previewer header{background:none;border:0;height:auto;}
#previewer header title{font-family:var(--eg-display);text-transform:uppercase;letter-spacing:.015em;}
#previewer>button{background-color:rgba(20,20,22,.6);border:1px solid var(--eg-line-2);}
#previewer>button:hover{background-color:rgba(0,154,189,.22);}
#previewer .preview video,#previewer .preview img{border-radius:6px;}
#previewer .spinner>div{background:var(--eg-accent);}


/* ====================================== O · SHELL / SEARCH / TOAST / MENU === */
.shell__content{background:var(--eg-ink);color:var(--eg-fg-2);}
.shell__prompt i{color:var(--eg-accent);}
#search #result{background:var(--eg-ink-2);color:var(--eg-fg-2);}
#search .boxes{background:var(--eg-panel);border-color:var(--eg-line);}
#search .boxes>div>div{background:var(--eg-panel-2);color:var(--eg-fg);border:1px solid var(--eg-line);}
#search .boxes i{color:var(--eg-accent)!important;}
#search .boxes h3{color:var(--eg-fg-2);}
.message.padding,.context-menu,#context-menu{
  background:var(--eg-panel)!important;border:1px solid var(--eg-line)!important;
  border-radius:var(--eg-r-card)!important;box-shadow:var(--eg-shadow)!important;
}
.Vue-Toastification__toast{border-radius:var(--eg-r-card)!important;font-family:var(--eg-text)!important;}
/* top loading progress */
.progress div{background:var(--eg-accent)!important;}


/* =================================== P · BRAND ATOMS (injected by share JS) = */
/* eg-filebrowser.js draws this stack on public share pages. See IMPLEMENTATION.md */
/* —— shared public-share content frame (single full-width column, like the
   portal — no left info card, no QR, no breadcrumb) —— */
.eg-share-wrap{max-width:1180px;margin:0 auto;padding:0 34px 64px;}
.eg-share-wrap .eg-sharehead{max-width:none;padding:1.7em 0 1.1em;}
.eg-share-toolbar{
  display:flex;align-items:center;gap:14px;margin:0 0 18px;
  padding:10px 14px;  /* 56px row: 10 + 36 + 10 — matches Seafile file-list-toolbar spec */
  background:var(--eg-panel);border:1px solid var(--eg-line);border-radius:var(--eg-r-soft);
}
.eg-share-toolbar .spacer{flex:1;}
.eg-share-meta{font-size:13px;color:var(--eg-fg-2);font-weight:500;letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.eg-view-toggle{display:inline-flex;background:var(--eg-panel-2);border:1px solid var(--eg-line);border-radius:var(--eg-r-soft);padding:3px;gap:3px;}
.eg-view-toggle button{width:34px;height:32px;border-radius:7px;display:grid;place-items:center;color:var(--eg-fg-3);transition:var(--eg-ease);}
.eg-view-toggle button i{font-size:18px;}
.eg-view-toggle button:hover{color:var(--eg-fg);}
.eg-view-toggle button.active{background:var(--eg-panel-3);color:var(--eg-fg);}
.eg-share-wrap #listing.list .item.header{padding-left:18px;padding-right:18px;}
.eg-share-wrap #listing.list .item{padding-left:18px;padding-right:18px;}

.eg-sharehead{
  display:flex;flex-direction:column;align-items:flex-start;gap:13px;
  width:100%;max-width:1180px;margin-inline:auto;box-sizing:border-box;
  padding:1.7em 34px 1.1em;
}
.eg-sharehead.eg-sharefoot{
  flex-direction:row;align-items:flex-end;justify-content:space-between;
  gap:24px;width:100%;max-width:880px;margin:0 auto;padding:1.5em 0 0;
}
.eg-sharefoot .eg-sharestack{display:flex;flex-direction:column;align-items:flex-start;gap:13px;min-width:0;}
.eg-sharefoot .eg-shareactions{margin:0;flex:none;}
.eg-eyebrow{
  font-family:var(--eg-text);font-weight:500;font-size:11.5px;
  letter-spacing:.24em;text-transform:uppercase;color:var(--eg-accent);
  white-space:nowrap;
}
.eg-bar{height:4px;width:38px;background:var(--eg-accent);border-radius:1px;}
.eg-title{
  font-family:var(--eg-display);font-weight:400;text-transform:uppercase;
  letter-spacing:.12em;line-height:1.08;font-size:clamp(22px,3vw,32px);
  color:var(--eg-fg);margin:0;
}
.eg-sharemeta{font-size:13px;color:var(--eg-fg-3);margin-top:2px;}
.eg-shareactions{display:flex;gap:10px;margin-top:6px;}
.eg-dl-btn,.eg-zip-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  background:var(--eg-accent)!important;color:#fff!important;
  font:500 14px/36px var(--eg-text)!important;flex:none;
  height:36px!important;padding:0 18px!important;
  border-radius:var(--eg-r-soft)!important;
  border:0!important;box-shadow:none!important;text-transform:none!important;
}
/* keep the leading icon a fixed compact box so a slow/again-fallback icon font
   never stretches the button (it renders the ligature text otherwise) */
.eg-dl-btn i,.eg-zip-btn i,.btn-ghost-eg i{
  font-size:17px!important;width:17px;min-width:17px;height:17px;
  overflow:hidden;flex:none;line-height:1;
}
.eg-dl-btn:hover,.eg-zip-btn:hover{background:var(--eg-accent-deep)!important;}
.eg-file-ic{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;background:var(--eg-panel-2);border:1px solid var(--eg-line);color:var(--eg-fg-2);flex:none;}
.eg-file-ic i{font-size:18px;}
.btn-ghost-eg{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--eg-line-2);color:var(--eg-fg);background:var(--eg-panel-2);font-family:var(--eg-text);font-weight:600;font-size:13.5px;padding:.7em 1.05em;border-radius:var(--eg-r-soft);transition:var(--eg-ease);}
.btn-ghost-eg:hover{border-color:rgba(255,255,255,.32);background:var(--eg-panel-3);}
.btn-ghost-eg i{font-size:16px;}
/* single-video share: calm, centred frame */
html[data-eg-share="video"] .share__box video,
html[data-eg-share="video"] #previewer .preview video{
  max-height:68vh;border-radius:8px;
}


/* — share pages: hide the entire sidebar nav so content is truly centered — */
html.is-share nav{display:none!important;}
html.is-share main{width:100%!important;margin-left:auto!important;margin-right:auto!important;}

/* — share pages: hide login link, version string, and help link — */
body:has(.share) nav .credits,
body:has(.share) nav p.credits,
body:has(.share) nav a[href$="/login"],
body:has(.share) nav #logout{display:none!important;}

/* — share pages: hide native multi-select controls from the header bar.
   eg-filebrowser.js recreates them inside the eg-share-toolbar instead. — */
body:has(.share) header button.action[aria-label="Download"],
body:has(.share) header button.action[aria-label="Select multiple"],
body:has(.share) header button.copy-clipboard{display:none!important;}

/* —— multi-select controls inside the share toolbar —— */
.eg-ms-group{display:flex;align-items:center;gap:8px;}

/* checkmark toggle (select multiple) — ghost chip, fills accent when active */
.eg-ms-check{
  display:inline-flex;align-items:center;justify-content:center;
  width:36px;height:36px;
  border:1px solid var(--eg-line-2);border-radius:var(--eg-r-soft);
  background:var(--eg-panel-2);color:var(--eg-fg-3);
  cursor:pointer;transition:var(--eg-ease);
}
.eg-ms-check i{font-size:20px;}
.eg-ms-check:hover{border-color:rgba(255,255,255,.32);color:var(--eg-fg);background:var(--eg-panel-3);}
.eg-ms-check.active{background:var(--eg-accent);border-color:var(--eg-accent);color:#fff;}
.eg-ms-check.active i{color:#fff;}

/* download-selected — icon + counter, accent fill, same shape as eg-zip-btn */
.eg-sel-dl{
  display:none;align-items:center;justify-content:center;gap:6px;
  min-width:36px;height:36px;padding:0 10px;
  background:var(--eg-accent);color:#fff;
  border:0;border-radius:var(--eg-r-soft);
  font-family:var(--eg-text);font-weight:500;font-size:13px;
  cursor:pointer;transition:var(--eg-ease);
}
.eg-sel-dl.visible{display:inline-flex;}
.eg-sel-dl:hover{background:var(--eg-accent-deep);}
.eg-sel-dl i{font-size:18px;width:18px;min-width:18px;height:18px;overflow:hidden;flex:none;line-height:1;}

/* copy-download-link — ghost chip, shown only when exactly 1 file selected */
.eg-sel-copy{
  display:none;align-items:center;justify-content:center;
  width:36px;height:36px;
  border:1px solid var(--eg-line-2);border-radius:var(--eg-r-soft);
  background:var(--eg-panel-2);color:var(--eg-fg-2);
  cursor:pointer;transition:var(--eg-ease);
}
.eg-sel-copy.visible{display:inline-flex;}
.eg-sel-copy:hover{border-color:rgba(255,255,255,.32);background:var(--eg-panel-3);color:var(--eg-fg);}
.eg-sel-copy i{font-size:18px;width:18px;min-width:18px;height:18px;overflow:hidden;flex:none;line-height:1;}


/* ====================================================== Q · RESPONSIVE ====== */
@media (max-width:736px){
  header::before{margin:0 .6em 0 .15em;font-size:19px;}
  /* Mobile nav is a drawer (top:0, slides in from left) — override our base nav{top:96px} */
  nav{top:0;}
  .share{padding:1em .5em 4em;}

  /* tighter gutters for the public-share surfaces */
  .eg-share-wrap{padding-left:18px;padding-right:18px;}
  .eg-share-wrap .eg-sharehead,
  .eg-sharehead{padding-left:0;padding-right:0;}
  .eg-sharehead{padding-top:1.3em;}
  .eg-share-wrap #listing.list .item,
  .eg-share-wrap #listing.list .item.header{padding-left:14px;padding-right:14px;}

  /* settings: keep all four tabs on one row, scroll as a safety net */
  .dashboard #nav{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .dashboard #nav ul li{padding:.85em .85em;font-size:.94em;white-space:nowrap;}
  .dashboard #nav i{margin-right:.15em;}
}

/* —— brand lockup — larger on mobile (26px desktop → 32px mobile) —— */
@media (max-width:720px){
  header{height:72px;}
  /* Sync body padding-top and breadcrumbs top to our 72px mobile header
     (desktop uses 96px; FB's base body{padding-top:4em=64px} and
     .breadcrumbs{top:4em=64px} both need overriding here too) */
  body{padding-top:72px;}
  .breadcrumbs{top:72px;}
  .eg-brand-lockup{gap:16px;}
  .eg-brand-lockup .eg-mark .mk{font-size:32px;}
  .eg-brand-lockup .eg-mark .bar{width:36px;}
  .eg-brand-lockup .brand-meta .name{font-size:18px;}
  .eg-brand-lockup .brand-meta .sub{font-size:12px;}
}

/* —— phone: stack the share toolbars + footer so nothing clips —— */
@media (max-width:600px){
  .eg-share-toolbar{flex-wrap:wrap;gap:12px;padding:12px 14px;}
  .eg-share-toolbar .spacer{display:none;}
  .eg-share-meta{flex:1 1 0;min-width:0;}
  /* the primary action drops to its own full-width row, secondary stays inline */
  .eg-share-toolbar .eg-dl-btn,
  .eg-share-toolbar .eg-zip-btn{flex:1 0 100%;justify-content:center;order:9;}
  .eg-share-toolbar .btn-ghost-eg{justify-content:center;}

  /* video share: title sits above a full-width download */
  .eg-sharehead.eg-sharefoot{flex-direction:column;align-items:flex-start;gap:16px;}
  .eg-sharefoot .eg-shareactions{width:100%;}
  .eg-sharefoot .eg-dl-btn{width:100%;justify-content:center;}
}


/* ========================================= R · UPLOAD EXTENSION STYLES ====== */
/* Anonymous upload shares — injected by eg-filebrowser.js upload extension */

/* —— R1 · admin toggle row (share create dialog) —— */
.eg-upload-toggle-row{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  margin-top:14px;padding-top:14px;
  border-top:1px solid var(--eg-line);
}
.eg-upload-toggle{
  display:flex;align-items:center;gap:10px;
  cursor:pointer;color:var(--eg-fg-2);font-size:14px;font-weight:500;
  user-select:none;
}
.eg-upload-toggle:hover{color:var(--eg-fg);}
.eg-upload-check{
  width:18px;height:18px;margin:0;cursor:pointer;
  accent-color:var(--eg-accent);
}
.eg-suggest-pw{
  display:inline-flex;align-items:center;gap:6px;
  font-size:12px!important;padding:4px 10px!important;
  white-space:nowrap;flex-shrink:0;
}
.eg-suggest-pw i{font-size:15px!important;}

/* —— R2 · upload buttons in share toolbar —— */
.eg-upload-btn{
  display:inline-flex;align-items:center;gap:6px;
  color:var(--eg-fg-2);cursor:pointer;transition:var(--eg-ease);
  font-family:var(--eg-text);font-weight:500;font-size:13px;
  padding:0 12px;height:36px;border-radius:var(--eg-r-soft);
  border:1px solid var(--eg-line-2);background:var(--eg-panel-2);
}
.eg-upload-btn:hover{
  color:var(--eg-fg);border-color:rgba(255,255,255,.32);background:var(--eg-panel-3);
}
.eg-upload-btn i{font-size:18px;}
#listing.eg-drop-active{
  outline:2px dashed var(--eg-accent);outline-offset:-2px;border-radius:var(--eg-r-soft);
}

/* —— R3 · upload progress modal (recipient share page) —— */
.eg-upload-overlay{
  position:fixed;inset:0;z-index:9999;
  background:rgba(0,0,0,.62);
  display:flex;align-items:center;justify-content:center;
}
.eg-upload-modal{
  width:520px;max-width:90vw;max-height:80vh;
  background:var(--eg-panel);
  border:1px solid var(--eg-line);
  border-radius:var(--eg-r-card);
  box-shadow:var(--eg-shadow);
  display:flex;flex-direction:column;
  overflow:hidden;
}
.eg-upload-modal-header{
  padding:20px 24px 14px;
  border-bottom:1px solid var(--eg-line);
  display:flex;align-items:center;justify-content:space-between;
}
.eg-upload-modal-header h2{
  font-family:var(--eg-display);font-weight:400;
  text-transform:uppercase;letter-spacing:.12em;
  font-size:1.05em;color:var(--eg-fg);margin:0;
}
.eg-upload-modal-close{
  width:32px;height:32px;border-radius:8px;
  display:grid;place-items:center;
  color:var(--eg-fg-3);cursor:pointer;transition:var(--eg-ease);
}
.eg-upload-modal-close:hover{background:var(--eg-panel-2);color:var(--eg-fg);}
.eg-upload-modal-close i{font-size:20px;}
.eg-upload-modal-close.disabled{opacity:.3;pointer-events:none;}
.eg-upload-modal-cancel{
  font-family:var(--eg-text);font-weight:600;font-size:12.5px;
  color:#D2675A;cursor:pointer;padding:6px 14px;border-radius:var(--eg-r-soft);
  transition:var(--eg-ease);
}
.eg-upload-modal-cancel:hover{background:rgba(210,103,90,.12);}

.eg-upload-modal-body{
  flex:1;overflow-y:auto;padding:8px 24px;
  min-height:60px;max-height:340px;
}

/* —— per-file row —— */
.eg-upload-file{
  padding:10px 0;
  border-bottom:1px solid var(--eg-line);
}
.eg-upload-file:last-child{border-bottom:0;}
.eg-up-header{
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:6px;
}
.eg-up-name{
  font-size:13px;font-weight:500;color:var(--eg-fg);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  max-width:340px;
}
.eg-up-meta{
  font-size:11.5px;color:var(--eg-fg-3);
  white-space:nowrap;flex-shrink:0;margin-left:12px;
}
/* progress bar */
.eg-up-bar{
  width:100%;height:4px;
  background:var(--eg-panel-2);
  border-radius:2px;overflow:hidden;
}
.eg-up-fill{
  height:100%;width:0%;
  background:var(--eg-accent);
  border-radius:2px;
  transition:width .2s ease;
}
.eg-up-fill.eg-up-done{background:#34b27b;}
.eg-up-fill.eg-up-error{background:#D2675A;}
.eg-up-fill.eg-up-cancelled{background:var(--eg-charcoal);}

/* —— summary footer —— */
.eg-upload-modal-footer{
  padding:12px 24px 16px;
  border-top:1px solid var(--eg-line);
  display:flex;align-items:center;justify-content:space-between;
  font-size:12.5px;color:var(--eg-fg-3);
}
.eg-upload-modal-footer .eg-up-summary{font-weight:500;}
.eg-up-footer-buttons{
  display:flex;align-items:center;gap:10px;flex-shrink:0;
}
.eg-upload-modal-footer .eg-up-close-btn{
  display:none;align-items:center;gap:6px;
  font-size:12.5px;font-weight:600;color:var(--eg-accent);
  cursor:pointer;padding:4px 10px;border-radius:var(--eg-r-soft);
  transition:var(--eg-ease);
}
.eg-upload-modal-footer .eg-up-close-btn.visible{display:inline-flex;}
.eg-upload-modal-footer .eg-up-close-btn:hover{background:var(--eg-panel-2);}
