/* ==================================================================
   ACCUEIL (Home) — scoped styles (prefix `.home-*`)
   Cleaned & organized — duplicates removed, consistent tokens & layout
   ================================================================== */

/* ------------------------------------------------------------------
   0) SCOPE WRAPPER
   ------------------------------------------------------------------ */
.home-root{ display:block; }

/* ------------------------------------------------------------------
   1) PAGE LAYOUT (areas + two columns)
   ------------------------------------------------------------------ */
.home-layout{
  display:grid;
  gap:16px;
  grid-template-areas:
    "welcome"
    "quick"
    "search"
    "ca"
    "grid-columns";
}
.home-welcome{ grid-area:welcome; }
.home-quick-wrap{ grid-area:quick; }
.home-search{ grid-area:search; }
.home-ca{ grid-area:ca; }
.home-columns{ grid-area:grid-columns; }

/* 2 columns (left 2fr / right 1.2fr) */
.home-columns,
.home-grid{ /* legacy alias kept for compatibility */
  display:grid;
  grid-template-columns:2fr 1.2fr;
  gap:16px;
  margin-bottom: 50px;
}

/* Stack columns on small screens */
@media (max-width:1100px){
  .home-columns,
  .home-grid{ grid-template-columns:1fr; }
}

/* Column spacing */
.home-col-left > * + *{ margin-top:16px; }
.home-col-right > * + *{ margin-top:16px; }



/* ------------------------------------------------------------------
   SEARCH BAR
   ------------------------------------------------------------------ */
.search-bar {
  position: relative;
  width: 100%;
  max-width: 600px;
  margin: 20px auto;
}

#searchBar {
  width: 100%;
  padding: 12px 14px;
  font-size: 1rem;
  border-radius: var(--radius);
  border: 1px solid var(--border);
  background: var(--panel);
  color: var(--text);
}

#searchResults {
  position: absolute;
   left: 70px;
   right: 15px;
   top: 80%;
  background: var(--panel);
  border: 1px solid var(--border);
  border-top: none;
  border-radius: var(--radius);
  box-shadow: var(--shadow-pop);
  max-height: 350px;
  overflow-y: auto;
  z-index: 999;
  display: none;
}

.result-item { display: flex; align-items: center; gap: 8px; padding: 8px 12px; cursor: pointer; }
.result-item:hover { background: var(--accent-200); }
.res-icon {
display: flex;
align-items: center;

}
.res-icon .lucide {
   width: 16px;
   height: 16px;
   color: var(--accent);
}
.result-item  small {
     color: var(--muted); 
}
#searchResults {
  transition: opacity .2s ease;
}
#searchResults[style*="display: none"] {
  opacity: 0;
}
/* ------------------------------------------------------------------
   2) SECTION HEADER (title + actions)
   ------------------------------------------------------------------ */
.home-section-header{
  display:flex; align-items:center; justify-content:space-between;
  gap:12px; padding:12px 14px;  
}
.home-section-header h2{
  margin:0; font-size:16px; letter-spacing:.2px;
  display:flex; align-items:center; gap:8px; font-weight:600;
}
.home-section-actions{ display:flex; align-items:center; gap:8px; }
.ico-accent{ width:18px; height:18px; stroke:var(--accent); flex-shrink:0; }

/* ------------------------------------------------------------------
   3) HERO / WELCOME
   ------------------------------------------------------------------ */
.hero-welcome{ text-align:center; margin-top:18px; }
.hero-inner{ max-width:680px; margin:0 auto; }
.hero-title{ font-size:clamp(24px,4vw,34px); font-weight:600; margin:0 0 8px; color:var(--text); }
.hero-name{ color:var(--accent); font-weight:700; }
.hero-sub{ font-size:16px; color:var(--muted); margin:0 0 20px; }
.hero-actions{ display:flex; justify-content:center; margin-bottom: 20px; }

/* Greeting (inline variant) */
#homeGreeting{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.g-name{ font-weight:700; }
.g-sub{ display:flex; align-items:center; gap:8px; margin-top:6px; color:var(--muted); }
.g-ico{ display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px; border-radius:50%; background:color-mix(in oklab, var(--accent) 18%, transparent); color:var(--accent); }
.g-ico .svg{ width:18px; height:18px; display:block; }

