const {S,Head,I,P,PEOPLE,AV,useCtx}=window.WFA;
const NS=window.XCOPEDesignSystem_bf80f1;
const {UIButton,UIInput,UISelect,UICard,UIAvatar,UIAvatarGroup,UIPill,UITabs,UIModal,UITable,UIStat,UIBanner,UIToggle,UICheckbox}=NS;
const UIDataTable=NS.UIDataTable,UIEmptyState=NS.UIEmptyState,UIMenu=NS.UIMenu,UIDrawer=NS.UIDrawer;

const HR_TYPES=["Férias","Falta justificada","Falta injustificada","Dia pessoal","Trabalho remoto","Licença parental"];
const HR_BAL={"Férias":{used:8,total:22},"Falta justificada":{used:2,total:null},"Dia pessoal":{used:1,total:3}};

// ---------- Colaborador: as minhas ausências ----------
S["time-off"]=()=>{
  const [rows,setRows]=React.useState([
    {id:1,p:"Férias de verão",t:"Férias",d:"04-15 ago",days:10,s:"Aprovado",by:"Tomás Machado"},
    {id:2,p:"Consulta médica",t:"Falta justificada",d:"29 jul",days:1,s:"Pendente",by:"—"},
    {id:3,p:"Dia pessoal",t:"Dia pessoal",d:"12 set",days:1,s:"Pendente",by:"—"},
    {id:4,p:"Ponte de Páscoa",t:"Férias",d:"03-04 abr",days:2,s:"Aprovado",by:"Tomás Machado"},
  ]);
  const [nova,setNova]=React.useState(false);
  const [sel,setSel]=React.useState(null);
  const [f,setF]=React.useState({tipo:"Férias",ini:"",fim:"",motivo:"",meio:false});
  const [erro,setErro]=React.useState("");

  const pend=rows.filter(r=>r.s==="Pendente").length;
  const usadas=rows.filter(r=>r.t==="Férias"&&r.s==="Aprovado").reduce((n,r)=>n+r.days,0);
  const submit=()=>{
    if(!f.ini){setErro("Indica a data de início.");return;}
    const label=f.ini+(f.fim&&f.fim!==f.ini?"-"+f.fim:"");
    setRows(rs=>[{id:Date.now(),p:f.motivo||f.tipo,t:f.tipo,d:label,days:f.meio?0.5:1,s:"Pendente",by:"—"},...rs]);
    setF({tipo:"Férias",ini:"",fim:"",motivo:"",meio:false});setErro("");setNova(false);
  };

  return <React.Fragment>
  <Head title="As minhas ausências" desc={usadas+" de 22 dias de férias usados · "+pend+(pend===1?" pedido pendente":" pedidos pendentes")}
    actions={<UIButton icon={<I d={P.plus} size={16}/>} onClick={()=>setNova(true)}>Novo pedido</UIButton>}/>

  <div className="grid g3" style={{marginBottom:16}}>
    <UICard><UIStat label="Férias" value={String(22-usadas)} sublabel={"dias disponíveis de 22"}/></UICard>
    <UICard><UIStat label="Faltas justificadas" value="2" sublabel="este ano"/></UICard>
    <UICard><UIStat label="A aguardar aprovação" value={String(pend)} sublabel={pend?"com Tomás Machado":"nada pendente"}/></UICard>
  </div>

  <UICard style={{padding:0,overflow:"hidden",flex:1}}>
    <div className="row" style={{padding:"16px 16px"}}><span style={{fontWeight:600,fontSize:"var(--ui-fs-h3)"}}>Histórico de pedidos</span></div>
    <div style={{padding:"12px 16px 16px"}}>
      <UIDataTable columns={[
        {key:"p",label:"Pedido",render:v=><span style={{fontWeight:600}}>{v}</span>},
        {key:"t",label:"Tipo"},
        {key:"d",label:"Datas"},
        {key:"days",label:"Dias",render:v=><span style={{fontVariantNumeric:"tabular-nums"}}>{v}</span>},
        {key:"by",label:"Aprovado por",render:v=><span className="muted">{v}</span>},
        {key:"s",label:"Estado",align:"right",render:v=><UIPill tone={v==="Aprovado"?"success":v==="Recusado"?"danger":"warning"} dot>{v}</UIPill>}]}
        rows={rows} onRowClick={r=>setSel(r)}/>
    </div>
  </UICard>

  <UIModal open={nova} onClose={()=>setNova(false)} title="Novo pedido de ausência" width={560}
    footer={<div className="row" style={{gap:8}}><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Vai para aprovação de Tomás Machado</span><div className="spring"/><UIButton variant="ghost" onClick={()=>setNova(false)}>Cancelar</UIButton><UIButton onClick={submit}>Submeter pedido</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <UISelect label="Tipo de ausência" value={f.tipo} onChange={e=>setF({...f,tipo:e.target.value})} options={HR_TYPES}/>
      {HR_BAL[f.tipo]&&<div className="row" style={{gap:10,padding:"12px 14px",borderRadius:"var(--ui-r-md)",background:"var(--ui-surface-2)",fontSize:"var(--ui-fs-sm)"}}>
        <I d={P.away} size={16} c="var(--ui-text-3)"/>
        <span>Saldo: <strong>{HR_BAL[f.tipo].total?HR_BAL[f.tipo].total-HR_BAL[f.tipo].used+" de "+HR_BAL[f.tipo].total+" dias":"sem limite definido"}</strong></span>
      </div>}
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        <UIInput label="Início" placeholder="dd/mm" value={f.ini} onChange={e=>{setF({...f,ini:e.target.value});setErro("");}} error={erro||undefined}/>
        <UIInput label="Fim (opcional)" placeholder="dd/mm" value={f.fim} onChange={e=>setF({...f,fim:e.target.value})}/>
      </div>
      <UICheckbox label="Meio dia" checked={f.meio} onChange={()=>setF({...f,meio:!f.meio})}/>
      <UIInput label="Motivo (opcional)" placeholder="Ex.: férias de verão" value={f.motivo} onChange={e=>setF({...f,motivo:e.target.value})}/>
      <div className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>A tua equipa fica com 4 pessoas disponíveis nesse período.</div>
    </div>
  </UIModal>

  <UIDrawer open={!!sel} width={420} onClose={()=>setSel(null)}
    header={sel&&<span style={{fontWeight:600,fontSize:"var(--ui-fs-h3)"}}>{sel.p}</span>}
    footer={sel&&<React.Fragment>
      {sel.s==="Pendente"&&<UIButton variant="outline" onClick={()=>{setRows(rs=>rs.filter(r=>r.id!==sel.id));setSel(null);}}>Cancelar pedido</UIButton>}
      <div className="spring"/><UIButton variant="ghost" onClick={()=>setSel(null)}>Fechar</UIButton></React.Fragment>}>
    {sel&&<div style={{display:"flex",flexDirection:"column",gap:22}}>
      <div className="row" style={{gap:8,flexWrap:"wrap"}}>
        <UIPill tone={sel.s==="Aprovado"?"success":sel.s==="Recusado"?"danger":"warning"} dot>{sel.s}</UIPill>
        <UIPill>{sel.t}</UIPill>
      </div>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        {[["Datas",sel.d],["Duração",sel.days+(sel.days===1?" dia":" dias")],["Aprovador",sel.by!=="—"?sel.by:"Tomás Machado"],["Empresa","Xcope AI"]].map(([l,v])=>
          <div key={l}><div className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",marginBottom:4}}>{l}</div><div style={{fontWeight:500}}>{v}</div></div>)}
      </div>
      {HR_BAL[sel.t]&&<div className="row" style={{gap:10,padding:"12px 14px",borderRadius:"var(--ui-r-md)",background:"var(--ui-surface-2)",fontSize:"var(--ui-fs-sm)"}}>
        <I d={P.away} size={16} c="var(--ui-text-3)"/>
        <span>Saldo de {sel.t.toLowerCase()}: <strong>{HR_BAL[sel.t].total?HR_BAL[sel.t].total-HR_BAL[sel.t].used+" de "+HR_BAL[sel.t].total+" dias":"sem limite definido"}</strong></span>
      </div>}
      <div style={{display:"flex",flexDirection:"column",gap:12}}>
        <div className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase"}}>Percurso do pedido</div>
        {[["Pedido submetido","por Hugo Montenegro","done"],
          sel.s==="Aprovado"?["Aprovado","por "+sel.by,"done"]
          :sel.s==="Recusado"?["Recusado","por "+(sel.by!=="—"?sel.by:"Tomás Machado"),"danger"]
          :["A aguardar aprovação","com Tomás Machado","wait"]].map(([t,d,st],i)=>
          <div key={i} className="row" style={{gap:10}}>
            <span style={{width:8,height:8,borderRadius:999,background:st==="done"?"var(--ui-success)":st==="danger"?"var(--ui-danger)":"var(--ui-warning)",flexShrink:0}}/>
            <span style={{fontWeight:500,fontSize:"var(--ui-fs-sm)"}}>{t}</span>
            <span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{d}</span>
          </div>)}
      </div>
    </div>}
  </UIDrawer>
  </React.Fragment>;
};

// ---------- Gestor: gestão de ausências ----------
const HR_QUEUE=[
  {id:11,who:"Rui Pinto",dept:"Engenharia",t:"Férias",d:"12-14 ago",days:3,left:18,when:"há 10 min"},
  {id:12,who:"Ana Reis",dept:"Pessoas",t:"Falta justificada",d:"29 jul",days:1,left:null,when:"há 2 h"},
  {id:13,who:"Zain Franci",dept:"Produto",t:"Trabalho remoto",d:"30 jul - 02 ago",days:4,left:null,when:"ontem"},
  {id:14,who:"Sofia Melo",dept:"Dados",t:"Férias",d:"18-29 ago",days:10,left:6,when:"ontem"},
];
const EMPLOYEES=[
  {name:"Hugo Montenegro",role:"CEO",dept:"Direção",state:"Ativo",since:2021},
  {name:"Rui Pinto",role:"Engenheiro sénior",dept:"Engenharia",state:"Ativo",since:2022},
  {name:"Ana Reis",role:"Gestora de produto",dept:"Produto",state:"Ausente",since:2024},
  {name:"Carla Dias",role:"Técnica de recrutamento",dept:"Pessoas",state:"Ativo",since:2023},
  {name:"Sofia Melo",role:"Analista de dados",dept:"Dados",state:"Ativo",since:2023},
  {name:"Zain Franci",role:"Designer de produto",dept:"Produto",state:"Ausente",since:2022},
  {name:"Tomás Jervell",role:"Diretor comercial",dept:"Comercial",state:"Ativo",since:2020},
  {name:"João Alves",role:"Engenheiro de dados",dept:"Dados",state:"Ativo",since:2024},
  {name:"Mira Mango",role:"Gestora de conta",dept:"Comercial",state:"Ativo",since:2023},
  {name:"Tomás Machado",role:"Diretor de operações",dept:"Operações",state:"Ativo",since:2021},
];
const HR_TEAM=[
  {who:"Ana Reis",dias:[0,0,1,1,0,0,0]},
  {who:"Rui Pinto",dias:[0,0,0,0,0,0,0]},
  {who:"Zain Franci",dias:[0,0,0,0,2,2,2]},
  {who:"Carla Dias",dias:[0,1,0,0,0,0,0]},
  {who:"Sofia Melo",dias:[0,0,0,0,0,0,0]},
];
const HR_WD=["Seg","Ter","Qua","Qui","Sex","Sáb","Dom"];

// mapa anual: intervalos de férias por pessoa (dia contínuo = mês*30 + dia, meses 0-11)
const MA_DAY=(m,d)=>m*30+d;
const MA_RANGES={
  "Hugo Montenegro":[{a:MA_DAY(7,4),b:MA_DAY(7,15),t:"apr"},{a:MA_DAY(3,3),b:MA_DAY(3,4),t:"apr"}],
  "Ana Reis":[{a:MA_DAY(7,3),b:MA_DAY(7,14),t:"apr"},{a:MA_DAY(11,21),b:MA_DAY(11,23),t:"pend"}],
  "Rui Pinto":[{a:MA_DAY(3,6),b:MA_DAY(3,10),t:"apr"},{a:MA_DAY(7,12),b:MA_DAY(7,14),t:"pend"}],
  "Zain Franci":[{a:MA_DAY(8,14),b:MA_DAY(8,25),t:"apr"}],
  "Carla Dias":[{a:MA_DAY(5,29),b:MA_DAY(6,3),t:"apr"},{a:MA_DAY(9,26),b:MA_DAY(9,30),t:"pend"}],
  "Sofia Melo":[{a:MA_DAY(7,18),b:MA_DAY(7,29),t:"pend"}],
  "Tomás Jervell":[{a:MA_DAY(5,1),b:MA_DAY(5,12),t:"apr"}],
  "João Alves":[{a:MA_DAY(11,7),b:MA_DAY(11,18),t:"apr"}],
};
const MA_FECHO={a:MA_DAY(11,24),b:MA_DAY(11,31)}; // encerramento da empresa
const MA_MESES=["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"];

S["admin-time-off"]=()=>{
  const [tab,setTab]=React.useState("fila");
  const [queue,setQueue]=React.useState(HR_QUEUE);
  const [decidido,setDecidido]=React.useState([]);
  const [polGuardou,setPolGuardou]=React.useState(false);
  const [selQ,setSelQ]=React.useState(null);
  const [selS,setSelS]=React.useState(null);
  const [ano,setAno]=React.useState("2026");
  const decide=(item,ok)=>{setQueue(q=>q.filter(x=>x.id!==item.id));setDecidido(d=>[{...item,ok},...d]);};

  const saldos=PEOPLE.slice(0,6).map((n,i)=>({name:n,dept:["Eng","Produto","Pessoas","Comercial","Dados","Eng"][i],usados:[8,3,12,6,14,2][i],total:22,pend:[1,0,0,1,0,0][i]}));

  return <React.Fragment>
  <Head scoped title="Gestão de ausências" desc={queue.length+(queue.length===1?" pedido a aguardar":" pedidos a aguardar")+" · política padrão de 22 dias"}
    actions={<UIButton variant="outline" icon={<I d={P.exp||P.doc} size={16}/>}>Exportar</UIButton>}/>

  <div className="grid g4" style={{marginBottom:16}}>
    <UICard><UIStat label="A aprovar" value={String(queue.length)} sublabel="fila da minha equipa"/></UICard>
    <UICard><UIStat label="Ausentes hoje" value="3" sublabel="de 62 pessoas"/></UICard>
    <UICard><UIStat label="Taxa de absentismo" value="2,4%" delta="-0,3 pp" deltaTone="success" sublabel="vs. junho"/></UICard>
    <UICard><UIStat label="Férias não gozadas" value="184" sublabel="dias acumulados"/></UICard>
  </div>

  <UICard style={{padding:0,overflow:"hidden",flex:1,minHeight:0,display:"flex",flexDirection:"column"}}>
    <div className="row" style={{padding:"12px 16px",borderBottom:"1px solid var(--ui-divider)"}}>
      <UITabs value={tab} onChange={setTab} items={[{value:"fila",label:"Fila de aprovação"},{value:"equipa",label:"Calendário da equipa"},{value:"mapa",label:"Mapa anual"},{value:"saldos",label:"Saldos"},{value:"politicas",label:"Políticas"}]}/>
    </div>

    {tab==="fila"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:"12px 16px 16px"}}>
      {UIDataTable
        ? <UIDataTable rows={queue} rowKey="id" pageSize={10} onRowClick={r=>setSelQ(r)}
            emptyState={<UIEmptyState title="Fila vazia" description="Não há pedidos a aguardar a tua decisão."/>}
            columns={[
              {key:"who",label:"Quem",sortable:true,render:(v,r)=><span className="row" style={{gap:10,minWidth:0}}>{AV(v)}<span style={{minWidth:0}}><span style={{fontWeight:600,display:"block",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}>{v}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{r.dept}</span></span></span>},
              {key:"t",label:"Tipo",sortable:true,render:v=><UIPill>{v}</UIPill>},
              {key:"d",label:"Datas",render:v=><span style={{whiteSpace:"nowrap"}}>{v}</span>},
              {key:"days",label:"Duração",sortable:true,align:"right",render:v=><span style={{fontVariantNumeric:"tabular-nums",whiteSpace:"nowrap"}}>{v} {v===1?"dia":"dias"}</span>},
              {key:"left",label:"Saldo depois",render:(v,r)=><span className="muted" style={{fontSize:"var(--ui-fs-sm)",whiteSpace:"nowrap"}}>{v!=null?"Fica com "+(v-r.days)+" dias":"—"}</span>},
              {key:"when",label:"Pedido",render:v=><span className="muted" style={{fontSize:"var(--ui-fs-sm)",whiteSpace:"nowrap"}}>{v}</span>},
            ]}
            rowActions={r=><span className="row" style={{gap:8,justifyContent:"flex-end"}} onClick={e=>e.stopPropagation()}>
              <UIButton size="sm" onClick={()=>decide(r,true)}>Aprovar</UIButton>
              <UIButton size="sm" variant="outline" onClick={()=>decide(r,false)}>Recusar</UIButton>
            </span>}/>
        : <UIEmptyState title="Fila vazia" description="Não há pedidos a aguardar a tua decisão."/>}
      {decidido.length>0&&<div style={{marginTop:16}}>
        <div className="muted" style={{padding:"12px 0 8px",fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase"}}>Decididos agora</div>
        {decidido.map(d=><div key={d.id} className="row" style={{gap:16,padding:"12px 0",borderBottom:"1px solid var(--ui-divider)"}}>
          {AV(d.who)}<span style={{fontWeight:500}}>{d.who}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{d.t} · {d.d}</span>
          <div className="spring"/><UIPill tone={d.ok?"success":"danger"} dot>{d.ok?"Aprovado":"Recusado"}</UIPill>
        </div>)}
      </div>}
    </div>}

    {tab==="equipa"&&<div style={{flex:1,overflow:"auto",padding:16}}>
      <div style={{display:"grid",gridTemplateColumns:"minmax(160px,1fr) repeat(7,minmax(0,1fr))",gap:8,alignItems:"center"}}>
        <span/>{HR_WD.map((d,i)=><span key={i} className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,textTransform:"uppercase",letterSpacing:"0.06em",textAlign:"center"}}>{d} {20+i}</span>)}
        {HR_TEAM.map(p=><React.Fragment key={p.who}>
          <span className="row" style={{gap:10,minWidth:0}}>{AV(p.who,"xs")}<span style={{fontSize:"var(--ui-fs-sm)",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}>{p.who}</span></span>
          {p.dias.map((v,i)=><span key={i} title={v===1?"Férias":v===2?"Trabalho remoto":"Presente"} style={{height:30,borderRadius:8,background:v===1?"var(--ui-warning-bg)":v===2?"var(--ui-info-bg)":"var(--ui-surface-2)",border:"1px solid "+(v?"transparent":"var(--ui-divider)")}}/>)}
        </React.Fragment>)}
      </div>
      <div className="row" style={{gap:16,marginTop:18,fontSize:"var(--ui-fs-sm)"}}>
        <span className="row" style={{gap:8}}><span style={{width:14,height:14,borderRadius:4,background:"var(--ui-warning-bg)"}}/>Férias</span>
        <span className="row" style={{gap:8}}><span style={{width:14,height:14,borderRadius:4,background:"var(--ui-info-bg)"}}/>Trabalho remoto</span>
        <span className="row" style={{gap:8}}><span style={{width:14,height:14,borderRadius:4,background:"var(--ui-surface-2)",border:"1px solid var(--ui-divider)"}}/>Presente</span>
      </div>
    </div>}

    {tab==="mapa"&&(()=>{
      const temDados=ano==="2026";
      const maPeople=Object.keys(MA_RANGES).map(n=>saldos.find(s=>s.name===n)||{name:n,dept:(EMPLOYEES.find(e=>e.name===n)||{}).dept||"",usados:8,total:22,pend:0});
      // conflito: 3+ pessoas ausentes no mesmo dia
      const conf=new Set();let pico={n:0,m:0};
      if(temDados)for(let d=1;d<=360;d++){let c=0;Object.keys(MA_RANGES).forEach(n=>{if(MA_RANGES[n].some(r=>d>=r.a&&d<=r.b))c++;});
        if(c>=3){conf.add(Math.floor((d-1)/30));if(c>pico.n)pico={n:c,m:Math.floor((d-1)/30)};}}
      const seg=(rs,m)=>rs.map(r=>{const a=Math.max(r.a,m*30+1),b=Math.min(r.b,m*30+30);if(a>b)return null;
        return {l:((a-(m*30+1))/30)*100,w:((b-a+1)/30)*100,t:r.t};}).filter(Boolean);
      return <div style={{flex:1,minHeight:0,overflow:"auto",padding:16}}>
        <div className="row" style={{gap:12,marginBottom:14,flexWrap:"wrap"}}>
          <div style={{width:120}}><UISelect value={ano} onChange={e=>setAno(e.target.value)} options={["2025","2026","2027"]}/></div>
          <div className="row" style={{gap:14,fontSize:"var(--ui-fs-sm)",flexWrap:"wrap"}}>
            <span className="row" style={{gap:7}}><span style={{width:14,height:8,borderRadius:4,background:"var(--ui-accent)"}}/>Aprovado</span>
            <span className="row" style={{gap:7}}><span style={{width:14,height:8,borderRadius:4,background:"var(--ui-warning)"}}/>Pendente</span>
            <span className="row" style={{gap:7}}><span style={{width:14,height:8,borderRadius:4,background:"var(--ui-text-3)"}}/>Encerramento</span>
            <span className="row" style={{gap:7}}><span style={{width:14,height:14,borderRadius:4,border:"1.5px solid var(--ui-danger)"}}/>Sobreposição</span>
          </div>
          <div className="spring"/>
          {temDados&&conf.size>0&&<span className="row" style={{gap:8,fontSize:"var(--ui-fs-sm)",color:"var(--ui-danger)",fontWeight:600}}><I d={P.bell} size={15}/>{pico.n} pessoas ausentes em simultâneo em {MA_MESES[pico.m].toLowerCase()}</span>}
        </div>
        {!temDados&&<UIBanner tone="info" title={"Sem registos em "+ano}>Ainda não há pedidos de férias registados para este ano. O encerramento de fim de ano aplica-se a toda a empresa.</UIBanner>}
        <div style={{overflowX:"auto",marginTop:temDados?0:14}}>
          <div style={{display:"grid",gridTemplateColumns:"minmax(170px,220px) repeat(12,minmax(56px,1fr))",gap:"6px 4px",alignItems:"center",minWidth:900}}>
            <span/>{MA_MESES.map((m,i)=><span key={m} className="row" style={{justifyContent:"center",gap:5,fontSize:"var(--ui-fs-xs)",fontWeight:600,textTransform:"uppercase",letterSpacing:"0.06em",color:temDados&&conf.has(i)?"var(--ui-danger)":"var(--ui-text-3)"}}>{m}{temDados&&conf.has(i)&&<span style={{width:5,height:5,borderRadius:999,background:"var(--ui-danger)"}}/>}</span>)}
            {maPeople.map(p=><React.Fragment key={p.name}>
              <span className="row" onClick={()=>setSelS(p)} style={{gap:10,minWidth:0,cursor:"pointer",padding:"3px 4px",borderRadius:"var(--ui-r-sm)"}} onMouseEnter={e=>e.currentTarget.style.background="var(--ui-hover)"} onMouseLeave={e=>e.currentTarget.style.background="transparent"}>
                {AV(p.name,"xs")}<span style={{fontSize:"var(--ui-fs-sm)",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}>{p.name}</span></span>
              {MA_MESES.map((m,i)=>{const ss=temDados?seg(MA_RANGES[p.name]||[],i):[];const fe=seg([Object.assign({t:"fecho"},MA_FECHO)],i);
                return <span key={i} style={{position:"relative",height:26,borderRadius:6,background:"var(--ui-surface-2)",border:temDados&&conf.has(i)&&ss.length?"1.5px solid var(--ui-danger)":"1px solid var(--ui-divider)",overflow:"hidden"}}>
                  {fe.map((s,j)=><span key={"f"+j} style={{position:"absolute",top:0,bottom:0,left:s.l+"%",width:s.w+"%",background:"var(--ui-text-3)",opacity:0.35}}/>)}
                  {ss.map((s,j)=><span key={j} title={s.t==="apr"?"Férias aprovadas":"Pedido pendente"} style={{position:"absolute",top:5,bottom:5,left:s.l+"%",width:s.w+"%",borderRadius:4,background:s.t==="apr"?"var(--ui-accent)":"var(--ui-warning)"}}/>)}
                </span>;})}
            </React.Fragment>)}
          </div>
        </div>
        <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:14}}>Encerramento da empresa: 24 a 31 de dezembro. Clica numa pessoa para ver os saldos.</div>
      </div>;})()}

    {tab==="saldos"&&<div style={{flex:1,overflow:"auto",padding:"12px 16px 16px"}}>
      <UIDataTable columns={[
        {key:"name",label:"Colaborador",render:v=><span className="row" style={{gap:10,fontWeight:600}}>{AV(v)} {v}</span>},
        {key:"dept",label:"Departamento"},
        {key:"usados",label:"Usados",render:(v,r)=><span style={{fontVariantNumeric:"tabular-nums"}}>{v} / {r.total}</span>},
        {key:"total",label:"Disponível",render:(v,r)=><span style={{fontWeight:600,fontVariantNumeric:"tabular-nums"}}>{v-r.usados}</span>},
        {key:"pend",label:"Pendentes",align:"right",render:v=>v?<UIPill tone="warning" dot>{v}</UIPill>:<span className="muted">—</span>}]}
        rows={saldos} onRowClick={r=>setSelS(r)}/>
    </div>}

    {tab==="politicas"&&<div style={{flex:1,overflow:"auto",padding:16,display:"flex",flexDirection:"column",gap:16}}>
      <UIBanner tone="info" title="Política por empresa">Cada empresa do grupo pode ter a sua política. Estas regras aplicam-se à empresa ativa.</UIBanner>
      <div className="grid g2">
        <UICard><div style={{fontWeight:600,marginBottom:12}}>Férias</div>
          <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12}}><UIInput label="Dias por ano" defaultValue="22"/><UIInput label="Antecedência mínima" defaultValue="7 dias"/></div>
          <div style={{marginTop:12,display:"flex",flexDirection:"column",gap:10}}>
            <UIToggle label="Permitir acumular para o ano seguinte" defaultChecked/>
            <UIToggle label="Exigir aprovação em cadeia acima de 5 dias"/>
          </div>
        </UICard>
        <UICard><div style={{fontWeight:600,marginBottom:12}}>Feriados e localizações</div>
          <UISelect label="Calendário de feriados" options={["Portugal continental","Madeira","Açores","Emirados Árabes Unidos","Brasil"]}/>
          <div style={{marginTop:12,display:"flex",flexDirection:"column",gap:10}}>
            <UIToggle label="Feriados municipais automáticos" defaultChecked/>
            <UIToggle label="Contar sábados como dia útil"/>
          </div>
        </UICard>
      </div>
      <div className="row">{polGuardou&&<span className="row" style={{gap:8,fontSize:"var(--ui-fs-sm)",color:"var(--ui-success)"}}><I d={["m5 12 4.5 4.5L19 7"]} size={15}/>Política guardada</span>}<div className="spring"/><UIButton onClick={()=>{setPolGuardou(true);setTimeout(()=>setPolGuardou(false),2600);}}>Guardar política</UIButton></div>
    </div>}
  </UICard>

  <UIDrawer open={!!selQ} width={440} onClose={()=>setSelQ(null)}
    header={selQ&&<span className="row" style={{gap:12}}>{AV(selQ.who)}<span><span style={{fontWeight:600,display:"block"}}>{selQ.who}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{selQ.dept}</span></span></span>}
    footer={selQ&&<React.Fragment>
      <UIButton variant="outline" onClick={()=>{decide(selQ,false);setSelQ(null);}}>Recusar</UIButton>
      <div className="spring"/>
      <UIButton variant="ghost" onClick={()=>setSelQ(null)}>Fechar</UIButton>
      <UIButton onClick={()=>{decide(selQ,true);setSelQ(null);}}>Aprovar</UIButton></React.Fragment>}>
    {selQ&&<div style={{display:"flex",flexDirection:"column",gap:22}}>
      <div className="row" style={{gap:8,flexWrap:"wrap"}}>
        <UIPill tone="warning" dot>A aguardar decisão</UIPill>
        <UIPill>{selQ.t}</UIPill>
      </div>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        {[["Datas",selQ.d],["Duração",selQ.days+(selQ.days===1?" dia":" dias")],["Pedido",selQ.when],["Saldo depois",selQ.left!=null?(selQ.left-selQ.days)+" dias":"não aplicável"]].map(([l,v])=>
          <div key={l}><div className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",marginBottom:4}}>{l}</div><div style={{fontWeight:500}}>{v}</div></div>)}
      </div>
      <div className="row" style={{gap:10,padding:"12px 14px",borderRadius:"var(--ui-r-md)",background:"var(--ui-surface-2)",fontSize:"var(--ui-fs-sm)"}}>
        <I d={P.users||P.grid} size={16} c="var(--ui-text-3)"/>
        <span>Sem conflitos: mais ninguém de {selQ.dept} está ausente nessas datas.</span>
      </div>
    </div>}
  </UIDrawer>

  <UIDrawer open={!!selS} width={400} onClose={()=>setSelS(null)}
    header={selS&&<span className="row" style={{gap:12}}>{AV(selS.name)}<span><span style={{fontWeight:600,display:"block"}}>{selS.name}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{selS.dept}</span></span></span>}
    footer={selS&&<React.Fragment><div className="spring"/><UIButton variant="ghost" onClick={()=>setSelS(null)}>Fechar</UIButton></React.Fragment>}>
    {selS&&<div style={{display:"flex",flexDirection:"column",gap:22}}>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        {[["Férias usadas",selS.usados+" de "+selS.total+" dias"],["Disponíveis",(selS.total-selS.usados)+" dias"],["Pedidos pendentes",selS.pend||"nenhum"],["Política","22 dias · ano civil"]].map(([l,v])=>
          <div key={l}><div className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",marginBottom:4}}>{l}</div><div style={{fontWeight:500}}>{v}</div></div>)}
      </div>
      <div>
        <div className="row" style={{marginBottom:6,fontSize:"var(--ui-fs-sm)"}}><span className="muted">Usados este ano</span><div className="spring"/><span style={{fontVariantNumeric:"tabular-nums",fontWeight:600}}>{Math.round(selS.usados/selS.total*100)}%</span></div>
        <div style={{height:6,borderRadius:999,background:"var(--ui-surface-3)",overflow:"hidden"}}><div style={{width:Math.round(selS.usados/selS.total*100)+"%",height:"100%",background:selS.usados/selS.total>0.8?"var(--ui-warning)":"var(--ui-accent)"}}/></div>
      </div>
      {selS.pend>0&&<div className="row" style={{gap:10,padding:"12px 14px",borderRadius:"var(--ui-r-md)",background:"var(--ui-warning-bg)",fontSize:"var(--ui-fs-sm)"}}>
        <I d={P.bell} size={16}/>
        <span>{selS.pend===1?"1 pedido está":selS.pend+" pedidos estão"} na fila de aprovação.</span>
      </div>}
    </div>}
  </UIDrawer>
  </React.Fragment>;
};

// ---------- Definições: todas as secções abrem ----------
const HR_SETTINGS=[
  {id:"aparencia",label:"Aparência",desc:"Tema da interface e densidade",icon:"cog"},
  {id:"conta",label:"Conta",desc:"Perfil, palavra-passe, idioma",icon:"badge"},
  {id:"notificacoes",label:"Notificações",desc:"Email, push, resumos",icon:"bell"},
  {id:"organizacao",label:"Organização",desc:"Empresa, marca, domínios",icon:"building"},
  {id:"integracoes",label:"Integrações",desc:"Calendário, email, SSO",icon:"share"},
  {id:"faturacao",label:"Faturação",desc:"Plano e recibos",icon:"doc"},
];

S.settings=({dark,setDark})=>{
  const [sec,setSec]=React.useState("aparencia");
  const [acao,setAcao]=React.useState(null);
  const [sessoes,setSessoes]=React.useState(false);
  const ok=t=>{setAcao(t);setTimeout(()=>setAcao(null),3200);};
  const [dens,setDens]=React.useState(()=>document.getElementById("app").getAttribute("data-density")||"confortavel");
  const applyDens=v=>{setDens(v);document.getElementById("app").setAttribute("data-density",v==="compacta"?"compact":"");};
  const row=(title,desc,ctrl)=><div className="row" style={{gap:16,padding:"14px 0",borderBottom:"1px solid var(--ui-divider)"}}>
    <div style={{flex:1,minWidth:0}}><div style={{fontWeight:500}}>{title}</div>{desc&&<div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:2}}>{desc}</div>}</div>
    {ctrl}
  </div>;

  return <React.Fragment>
  <Head title="Definições" desc="Preferências pessoais e configuração da organização"/>
  {acao&&<UIBanner tone="success" title="Feito" style={{marginBottom:16}}>{acao}</UIBanner>}
  <div style={{display:"grid",gridTemplateColumns:"minmax(0,240px) minmax(0,1fr)",gap:16,flex:1,minHeight:0,alignItems:"start"}}>
    <UICard style={{padding:8}}>
      {HR_SETTINGS.map(s=><div key={s.id} onClick={()=>setSec(s.id)} className="row" style={{gap:12,cursor:"pointer",padding:"10px 12px",borderRadius:"var(--ui-r-sm)",background:sec===s.id?"var(--ui-surface-2)":"transparent"}}>
        <I d={P[s.icon]||P.cog} size={17} c={sec===s.id?"var(--ui-text)":"var(--ui-text-3)"}/>
        <div style={{minWidth:0}}><div style={{fontWeight:sec===s.id?600:500,fontSize:"var(--ui-fs-sm)"}}>{s.label}</div></div>
      </div>)}
    </UICard>

    <UICard>
      {(()=>{const cur=HR_SETTINGS.find(s=>s.id===sec);return <div style={{marginBottom:8}}>
        <div style={{fontWeight:600,fontSize:"var(--ui-fs-h3)"}}>{cur.label}</div>
        <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:2}}>{cur.desc}.</div>
      </div>;})()}

      {sec==="aparencia"&&<div>
        {row("Tema","Claro, escuro ou conforme o sistema",
          <div className="row" style={{gap:6}}>{[["Claro",false],["Escuro",true]].map(([l,v])=>
            <span key={l} onClick={()=>setDark(v)} style={{cursor:"pointer",padding:"8px 16px",borderRadius:999,fontSize:"var(--ui-fs-sm)",fontWeight:500,background:dark===v?"var(--ui-text)":"var(--ui-surface)",color:dark===v?"var(--ui-surface)":"var(--ui-text-2)",border:"1px solid "+(dark===v?"transparent":"var(--ui-border)"),transition:"background var(--ui-dur) var(--ui-ease)"}}>{l}</span>)}</div>)}
        {row("Densidade","Espaçamento das listas e tabelas",
          <div className="row" style={{gap:6}}>{[["confortavel","Confortável"],["compacta","Compacta"]].map(([k,l])=>
            <span key={k} onClick={()=>applyDens(k)} style={{cursor:"pointer",padding:"8px 16px",borderRadius:999,fontSize:"var(--ui-fs-sm)",fontWeight:500,background:dens===k?"var(--ui-text)":"var(--ui-surface)",color:dens===k?"var(--ui-surface)":"var(--ui-text-2)",border:"1px solid "+(dens===k?"transparent":"var(--ui-border)"),transition:"background var(--ui-dur) var(--ui-ease)"}}>{l}</span>)}</div>)}
        {row("Menu condensado por omissão","Começa com a barra lateral em ícones",<UIToggle/>)}
      </div>}

      {sec==="conta"&&<div>
        <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16,padding:"14px 0"}}>
          <UIInput label="Nome" defaultValue="Hugo Montenegro"/>
          <UIInput label="Email de trabalho" defaultValue="hugo@xcope.ai"/>
          <UISelect label="Idioma" options={["Português (Portugal)","English","Español"]}/>
          <UISelect label="Fuso horário" options={["Europa/Lisboa (GMT+1)","Europa/Madrid","Ásia/Dubai"]}/>
        </div>
        {row("Palavra-passe","Alterada há 3 meses",<UIButton size="sm" variant="outline" onClick={()=>ok("Enviámos um link de alteração para o teu email.")}>Alterar</UIButton>)}
        {row("Autenticação em dois passos","Recomendado para contas com acesso a dados de pessoas",<UIToggle defaultChecked/>)}
        {row("Sessões ativas","2 dispositivos",<UIButton size="sm" variant="ghost" onClick={()=>setSessoes(true)}>Ver sessões</UIButton>)}
        <div className="row" style={{marginTop:16}}><div className="spring"/><UIButton onClick={()=>ok("Alterações da conta guardadas.")}>Guardar alterações</UIButton></div>
      </div>}

      {sec==="notificacoes"&&<div>
        <div style={{display:"grid",gridTemplateColumns:"minmax(0,1fr) 92px 92px",gap:12,padding:"10px 0",borderBottom:"1px solid var(--ui-divider)"}}>
          <span/>{["Email","Push"].map(h=><span key={h} className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,textTransform:"uppercase",letterSpacing:"0.06em",textAlign:"center"}}>{h}</span>)}
        </div>
        {[["Pedidos a aguardar a minha aprovação",true,true],["Menções no chat",true,true],["Respostas a mensagens",true,false],["Documentos por assinar",true,true],["Inquéritos e avaliações",true,false],["Resumo diário",false,false]].map(([l,e,p])=>
          <div key={l} style={{display:"grid",gridTemplateColumns:"minmax(0,1fr) 92px 92px",gap:12,alignItems:"center",padding:"12px 0",borderBottom:"1px solid var(--ui-divider)"}}>
            <span style={{fontSize:"var(--ui-fs-body)"}}>{l}</span>
            <span style={{display:"flex",justifyContent:"center"}}><UIToggle defaultChecked={e}/></span>
            <span style={{display:"flex",justifyContent:"center"}}><UIToggle defaultChecked={p}/></span>
          </div>)}
        {row("Horário sem notificações","Fora do horário de trabalho",<UIInput style={{width:150}} defaultValue="19:00 - 09:00"/>)}
      </div>}

      {sec==="organizacao"&&<div>
        <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16,padding:"14px 0"}}>
          <UIInput label="Nome da empresa" defaultValue="Xcope AI"/>
          <UIInput label="NIPC" defaultValue="509 123 456"/>
          <UIInput label="Domínio de email" defaultValue="xcope.ai"/>
          <UISelect label="País da sede" options={["Portugal","Emirados Árabes Unidos","Brasil","Colômbia","México"]}/>
        </div>
        {row("Logótipo","PNG ou SVG, fundo transparente",<UIButton size="sm" variant="outline" onClick={()=>ok("Escolhe o ficheiro do logótipo no teu computador.")}>Carregar</UIButton>)}
        {row("Cor de marca","Usada nos acentos da interface",<span className="row" style={{gap:8}}><span style={{width:26,height:26,borderRadius:8,background:"#f27101"}}/><UIButton size="sm" variant="ghost" onClick={()=>ok("Seletor de cor de marca aberto.")}>Alterar</UIButton></span>)}
        {row("Semana de trabalho","Dias considerados úteis",<UIInput style={{width:180}} defaultValue="Segunda a sexta"/>)}
        <div className="row" style={{marginTop:16}}><div className="spring"/><UIButton onClick={()=>ok("Dados da empresa guardados.")}>Guardar</UIButton></div>
      </div>}

      {sec==="integracoes"&&<div>
        {[["Google Workspace","Calendário e email sincronizados","Ligado","success"],["Microsoft 365","Calendário, Teams e SSO","Ligado","success"],["SSO / SAML","Autenticação única com o teu IdP","Configurar","neutral"],["Processamento salarial","Exportação para o software de salários","Não ligado","neutral"],["Contabilidade","Envio de despesas aprovadas","Não ligado","neutral"]].map(([n,d,s,tone])=>
          <div key={n} className="row" style={{gap:16,padding:"14px 0",borderBottom:"1px solid var(--ui-divider)"}}>
            <span style={{width:38,height:38,borderRadius:"var(--ui-r-sm)",background:"var(--ui-surface-2)",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0}}><I d={P.share} size={17} c="var(--ui-text-3)"/></span>
            <div style={{flex:1,minWidth:0}}><div style={{fontWeight:500}}>{n}</div><div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:2}}>{d}</div></div>
            {s==="Ligado"?<UIPill tone={tone} dot>{s}</UIPill>:<UIButton size="sm" variant="outline" onClick={()=>ok(n+": ligação iniciada. Segue os passos na janela do fornecedor.")}>{s==="Configurar"?"Configurar":"Ligar"}</UIButton>}
          </div>)}
      </div>}

      {sec==="faturacao"&&<div>
        <div className="row" style={{gap:16,padding:"16px 16px",borderRadius:"var(--ui-r-md)",background:"var(--ui-surface-2)",margin:"14px 0"}}>
          <div style={{flex:1}}><div style={{fontWeight:600,fontSize:"var(--ui-fs-h3)"}}>Plano Empresa</div><div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:2}}>62 colaboradores ativos · renova a 1 de agosto</div></div>
          <UIButton size="sm" variant="outline" onClick={()=>ok("Comparação de planos aberta.")}>Mudar de plano</UIButton>
        </div>
        {row("Método de pagamento","Débito direto · IBAN terminado em 4471",<UIButton size="sm" variant="ghost" onClick={()=>ok("Alteração de método de pagamento iniciada.")}>Alterar</UIButton>)}
        {row("Email de faturação","financeiro@xcope.ai",<UIButton size="sm" variant="ghost" onClick={()=>ok("Email de faturação atualizado.")}>Alterar</UIButton>)}
        <div style={{marginTop:18}}>
          <div style={{fontWeight:600,fontSize:"var(--ui-fs-sm)",marginBottom:8}}>Recibos</div>
          {[["Julho 2026","1 240,00 €"],["Junho 2026","1 240,00 €"],["Maio 2026","1 180,00 €"]].map(([m,v])=>
            <div key={m} className="listrow" style={{gap:12}}>
              <I d={P.doc} size={16} c="var(--ui-text-3)"/>
              <span style={{flex:1,fontSize:"var(--ui-fs-sm)"}}>{m}</span>
              <span style={{fontSize:"var(--ui-fs-sm)",fontVariantNumeric:"tabular-nums"}}>{v}</span>
              <UIButton size="sm" variant="ghost" onClick={()=>ok("Recibo de "+m+" descarregado.")}>Descarregar</UIButton>
            </div>)}
        </div>
      </div>}
    </UICard>
  </div>

  <UIModal open={sessoes} onClose={()=>setSessoes(false)} title="Sessões ativas" width={480}
    footer={<div className="row" style={{gap:8}}><div className="spring"/><UIButton variant="ghost" onClick={()=>setSessoes(false)}>Fechar</UIButton><UIButton variant="destructive" onClick={()=>{setSessoes(false);ok("Todas as outras sessões foram terminadas.");}}>Terminar as outras</UIButton></div>}>
    {[["MacBook Pro · Porto","Chrome · esta sessão",true],["iPhone 15 · Porto","App XCOPE · há 2 h",false]].map(([d,m,atual])=>
      <div key={d} className="row" style={{gap:12,padding:"12px 0",borderBottom:"1px solid var(--ui-divider)"}}>
        <div style={{flex:1,minWidth:0}}>
          <div className="row" style={{gap:8}}><span style={{fontWeight:600,fontSize:"var(--ui-fs-sm)"}}>{d}</span>{atual&&<UIPill tone="success" dot>Atual</UIPill>}</div>
          <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:2}}>{m}</div>
        </div>
        {!atual&&<UIButton size="sm" variant="outline" onClick={()=>{setSessoes(false);ok("Sessão em "+d.split(" · ")[0]+" terminada.");}}>Terminar</UIButton>}
      </div>)}
  </UIModal>
  </React.Fragment>;
};