/* Subtitle line */
.home-subtitle{ display:flex; gap:10px; margin:10px 0; font-weight:600; font-style:italic; padding-left:13px; }
.home-subtitle .lucide{ width:20px; max-height:20px; color:var(--muted); }

/* ------------------------------------------------------------------
   4) QUICK ACTIONS (3 main cards)
   ------------------------------------------------------------------ */
.home-quick{ display:grid; gap:20px; grid-template-columns:repeat(auto-fit, minmax(240px,1fr)); margin-top:20px; }

.qa-icon{ flex-shrink:0; width:56px; height:56px; border-radius:50%; background:color-mix(in oklab, var(--accent) 20%, transparent); color:var(--accent); display:flex; align-items:center; justify-content:center; }
.qa-icon .svg{ width:28px; height:28px; }
.qa-body h3{ margin:0; font-size:18px; font-weight:600; color:var(--text); }
.qa-body p{ margin:4px 0 8px; color:var(--muted); font-size:14px; }
.qa-cta{ position:absolute; right:12px; bottom:12px; font-size:13px; font-weight:700; color:var(--accent); text-transform:uppercase; }

/* ------------------------------------------------------------------
   5) GLOBAL SEARCH (cardless block with focus ring)
   ------------------------------------------------------------------ */
.home-search{ margin:0; padding:0; background:none; box-shadow:none; border:none; }
.home-search .searchbar{ position: relative; display:flex; align-items:center; gap:10px;  width:100%; padding: 1rem;  }
.home-search .searchbar .lucide{  transition:stroke .2s; }
.home-search .searchbar input{ flex:1; border:0; outline:none; font-size:15px; background:var(--panel); border:1px solid var(--border); border-radius:var(--radius); padding:10px 14px;color:var(--text);transition:border-color .2s, box-shadow .2s; }
.home-search .searchbar input:focus-within{ border-color:var(--accent); box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 40%, transparent); }
.home-search .searchbar input:focus-within .lucide{ stroke:var(--accent); }
/* Optional CTA beside the field */
.home-search .btn{ height:40px; padding:0 14px; border-radius:10px; border:0; cursor:pointer; font-weight:700; background:var(--accent); color:var(--textNeg); }
.home-search .btn:hover{ filter:brightness(1.05); }


@media (max-width:600px){ 
   .home-search .searchbar { padding: 1rem 1.7rem 0 1.7rem;}

}

/* ------------------------------------------------------------------
   6) KPI / CA BLOCK + CHART
   ------------------------------------------------------------------ */
.home-ca .wrap{ padding:14px; display:grid; gap:12px; }
.home-ca .row-top{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
.home-ca .row-top h3{ margin:0; font-size:16px; }
.home-ca .period{ display:inline-flex; align-items:center; gap:8px; border:1px solid var(--border); border-radius:8px; padding:6px 8px; background:var(--panel); }
.home-ca .period select{ border:0; outline:none; background:transparent; color:var(--text); font-weight:600; padding:4px 8px; border-radius:6px; }

/* Segmented stack (CA / charges / marge / prestations) */
.home-ca .stack{ height:18px; border-radius:999px; overflow:hidden; border:1px solid var(--border); background:color-mix(in srgb, var(--accent) 12%, var(--panel)) !important; position:relative; }
.home-ca .stack .seg{ height:100%; display:block; }
.home-ca .stack-legend{ display:flex; flex-wrap:wrap; align-items:center; gap:10px; color:var(--muted); font-size:12px; }
.home-ca .chip{ display:inline-flex; align-items:center; gap:6px; padding:4px 8px; border:1px solid var(--border); border-radius:999px; background:var(--panel); color:var(--text); }
.home-ca .chip .dot{ width:10px; height:10px; border-radius:50%; display:inline-block; }
.dot-ca{ background:#0ea5e9; }
.dot-ch{ background:#f59e0b; }
.dot-mg{ background:#22c55e; }
.dot-lc{ background:#a78bfa; }

/* KPIs grid */
.home-kpis{ display:grid; grid-template-columns:repeat(5,1fr); gap:10px; }
.home-kpi {   
    border-radius: 10px;
    padding: 10px;
    background: var(--bg);
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    align-items: center;  
}
.home-kpi .label {  
   color: var(--text);
    font-size: 12px;
    letter-spacing: .04em;
    text-transform: uppercase; 
}
.home-kpi .val{ 
    font-weight: 500;
    margin-top: 4px;
    font-size: 1rem;
    color: var(--accent);
}
@media (max-width:780px){ .home-kpis{ grid-template-columns:repeat(2,1fr); } }

/* Simple line chart scaffolding */
.chart{ width:100%; position:relative; margin-bottom:14px; }
.chart svg{ width:100%; height:100%; }
.chart circle{ fill:var(--accent); }
.chart-labels{ position:absolute; bottom:-18px; left:0; right:0; display:flex; justify-content:space-between; font-size:11px; color:var(--muted); }
.chart-labels span{ flex:1; text-align:center; }
.chart-labels span:first-child{ text-align:left; }
.chart-labels span:last-child{ text-align:right; }
.chart-loader{ position:absolute; inset:0; display:flex; justify-content:center; align-items:center; z-index:2; }
.ca-curve text{ font-family:var(--font, sans-serif); font-size:10px; fill:var(--muted); }

/* Mini progress bar */
.bar-mini{ height:8px; border-radius:999px; overflow:hidden; border:1px solid var(--border); background:color-mix(in srgb, var(--accent) 12%, var(--panel)); }
.bar-mini .fill{ height:100%; background:var(--accent); width:0%; transition:width .25s ease; }

/* ------------------------------------------------------------------
   7) GENERIC LISTS (cards)
   ------------------------------------------------------------------ */
.home-list{ list-style:none; margin:0; padding:10px 0; display:grid; gap:8px; }
.home-item{   
   padding:5px 0; 
   display:grid; 
   gap:6px;  
}

 .rowHome{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; }

.home-item .meta-charge{ 
   color: var(--muted);
    font-size: 12px;
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    align-items: center;
    display: grid;
    grid-template-columns: 1fr /* id */ 15px  70px; /* meta charges */
    justify-content: end;
}
.home-item .meta-charge .lucide {
   width: 16px;
   height: 16px; 

}
.home-item .actions{ margin-left:auto; display:inline-flex; gap:8px; align-items:center; }

/* Buttons (compact) */
.btn-mini{ 
      border: 1px solid var(--border);
      border-radius: 8px;
      background: var(--panel);
      color: var(--text);
      padding: 6px 16px;
      font-size: 12px;
      cursor: pointer;
      transition: background .2s, color .2s, border-color .2s;
      display: flex;
      align-items: center;
      gap: 6px;
}
.btn-mini:hover, .btn-xmini:hover { background:var(--hover); }
.btn-mini .lucide { width: 16px; height: 16px; }
.btn-xmini{ 
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--panel);
    color: var(--text);
    padding: 2px 8px;
    color: var(--muted);
    font-size: 0.7rem;
    cursor: pointer;
    transition: background .2s, color .2s, border-color .2s;
}





/* Tags */
.tag{ font-size:12px; border:1px solid var(--border); padding:3px 7px; border-radius:999px; background:var(--hover); display:inline-flex; align-items:center; gap:6px; }
.tag.warn{ color:#b45309; background:color-mix(in srgb, #f59e0b 18%, transparent); border-color:color-mix(in srgb, #f59e0b 50%, var(--border)); }
.tag.info{ color:#075985; background:color-mix(in srgb, #0ea5e9 18%, transparent); border-color:color-mix(in srgb, #0ea5e9 50%, var(--border)); }
.tag.ok{ color:#14532d; background:color-mix(in srgb, #22c55e 18%, transparent); border-color:color-mix(in srgb, #22c55e 50%, var(--border)); }
.tag.danger{ color:#7f1d1d; background:color-mix(in srgb, #ef4444 18%, transparent); border-color:color-mix(in srgb, #ef4444 50%, var(--border)); }



/* ------------------------------------------------------------------
   9) INCOMING DEMANDS (message cards)
   ------------------------------------------------------------------ */
.demand-grid{ display:grid; gap:10px; }
.demand{ border:1px solid var(--border); border-radius:10px; padding:10px; background:var(--panel); display:grid; gap:6px; }
.demand .head{ display:flex; align-items:center; gap:10px; }
.demand .name{ font-weight:800; }
.demand .badges{ display:flex; gap:8px; flex-wrap:wrap; }
.demand .msg{ color:var(--text); background:var(--hover); border:1px solid var(--border); border-radius:8px; padding:8px; }
.demand .actions{ display:flex; gap:8px; }
.demand .btn-mini{ border:1px solid var(--border); padding:6px 8px; border-radius:8px; background:var(--panel); cursor:pointer; }
.demand .btn-mini:hover{ background:var(--hover); }

/* ------------------------------------------------------------------
   10) TASKS (quick tasks)
   ------------------------------------------------------------------ */
.task{ display:flex; align-items:center; gap:.5rem; background:var(--elev); padding:.5rem .75rem; margin-bottom:.5rem; border-radius:8px; transition:background .2s; }
.task:hover{ background:var(--hover); }
.task.done{ opacity:.65; text-decoration:line-through; }
.task .t-del{ margin-left:auto; background:transparent; border:none; color:var(--warning); cursor:pointer; font-size:.8rem; }
.task-new button{ height:36px; padding:0 10px; border-radius:8px; border:0; background:var(--accent); color:var(--textNeg); font-weight:700; cursor:pointer; }
/* Focus for inputs inside quick task forms */
.task-new input:focus{ border-color:var(--accent) !important; box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 40%, transparent) !important; }

/* ------------------------------------------------------------------
   11) MODAL (central overlay)
   ------------------------------------------------------------------ */
.home-modal-backdrop{ position:fixed; inset:0; background:rgba(0,0,0,.55); display:none; justify-content:center; align-items:center; z-index:3000; transition:opacity .2s; }
.home-modal-backdrop.is-open{ display:flex; }
.home-modal{ width:min(720px, 96vw); max-height:88vh; overflow:auto; background:var(--panel); border:1px solid var(--border); border-radius:14px; box-shadow:var(--shadow-pop); display:grid; animation:homeModalIn .18s ease; }
.home-modal .hd{ display:flex; align-items:center; justify-content:space-between; gap:10px; padding:12px; border-bottom:1px solid var(--border); }
.home-modal .bd{ padding:12px; display:grid; gap:12px; }
.home-modal .ft{ display:flex; justify-content:flex-end; gap:8px; border-top:1px solid var(--border); padding:12px; }
.home-modal .close{ border:1px solid var(--border); background:var(--panel); border-radius:8px; padding:6px 10px; cursor:pointer; }
@keyframes homeModalIn{ from{ transform:translateY(12px); opacity:0; } to{ transform:translateY(0); opacity:1; } }

/* Cards inside modal: creation shortcuts */
.home-modal .grid-new{ display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
@media (max-width:840px){ .home-modal .grid-new{ grid-template-columns:1fr 1fr; } }
@media (max-width:560px){ .home-modal .grid-new{ grid-template-columns:1fr; } }
.home-new-card{ display:flex; gap:12px; align-items:flex-start; padding:14px; border:1px solid var(--border); border-radius:var(--radius); background:var(--panel); cursor:pointer; transition:border-color .2s, box-shadow .2s, transform .1s, background .2s; }
.home-new-card:hover{  transform:translateY(-2px); background:var(--hover); }
.home-new-card .card-ico{ flex-shrink:0; color:var(--accent); }
.home-new-card .svg{ width:28px; height:28px; stroke:currentColor; fill:none; stroke-width:1.6; }
.home-new-card .titleHomecard{ font-weight:600; font-size: 1.2rem; margin-bottom:2px; color:var(--text); }
.home-new-card .desc{ font-size:13px; color:var(--muted); }

/* ------------------------------------------------------------------
   12) INLINE FORM — CHARGE COMMUNE
   ------------------------------------------------------------------ */
.ligne-charge-commune form{ background:var(--panel); border:1px solid var(--border); border-radius:var(--radius); padding:14px; box-shadow:var(--shadow-soft); display:grid; gap:14px; animation:fadeIn .25s ease; }
.ligne-charge-commune form h4{ font-size:16px; font-weight:600; color:var(--text); display:flex; align-items:center; gap:8px; }
.ligne-charge-commune form h4 .icon-inline{ color:var(--accent); }
.ligne-charge-commune form .btn-neutral{ background:transparent; border:1px solid var(--border); border-radius:8px; padding:4px 8px; font-size:13px; cursor:pointer; color:var(--muted); transition:all .2s; }
.ligne-charge-commune form .btn-neutral:hover{ background:var(--hover); color:var(--accent); }
.ligne-charge-commune form .actions button{ border:0; background:var(--accent); color:var(--textNeg); font-weight:600; font-size:14px; padding:8px 14px; border-radius:8px; cursor:pointer; display:inline-flex; align-items:center; gap:6px; transition:background .2s, box-shadow .2s; }
.ligne-charge-commune form .actions button:hover{ background:var(--accent-600); box-shadow:var(--ring); }

/* ------------------------------------------------------------------
   13) UTILITIES
   ------------------------------------------------------------------ */
.muted{ color:var(--muted); }
.nowrap{ white-space:nowrap; }
.spacer{ height:6px; }
.hidden{ display:none !important; }

/* Fade-in generic */
@keyframes fadeIn{ from{ opacity:0 } to{ opacity:1 } }



#periodBtn { padding-right: 40px;}

.home-quick-wrap .btnXl {
   margin: 0 10px;
}



/* =====================================================
   🕓 TIMELINE — Journal d'activité (alignée propre)
   ===================================================== */

.timeline {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding-left: 0px;
  margin: 10px 0;
}

/* ✅ UNE SEULE LIGNE VERTICALE */
.timeline::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 14px;
  width: 2px;
  background: var(--border);
}

/* === ITEM === */
.tl-item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 20px;
  font-size: 0.8rem;
}

/* === POINT + ICÔNE SUR LA LIGNE === */
.tl-item::before {
    content: "";
    position: absolute;
    left: 10px;
    width: 10px;
    height: 10px;
    background: var(--accent);
    border-radius: 50%;
    z-index: 2;
}

/* === Contenu aligné horizontalement === */

.tl-item .when {
  font-size: 12px;
  color: var(--muted);
  min-width: 80px;
  text-align: right;
  flex-shrink: 0;
}

.tl-item .who {
  font-weight: 600;
  color: var(--accent);
  margin-left: 4px;
}






@media (min-width: 600px) {
    .factureCc {
        display: grid;
        grid-template-columns: 1fr 170px;
        align-items: center;
        gap: 1rem;
        width: 100%;
    }
    .facture-home {
        display: grid;
        grid-template-columns: 1fr 140px 250px 330px;
        align-items: center;
        gap: 1rem;
        width: 100%;
    }
   .nouvelleDemande {
        display: grid;
        grid-template-columns: 1fr 20% 80px 20% 10% 80px;
        align-items: center;
        gap: 1rem;
        width: 100%;

    }
}


.meta-facture-home {
        display: grid;
        grid-template-columns: 120px 1fr 80px;
        align-items: center;
        gap: 1rem;
        width: 100%;
}
.meta-facture-home .date ,
.nouvelleDemande .date {
   font-size: 0.8rem;
   color: var(--muted);
   text-align: end;
}


/* dot couleur dans "projets actifs" */
.titleRow{
  display:flex;
  align-items:center;
  gap:8px;
}
.proj-dot{
  width:10px;
  height:10px;
  border-radius:999px;
  background: rgba(148,163,184,.55);
  flex: 0 0 auto;
}

/* badge projet coloré (devis + factures) */
.projet-badge{
  border: 1px solid rgba(148,163,184,.35);
  background: rgba(148,163,184,.12);
}


.projet-badge[data-entity="projet"]{
  cursor:pointer;
}
.projet-badge[data-entity="projet"]:hover{
  filter: brightness(1.03);
}
.rowHome .projet-badge .projet-badge-icon {
    background:var(--pcolor);
}

/* nouvelles demandes */

.hd-demande-grid{
  display:grid;
  grid-template-columns: 1fr 1fr;
  gap:12px;
}
.hd-demande-block{
  padding:10px;
  border:1px solid var(--border);
  border-radius:12px;
}
.hd-demande-block .label{
  font-size:12px;
  color:var(--muted);
  margin-bottom:4px;
}
.hd-demande-block .val{
  font-size:14px;
}
@media (max-width: 900px){
  .hd-demande-grid{ grid-template-columns: 1fr; }
}


#rqCounter {
   border-radius: 99px;
    background: var(--warning);
    color: var(--textNeg);
    display: flex;
    width: 25px;
    height: 25px;
    justify-content: center;
    align-items: center;
}

.hd-demande-top {
   margin: 30px 0;
}

/* Badges contact — clic = copie */
.client-infos .info-item.badgeEmail,
.client-infos .info-item.badgePhone{
  cursor: pointer;
  border-radius: 12px;
  padding: 10px 12px;
  border: 1px solid rgba(0,0,0,.08);
  background: rgba(59,130,246,.08); /* accent doux */
  display: flex;
  align-items: center;
  gap: 10px;
  transition: background .12s ease, border-color .12s ease;
}

.client-infos .info-item.badgeEmail:hover,
.client-infos .info-item.badgePhone:hover{
  background: rgba(59,130,246,.12);
  border-color: rgba(0,0,0,.12);
}

.client-infos .info-item.badgeEmail i,
.client-infos .info-item.badgePhone i{
  width: 18px;
  height: 18px;
  color: rgba(17,24,39,.75);
}

.client-infos .info-label{
  font-size: 11px;
  color: rgba(17,24,39,.55);
  text-transform: uppercase;
  letter-spacing: .3px;
  font-weight: 700;
  margin-right: 2px;
}

.client-infos .info-value{
  font-size: 13px;
  font-weight: 800;
  color: rgba(17,24,39,.95);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Option : badge “désactivé” si vide */
.client-infos .info-item[data-copy=""]{
  cursor: default;
  opacity: .55;
  background: rgba(0,0,0,.03);
}

.client-infos .info-item.is-copied{
  border-color: rgba(0,0,0,.18);
  background: rgba(59,130,246,.16);
}

.client-infos.contact-demande {
   display: flex !important;
}

/* Map fiche demande */
.demande-map{
  margin-top: 10px;
  border-radius: 12px;
  overflow: hidden;
}

.demande-map-iframe{
  width: 100%;
  height: 220px;
  border: 0;
  display: block;
}

.addr-wrap{
  display: flex;
  flex-direction: column;
  gap: 6px;
  width: 100%;
}


.mail-tpl-bar{
    display: flex;
    gap: 10px;
    margin-bottom: 10px;
    border: 1px solid var(--border);
    background: var(--bg);
    border-radius: 0 0 10px 10px;
    padding: 0 20px;
    align-items: flex-end;
    padding-bottom: 6px;
}
.mail-tpl-left{ flex:1; min-width:240px; }
.mail-tpl-select{
display: flex;
    align-items: center;
    gap: 8px;

    padding: 8px 10px;

}
.mail-tpl-select select{
  width:100%;
  border:0; outline:0; background:transparent;
}
.mail-tpl-actions{ 
  display: flex;
    gap: 8px;
        padding-bottom: 6px;
 }
.mail-tpl-bar .ico{ width:16px; height:16px; opacity:.8; }

#dmSendForm {

       padding-top: 2rem;
}



#btnRefreshDemandesWeb.is-loading {
  pointer-events: none;
  opacity: .7;
}

#btnRefreshDemandesWeb.is-loading .ico {
  animation: spinDemandesRefresh 0.9s linear infinite;
}

@keyframes spinDemandesRefresh {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

#btnAppRefresh.is-loading {
  pointer-events: none;
  opacity: .7;
}

#btnAppRefresh.is-loading .ico {
  animation: appRefreshSpin .9s linear infinite;
}

@keyframes appRefreshSpin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}