S["admin-employees"]=()=>{const {scope,companies}=useCtx();const cs=companies.filter(c=>scope.includes(c.id));const multi=cs.length>1;
  const [novo,setNovo]=React.useState(false);
  const [rows,setRows]=React.useState(()=>EMPLOYEES.map((e,i)=>({...e,co:cs[i%cs.length]||companies[0]})));
  const [ficha,setFicha]=React.useState(null);
  const [aviso,setAviso]=React.useState(null);
  React.useEffect(()=>{if(!aviso)return;const t=setTimeout(()=>setAviso(null),3200);return ()=>clearTimeout(t);},[aviso]);
  const [f,setF]=React.useState({nome:"",email:"",funcao:"",dept:"Engenharia",inicio:""});
  const [q,setQ]=React.useState("");const [dept,setDept]=React.useState("all");const [est,setEst]=React.useState("all");const [vista,setVista]=React.useState("grelha");
  const criar=()=>{if(!f.nome)return;setRows(r=>[{name:f.nome,co:cs[0],role:f.funcao||"A definir",dept:f.dept,state:"Ativo",since:2026},...r]);setF({nome:"",email:"",funcao:"",dept:"Engenharia",inicio:""});setNovo(false);};
  const depts=[...new Set(rows.map(r=>r.dept))];
  const vis=rows.filter(r=>(q===""||(r.name+" "+r.role+" "+r.dept).toLowerCase().includes(q.toLowerCase()))&&(dept==="all"||r.dept===dept)&&(est==="all"||r.state===est));
  return <React.Fragment>
  <Head scoped title="Pessoas" desc={rows.length+" pessoas · "+cs.length+(cs.length>1?" empresas":" empresa")} actions={<UIButton icon={<I d={P.plus} size={16}/>} onClick={()=>setNovo(true)}>Adicionar</UIButton>}/>
  {aviso&&<UIBanner tone="success" title="Feito" style={{marginBottom:16}}>{aviso}</UIBanner>}

  <UICard style={{padding:0,overflow:"hidden",flex:1,minHeight:0,display:"flex",flexDirection:"column"}}>
    <div className="row" style={{padding:"12px 16px",borderBottom:"1px solid var(--ui-divider)",gap:16,flexWrap:"wrap"}}>
      <div style={{width:220}}><UIInput leading={<I d={P.search} size={15}/>} placeholder="Pesquisar pessoas…" value={q} onChange={e=>setQ(e.target.value)}/></div>
      <UIToggleGroup spacing={0} value={dept} onChange={v=>setDept(v||"all")} items={[["all","Todos"],...depts.map(d=>[d,d])].map(([value,label])=>({value,label}))}/>
      <span style={{width:1,height:20,background:"var(--ui-border)"}}/>
      <div className="row" style={{gap:8}}>
        <span className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase"}}>Estado</span>
        <UIToggleGroup spacing={0} value={est} onChange={v=>setEst(v||"all")} items={[["all","Todos"],["Ativo","Ativos"],["Ausente","Ausentes"]].map(([value,label])=>({value,label}))}/>
      </div>
      <div className="spring"/>
      <span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{vis.length} de {rows.length}</span>
      <div className="row" style={{gap:4}}>
        {[["grelha",["M4 4h7v7H4z","M13 4h7v7h-7z","M4 13h7v7H4z","M13 13h7v7h-7z"]],["lista",["M4 6h16","M4 12h16","M4 18h16"]]].map(([k,d])=>
          <span key={k} onClick={()=>setVista(k)} title={k==="grelha"?"Grelha":"Lista"} style={{cursor:"pointer",width:32,height:32,borderRadius:"var(--ui-r-sm)",display:"flex",alignItems:"center",justifyContent:"center",background:vista===k?"var(--ui-surface-2)":"transparent",color:vista===k?"var(--ui-text)":"var(--ui-text-3)"}}><I d={d} size={16}/></span>)}
      </div>
    </div>

    {vista==="grelha"
      ? <div style={{flex:1,minHeight:0,overflow:"auto",padding:16}}>
          {vis.length?<div style={{display:"grid",gridTemplateColumns:"repeat(auto-fill,minmax(210px,1fr))",gap:12}}>
            {vis.map(r=><UICard key={r.name} elevation={0} onClick={()=>setFicha(r)} style={{cursor:"pointer",padding:20,textAlign:"center"}}>
              <div style={{display:"flex",justifyContent:"center",marginBottom:12}}><UIAvatar name={r.name} size="lg" status={r.state==="Ativo"?"online":"away"}/></div>
              <div style={{fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}>{r.name}</div>
              <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}>{r.role}</div>
              <div style={{marginTop:12,display:"flex",justifyContent:"center",gap:8,flexWrap:"wrap"}}>
                <UIPill>{r.dept}</UIPill>
                {multi&&<UIPill>{r.co.short}</UIPill>}
              </div>
            </UICard>)}
          </div>:<UIEmptyState title="Ninguém encontrado" description="Ajusta a pesquisa ou os filtros." action={<UIButton size="sm" variant="outline" onClick={()=>{setQ("");setDept("all");setEst("all");}}>Limpar filtros</UIButton>}/>}
        </div>
      : <div style={{flex:1,minHeight:0,overflow:"auto",padding:"12px 16px 16px"}}>
          {UIDataTable
            ? <UIDataTable rows={vis} getRowId={r=>r.name} selectable pageSize={12} onRowClick={r=>setFicha(r)}
                bulkActions={<React.Fragment><UIButton size="sm" variant="outline" onClick={()=>setAviso("Lista exportada em CSV.")}>Exportar</UIButton><UIButton size="sm" variant="outline" onClick={()=>setAviso("Mensagem enviada às pessoas selecionadas.")}>Enviar mensagem</UIButton></React.Fragment>}
                rowActions={r=>UIMenu?<UIMenu align="right" trigger={<UIButton size="icon-xs" variant="ghost" aria-label={"Ações de "+r.name}><I d={["M12 5h.01","M12 12h.01","M12 19h.01"]} size={15}/></UIButton>}
                  items={[{label:"Abrir ficha",onSelect:()=>setFicha(r)},{label:"Ver documentos"},{separator:true},{label:"Desativar",tone:"destructive"}]}/>:null}
                empty={<UIEmptyState compact title="Ninguém encontrado" description="Ajusta a pesquisa ou os filtros." action={<UIButton size="sm" variant="outline" onClick={()=>{setQ("");setDept("all");setEst("all");}}>Limpar filtros</UIButton>}/>}
                columns={[
                  {key:"name",label:"Pessoa",hideable:false,render:v=><span className="row" style={{gap:12,fontWeight:600}}>{AV(v)} {v}</span>},
                  ...(multi?[{key:"co",label:"Empresa",render:v=><span className="row" style={{gap:8}}><span style={{width:6,height:18,borderRadius:3,background:v.color,flexShrink:0}}></span><span style={{fontWeight:500}}>{v.short}</span></span>}]:[]),
                  {key:"role",label:"Função"},{key:"dept",label:"Departamento"},
                  {key:"state",label:"Estado",render:v=><UIPill tone={v==="Ativo"?"success":"warning"} dot>{v}</UIPill>},
                  {key:"since",label:"Desde",align:"right"}]}/>
            : <UIDataTable columns={[
                {key:"name",label:"Pessoa",render:v=><span className="row" style={{gap:12,fontWeight:600}}>{AV(v)} {v}</span>},
                {key:"role",label:"Função"},{key:"dept",label:"Departamento"},
                {key:"state",label:"Estado",render:v=><UIPill tone={v==="Ativo"?"success":"warning"} dot>{v}</UIPill>},
                {key:"since",label:"Desde",align:"right"}]} rows={vis} onRowClick={r=>setFicha(r)}/>}
        </div>}
  </UICard>

  <UIModal open={novo} onClose={()=>setNovo(false)} title="Adicionar colaborador" width={560}
    footer={<div className="row" style={{gap:8}}><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Cria a conta e envia o convite</span><div className="spring"/><UIButton variant="ghost" onClick={()=>setNovo(false)}>Cancelar</UIButton><UIButton onClick={criar}>Criar e convidar</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        <UIInput label="Nome completo" placeholder="Nome e apelido" value={f.nome} onChange={e=>setF({...f,nome:e.target.value})}/>
        <UIInput label="Email de trabalho" placeholder="nome@xcope.ai" value={f.email} onChange={e=>setF({...f,email:e.target.value})}/>
        <UIInput label="Função" placeholder="Ex.: Engenheiro de dados" value={f.funcao} onChange={e=>setF({...f,funcao:e.target.value})}/>
        <UISelect label="Departamento" value={f.dept} onChange={e=>setF({...f,dept:e.target.value})} options={["Engenharia","Produto","Pessoas","Comercial","Dados"]}/>
        <UIInput label="Data de admissão" placeholder="dd/mm/aaaa" value={f.inicio} onChange={e=>setF({...f,inicio:e.target.value})}/>
        <UISelect label="Tipo de contrato" options={["Sem termo","Termo certo","Estágio","Prestação de serviços"]}/>
      </div>
      <UISelect label="Função de acesso" options={["Trabalhador","Diretor intermédio","CEO","Administrador"]}/>
      <UIToggle label="Iniciar checklist de onboarding" defaultChecked/>
    </div>
  </UIModal>

  <UIModal open={!!ficha} onClose={()=>setFicha(null)} title={ficha?ficha.name:""} width={520}
    footer={<div className="row" style={{gap:8}}><div className="spring"/><UIButton variant="ghost" onClick={()=>setFicha(null)}>Fechar</UIButton><UIButton onClick={()=>{const n=ficha.name;setFicha(null);setAviso("Ficha completa de "+n+" aberta.");}}>Abrir ficha completa</UIButton></div>}>
    {ficha&&<div style={{display:"grid",gridTemplateColumns:"140px minmax(0,1fr)",gap:"12px 16px",fontSize:"var(--ui-fs-sm)",alignItems:"center"}}>
      <span className="muted">Função</span><span style={{fontWeight:500}}>{ficha.role}</span>
      <span className="muted">Departamento</span><span>{ficha.dept}</span>
      <span className="muted">Empresa</span><span>{ficha.co&&ficha.co.name}</span>
      <span className="muted">Estado</span><span><UIPill tone={ficha.state==="Ativo"?"success":"warning"} dot>{ficha.state}</UIPill></span>
      <span className="muted">Desde</span><span>{ficha.since}</span>
    </div>}
  </UIModal>
  </React.Fragment>;
};

S["admin-teams"]=()=>{
  const [teams,setTeams]=React.useState([["Engenharia",42],["Produto",18],["Pessoas",9],["Comercial",23],["Dados",7]]);
  const [novo,setNovo]=React.useState(false);const [nome,setNome]=React.useState("");
  const criar=()=>{if(!nome.trim())return;setTeams(t=>[...t,[nome.trim(),0]]);setNome("");setNovo(false);};
  return <React.Fragment>
  <Head title="Equipas" desc={teams.length+" equipas"} actions={<UIButton icon={<I d={P.plus} size={16}/>} onClick={()=>setNovo(true)}>Nova equipa</UIButton>}/>
  <div className="grid g3">{teams.map(([n,c])=><UICard key={n}><div style={{fontWeight:600,fontSize:"var(--ui-fs-h3)"}}>{n}</div>
    <div className="muted" style={{fontSize:"var(--ui-fs-sm)",margin:"4px 0 12px"}}>{c} {c===1?"pessoa":"pessoas"}</div>
    {c>0?<UIAvatarGroup size="sm" max={5} avatars={PEOPLE.map(name=>({name}))}/>:<span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Sem membros ainda</span>}</UICard>)}</div>
  <UIModal open={novo} onClose={()=>setNovo(false)} title="Nova equipa" width={480}
    footer={<div className="row" style={{gap:8}}><div className="spring"/><UIButton variant="ghost" onClick={()=>setNovo(false)}>Cancelar</UIButton><UIButton onClick={criar}>Criar equipa</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <UIInput label="Nome da equipa" placeholder="Ex.: Suporte" value={nome} onChange={e=>setNome(e.target.value)}/>
      <UISelect label="Responsável" options={PEOPLE}/>
      <UISelect label="Departamento" options={["Engenharia","Produto","Pessoas","Comercial","Dados"]}/>
    </div>
  </UIModal>
  </React.Fragment>;
};

const HR_ROLES=[
  {id:"trab",r:"Trabalhador",u:227,p:"Self-service"},
  {id:"dint",r:"Diretor intermédio",u:12,p:"Equipa própria"},
  {id:"drh",r:"CEO",u:5,p:"Pessoas, ausências, docs"},
  {id:"admin",r:"Administrador",u:3,p:"Acesso total",locked:true},
];
const HR_PERM_GROUPS=[
  {g:"Próprio",items:[
    ["ver-proprio","Ver a própria informação",["trab","dint","drh","admin"]],
    ["pedir-aus","Pedir ausências",["trab","dint","drh","admin"]],
    ["submeter-desp","Submeter despesas",["trab","dint","drh","admin"]],
  ]},
  {g:"Equipa",items:[
    ["aprovar-aus","Aprovar ausências da equipa",["dint","drh","admin"]],
    ["aprovar-desp","Aprovar despesas da equipa",["dint","drh","admin"]],
    ["ver-ponto","Ver registos de ponto da equipa",["dint","drh","admin"]],
    ["avaliar","Conduzir avaliações",["dint","drh","admin"]],
  ]},
  {g:"Empresa",items:[
    ["ver-todos","Ver dados de toda a empresa",["drh","admin"]],
    ["editar-contratos","Editar contratos e salários",["drh","admin"]],
    ["publicar-docs","Publicar documentos da empresa",["drh","admin"]],
    ["recrutar","Gerir recrutamento",["drh","admin"]],
  ]},
  {g:"Administração",items:[
    ["gerir-acessos","Gerir funções e acessos",["admin"]],
    ["config-org","Configurar a organização",["admin"]],
    ["gerir-empresas","Gerir empresas do grupo",["admin"]],
    ["ver-auditoria","Ver registo de auditoria",["admin"]],
  ]},
];

S["admin-roles"]=()=>{
  const [roles,setRoles]=React.useState(HR_ROLES);
  const [perms,setPerms]=React.useState(()=>{const m={};HR_PERM_GROUPS.forEach(g=>g.items.forEach(([id,,rs])=>rs.forEach(r=>{m[id+":"+r]=true;})));return m;});
  const [novo,setNovo]=React.useState(false);const [nome,setNome]=React.useState("");const [base,setBase]=React.useState("trab");
  const [tab,setTab]=React.useState("matriz");
  const [edit,setEdit]=React.useState(false);
  const [guardado,setGuardado]=React.useState(false);
  const [sel,setSel]=React.useState(null);

  const on=(pid,rid)=>!!perms[pid+":"+rid];
  const toggle=(pid,rid)=>{if(!edit)return;const role=roles.find(r=>r.id===rid);if(role&&role.locked)return;
    setPerms(p=>({...p,[pid+":"+rid]:!p[pid+":"+rid]}));};
  const countFor=rid=>HR_PERM_GROUPS.reduce((n,g)=>n+g.items.filter(([id])=>on(id,rid)).length,0);
  const totalPerms=HR_PERM_GROUPS.reduce((n,g)=>n+g.items.length,0);
  const criar=()=>{if(!nome.trim())return;const id="r"+Date.now();
    setRoles(r=>[...r,{id,r:nome.trim(),u:0,p:"Copiada de "+roles.find(x=>x.id===base).r}]);
    setPerms(p=>{const next={...p};HR_PERM_GROUPS.forEach(g=>g.items.forEach(([pid])=>{if(p[pid+":"+base])next[pid+":"+id]=true;}));return next;});
    setNome("");setNovo(false);};
  const cur=sel?roles.find(r=>r.id===sel):null;

  const cols="minmax(220px,1.6fr) repeat("+roles.length+",minmax(96px,1fr))";
  const Chk=({yes,locked,onClick})=><span onClick={onClick}
    style={{width:18,height:18,borderRadius:6,display:"grid",placeItems:"center",margin:"0 auto",
      border:"1.5px solid "+(yes?(locked?"var(--ui-border-2)":"var(--ui-data)"):"var(--ui-border-2)"),
      background:yes?(locked?"var(--ui-surface-3)":"var(--ui-data)"):"transparent",
      color:yes?(locked?"var(--ui-text-3)":"#fff"):"transparent",
      cursor:edit&&!locked?"pointer":"default",opacity:edit||yes?1:0.5,
      transition:"background var(--ui-dur) var(--ui-ease),border-color var(--ui-dur) var(--ui-ease)"}}>
    {yes&&<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round"><path d="m5 12 4.5 4.5L19 7"/></svg>}
  </span>;

  return <React.Fragment>
  <Head scoped title="Funções e permissões" desc={roles.length+" funções · "+totalPerms+" permissões por função"}
    actions={<div className="row" style={{gap:8}}>
      <UIButton variant={edit?"primary":"secondary"} onClick={()=>{if(edit){setGuardado(true);setTimeout(()=>setGuardado(false),3200);}setEdit(!edit);}}>{edit?"Guardar matriz":"Editar matriz"}</UIButton>
      <UIButton icon={<I d={P.plus} size={16}/>} onClick={()=>setNovo(true)}>Nova função</UIButton>
    </div>}/>

  {guardado&&<UIBanner tone="success" title="Matriz guardada" style={{marginBottom:16}}>As alterações de acesso entram em vigor no próximo início de sessão de cada pessoa.</UIBanner>}
  {edit&&!guardado&&<UIBanner tone="info" title="A editar a matriz" style={{marginBottom:16}}>Clica nas células para dar ou retirar permissões. O Administrador não pode ser alterado, para não te trancares fora.</UIBanner>}

  <UICard style={{padding:0,overflow:"hidden",flex:1,minHeight:0,display:"flex",flexDirection:"column"}}>
    <div className="row" style={{padding:"12px 16px",borderBottom:"1px solid var(--ui-divider)"}}>
      <UITabs value={tab} onChange={setTab} items={[{value:"matriz",label:"Matriz de permissões"},{value:"lista",label:"Funções",count:roles.length}]}/>
    </div>

    {tab==="matriz"&&<div style={{flex:1,minHeight:0,overflow:"auto"}}>
      <div style={{display:"grid",gridTemplateColumns:cols,position:"sticky",top:0,zIndex:1,background:"var(--ui-surface)",borderBottom:"1px solid var(--ui-border)"}}>
        <div style={{padding:"12px 16px",fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--ui-text-3)"}}>Permissão</div>
        {roles.map(r=><div key={r.id} style={{padding:"12px 8px",textAlign:"center"}}>
          <div style={{fontSize:"var(--ui-fs-sm)",fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}>{r.r}</div>
          <div className="muted" style={{fontSize:"var(--ui-fs-xs)",marginTop:2,fontVariantNumeric:"tabular-nums"}}>{countFor(r.id)}/{totalPerms}</div>
        </div>)}
      </div>
      {HR_PERM_GROUPS.map(g=><div key={g.g}>
        <div style={{padding:"10px 16px",background:"var(--ui-surface-2)",borderBottom:"1px solid var(--ui-divider)",fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--ui-text-3)"}}>{g.g}</div>
        {g.items.map(([pid,label])=><div key={pid} style={{display:"grid",gridTemplateColumns:cols,alignItems:"center",borderBottom:"1px solid var(--ui-divider)"}}>
          <div style={{padding:"12px 16px",fontSize:"var(--ui-fs-sm)"}}>{label}</div>
          {roles.map(r=><div key={r.id} style={{padding:"12px 8px"}}>
            <Chk yes={on(pid,r.id)} locked={r.locked} onClick={()=>toggle(pid,r.id)}/>
          </div>)}
        </div>)}
      </div>)}
    </div>}

    {tab==="lista"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:"12px 16px 16px"}}>
      <UIDataTable rows={roles} rowKey="id" pageSize={10} onRowClick={r=>setSel(r.id)}
        columns={[
          {key:"r",label:"Função",sortable:true,render:(v,r)=><span className="row" style={{gap:8}}><span style={{fontWeight:600}}>{v}</span>{r.locked&&<UIPill>Protegida</UIPill>}</span>},
          {key:"p",label:"Âmbito"},
          {key:"u",label:"Pessoas",sortable:true,align:"right",render:v=><span style={{fontVariantNumeric:"tabular-nums"}}>{v}</span>},
          {key:"perms",label:"Permissões",align:"right",render:(v,r)=><span className="row" style={{gap:12,justifyContent:"flex-end"}}>
            <UIProgress value={countFor(r.id)} max={totalPerms} size="sm" style={{width:80}}/>
            <span style={{fontSize:"var(--ui-fs-sm)",fontVariantNumeric:"tabular-nums",width:44,textAlign:"right"}}>{countFor(r.id)}/{totalPerms}</span></span>},
        ]}/>
    </div>}
  </UICard>

  <UIDrawer open={!!cur} width={420} onClose={()=>setSel(null)}
    header={cur&&<span className="row" style={{gap:10}}><span style={{fontWeight:600}}>{cur.r}</span>{cur.locked&&<UIPill>Protegida</UIPill>}</span>}
    footer={cur&&<React.Fragment><div className="spring"/><UIButton variant="ghost" onClick={()=>setSel(null)}>Fechar</UIButton>
      {!cur.locked&&<UIButton onClick={()=>{setSel(null);setTab("matriz");setEdit(true);}}>Editar permissões</UIButton>}</React.Fragment>}>
    {cur&&<div style={{display:"flex",flexDirection:"column",gap:24}}>
      <div style={{display:"grid",gridTemplateColumns:"116px minmax(0,1fr)",gap:"12px 16px",alignItems:"center",fontSize:"var(--ui-fs-sm)"}}>
        <span className="muted">Âmbito</span><span>{cur.p}</span>
        <span className="muted">Pessoas</span><span style={{fontVariantNumeric:"tabular-nums"}}>{cur.u}</span>
        <span className="muted">Permissões</span><span style={{fontVariantNumeric:"tabular-nums"}}>{countFor(cur.id)} de {totalPerms}</span>
      </div>
      {HR_PERM_GROUPS.map(g=>{const yes=g.items.filter(([id])=>on(id,cur.id));
        return <div key={g.g}>
          <div className="row" style={{marginBottom:8}}><span style={{fontWeight:600,fontSize:"var(--ui-fs-sm)"}}>{g.g}</span><div className="spring"/>
            <span className="muted" style={{fontSize:"var(--ui-fs-sm)",fontVariantNumeric:"tabular-nums"}}>{yes.length}/{g.items.length}</span></div>
          {g.items.map(([id,label])=><div key={id} className="row" style={{gap:10,padding:"7px 0",fontSize:"var(--ui-fs-sm)"}}>
            <I d={on(id,cur.id)?["m5 12 4.5 4.5L19 7"]:["M18 6 6 18","m6 6 12 12"]} size={14} c={on(id,cur.id)?"var(--ui-success)":"var(--ui-text-3)"}/>
            <span style={{color:on(id,cur.id)?"var(--ui-text)":"var(--ui-text-3)"}}>{label}</span>
          </div>)}
        </div>;})}
    </div>}
  </UIDrawer>

  <UIModal open={novo} onClose={()=>setNovo(false)} title="Nova função" width={480}
    footer={<div className="row" style={{gap:8}}><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Copia as permissões da função base</span><div className="spring"/><UIButton variant="ghost" onClick={()=>setNovo(false)}>Cancelar</UIButton><UIButton onClick={criar}>Criar função</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <UIInput label="Nome da função" placeholder="Ex.: Diretor de operações" value={nome} onChange={e=>setNome(e.target.value)}/>
      <UISelect label="Copiar permissões de" value={base} onChange={e=>setBase(e.target.value)} options={roles.map(r=>({value:r.id,label:r.r}))}/>
      <div className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Depois de criar, ajusta as permissões na matriz.</div>
    </div>
  </UIModal>
  </React.Fragment>;
};

S.schedules=()=>{
  const [shifts,setShifts]=React.useState([["Turno manhã","08:00-16:00","Engenharia","Ao vivo","danger"],["Turno tarde","16:00-00:00","Engenharia","8 pessoas","neutral"],["Turno noite","00:00-08:00","Suporte","2 pessoas","neutral"]]);
  const [novo,setNovo]=React.useState(false);const [f,setF]=React.useState({n:"",ini:"",fim:"",eq:"Engenharia"});
  const criar=()=>{if(!f.n.trim())return;setShifts(s=>[...s,[f.n.trim(),(f.ini||"00:00")+"-"+(f.fim||"08:00"),f.eq,"0 pessoas","neutral"]]);setF({n:"",ini:"",fim:"",eq:"Engenharia"});setNovo(false);};
  return <React.Fragment>
  <Head title="Horários" desc="Turnos e escalas · 24 jul" actions={<UIButton icon={<I d={P.plus} size={16}/>} onClick={()=>setNovo(true)}>Novo turno</UIButton>}/>
  <div style={{display:"flex",flexDirection:"column",gap:12}}>{shifts.map(([n,h,d,tag,tone])=><UICard key={n}><div className="row">
    <div style={{width:4,height:44,borderRadius:4,background:tone==="danger"?"var(--ui-danger)":"var(--ui-accent)"}}/>
    <div style={{flex:1,minWidth:0}}><div style={{fontWeight:600}}>{n}</div><div className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{h} · {d}</div></div>
    <UIAvatarGroup size="sm" max={4} avatars={PEOPLE.slice(0,5).map(name=>({name}))}/>
    <UIPill tone={tone} dot={tone==="danger"}>{tag}</UIPill></div></UICard>)}</div>
  <UIModal open={novo} onClose={()=>setNovo(false)} title="Novo turno" width={520}
    footer={<div className="row" style={{gap:8}}><div className="spring"/><UIButton variant="ghost" onClick={()=>setNovo(false)}>Cancelar</UIButton><UIButton onClick={criar}>Criar turno</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <UIInput label="Nome do turno" placeholder="Ex.: Turno fim de semana" value={f.n} onChange={e=>setF({...f,n:e.target.value})}/>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:16}}>
        <UIInput label="Início" placeholder="08:00" value={f.ini} onChange={e=>setF({...f,ini:e.target.value})}/>
        <UIInput label="Fim" placeholder="16:00" value={f.fim} onChange={e=>setF({...f,fim:e.target.value})}/>
        <UISelect label="Equipa" value={f.eq} onChange={e=>setF({...f,eq:e.target.value})} options={["Engenharia","Produto","Pessoas","Comercial","Suporte"]}/>
      </div>
      <UIInput label="Dias" placeholder="Segunda a sexta"/>
    </div>
  </UIModal>
  </React.Fragment>;
};
