> ## Documentation Index
> Fetch the complete documentation index at: https://docs.box.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Page d'accueil

export const SectionBackground = ({color, darkColor, txtColor, children}) => {
  return <div style={{
    "--bg-light": color,
    "--bg-dark": darkColor || color,
    color: txtColor
  }} className="px-10 py-16 bg-[var(--bg-light)] dark:bg-[var(--bg-dark)]">
      <div className="mx-auto max-w-[1433px]">{children}</div>
    </div>;
};

export const LinkGroup = ({icon, title, children}) => {
  return <div className="flex flex-col gap-4">
      <div className="flex items-center gap-4">
        {icon && <div className="link-group-icon-box flex shrink-0 items-center justify-center rounded-xl border border-[#E6E7EB] bg-white p-[10px] dark:border-blue-400/55 dark:bg-zinc-950">
            <Icon icon={icon} size={40} />
          </div>}
        {title && <h3 className="text-lg font-semibold text-gray-900 dark:text-white m-0">
            {title}
          </h3>}
      </div>
      <div className="flex flex-col link-group-css">{children}</div>
    </div>;
};

export const LinkGroupContainer = ({children, cols = 2, title}) => {
  const [seeAllLink, setSeeAllLink] = React.useState(null);
  const getContext = () => {
    const languagePrefixes = ["en", "ja", "fr"];
    const segments = window.location.pathname.split("/").filter(Boolean);
    const firstSegment = (segments[0] || "").toLowerCase();
    const hasLanguagePrefix = languagePrefixes.includes(firstSegment);
    const lang = hasLanguagePrefix ? firstSegment : "en";
    const currentSection = hasLanguagePrefix ? segments[1] : segments[0];
    const sectionRoot = currentSection ? hasLanguagePrefix ? `/${lang}/${currentSection}` : `/${currentSection}` : null;
    return {
      lang,
      sectionRoot
    };
  };
  const resolveFirstSectionLink = () => {
    if (typeof document === "undefined" || typeof window === "undefined") return null;
    const {lang, sectionRoot} = getContext();
    if (!sectionRoot) return null;
    const normalizePath = href => {
      if (!href) return null;
      try {
        const path = new URL(href, window.location.origin).pathname;
        return path.length > 1 ? path.replace(/\/+$/, "") : path;
      } catch {
        return null;
      }
    };
    const normalizedSectionRoot = normalizePath(sectionRoot) || sectionRoot;
    const sectionPrefix = `${normalizedSectionRoot}/`;
    const isValidSectionLink = href => !!href && href.startsWith(sectionPrefix) && href !== normalizedSectionRoot && !href.endsWith("/index");
    const findFirstInElement = root => {
      const links = root.querySelectorAll("a[href]");
      for (const link of links) {
        const href = normalizePath(link.getAttribute("href"));
        if (isValidSectionLink(href)) return href;
      }
      return null;
    };
    const sidebarSelectors = ['aside[class*="sidebar"]', 'nav[class*="sidebar"]', "[data-sidebar]", ".mint-sidebar", "#sidebar", "aside nav", "aside", '[class*="navigation"]', "nav"];
    for (const selector of sidebarSelectors) {
      const element = document.querySelector(selector);
      if (!element) continue;
      const linkCount = element.querySelectorAll("a[href]").length;
      if (linkCount < 5) continue;
      const sidebarHref = findFirstInElement(element);
      if (sidebarHref) return {
        href: sidebarHref,
        lang,
        resolvedExact: true
      };
    }
    const fallbackHref = findFirstInElement(document);
    if (fallbackHref) return {
      href: fallbackHref,
      lang,
      resolvedExact: true
    };
    return {
      href: normalizedSectionRoot,
      lang,
      resolvedExact: false
    };
  };
  React.useEffect(() => {
    const assignLink = () => {
      let result = null;
      try {
        result = resolveFirstSectionLink();
      } catch (error) {
        console.error("[LinkGroup] Failed to resolve first section link", error);
        return null;
      }
      if (!result) return null;
      window.__boxDocsFirstSectionLink = result;
      return result;
    };
    const initial = assignLink();
    if (initial?.resolvedExact) return;
    let attempts = 0;
    const interval = setInterval(() => {
      attempts += 1;
      const result = assignLink();
      if (result?.resolvedExact || attempts >= 20) {
        clearInterval(interval);
      }
    }, 250);
    return () => clearInterval(interval);
  }, []);
  return <>
      <style dangerouslySetInnerHTML={{
    __html: `
.link-group-css a {
  display: flex !important;
  justify-content: space-between !important;
  align-items: center !important;
  min-width: 366px !important;
  min-height: 63px !important;
  background-color: #FFFFFF !important;
  border: 1px solid #F0F1F2 !important;
  border-radius: 20px !important;
  padding-left: 16px !important;
  padding-right: 16px !important;
  text-decoration: none !important;
  color: #111827 !important;
  font-weight: 500 !important;
  transition: all 0.2s ease !important;
  box-shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.1) !important;
  margin-bottom: 12px !important;
  width: 100% !important;
}

.dark .link-group-css a {
  background-color: #000000 !important;
  border: 1px solid rgba(255, 255, 255, 0.2) !important;
  color: white !important;
  box-shadow: none !important;
}

.link-group-css a:hover {
  box-shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.15) !important;
  border-color: #E5E7EB !important;
  transform: none !important;
}

.dark .link-group-css a:hover {
  border-color: rgba(255, 255, 255, 0.35) !important;
  box-shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.3) !important;
}

.link-group-css a::after {
  content: "";
  display: block;
  width: 1.25rem;
  height: 1.25rem;
  flex-shrink: 0;
  background-color: #2563eb;
  -webkit-mask-image: url("https://d3gk2c5xim1je2.cloudfront.net/v7.1.0/light/circle-arrow-right.svg");
  mask-image: url("https://d3gk2c5xim1je2.cloudfront.net/v7.1.0/light/circle-arrow-right.svg");
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-size: contain;
  mask-size: contain;
}

.dark .link-group-css a::after {
  background-color: #2563eb !important;
}

.see-all-link {
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  color: #2563eb !important;
  font-weight: 500 !important;
  text-decoration: none !important;
  transition: all 0.2s ease !important;
  margin-bottom: 24px !important;
}

.see-all-link:hover {
  color: #1d4ed8 !important;
  gap: 12px !important;
}

.dark .see-all-link {
  color: #60a5fa !important;
}

.dark .see-all-link:hover {
  color: #93c5fd !important;
}

.see-all-link svg {
  width: 16px !important;
  height: 16px !important;
  transition: transform 0.2s ease !important;
}

.see-all-link:hover svg {
  transform: translateX(4px) !important;
}

.link-group-icon-box svg {
  color: #374151;
}
.dark .link-group-icon-box svg {
  color: #60a5fa !important;
}
.dark .link-group-icon-box svg path {
  fill: currentColor;
}
      `
  }} />
      <div>
        {title && <h1 className="mb-4 text-2xl md:text-[36px] font-semibold text-gray-900 dark:text-white text-center pb-[40px]">
            {title}
          </h1>}
        {}
        <style dangerouslySetInnerHTML={{
    __html: `
              .link-group-grid-${cols} {
                display: grid;
                grid-template-columns: repeat(1, minmax(0, 1fr));
                gap: 1.5rem;
                width: 100%;
              }
              @media (min-width: 768px) {
                .link-group-grid-${cols} {
                  grid-template-columns: repeat(${Math.min(cols, 2)}, minmax(0, 1fr));
                  gap: 2rem;
                }
              }
              @media (min-width: 1280px) {
                .link-group-grid-${cols} {
                  grid-template-columns: repeat(${cols}, minmax(0, 1fr));
                }
              }
            `
  }} />
        <div className={`link-group-grid-${cols} mt-2 md:mt-4`}>{children}</div>
      </div>
    </>;
};

export const ReleaseItem = ({title, date, badgeText, badgeVariant = "gray", secondaryBadgeText, secondaryBadgeVariant = "gray", href}) => {
  const badgeConfig = {
    gray: {
      bg: "#3F4042",
      text: "#FFFFFF"
    },
    blue: {
      bg: "#0061D5",
      text: "#FFFFFF"
    },
    orange: {
      bg: "#FF9900",
      text: "#FFFFFF"
    },
    yellow: {
      bg: "#FFC900",
      text: "#000000"
    },
    purple: {
      bg: "#9D4CFF",
      text: "#FFFFFF"
    },
    black: {
      bg: "#000000",
      text: "#FFFFFF"
    }
  };
  const badges = [];
  if (badgeText) {
    badges.push({
      text: badgeText,
      style: badgeConfig[badgeVariant] || badgeConfig.gray
    });
  }
  if (secondaryBadgeText) {
    badges.push({
      text: secondaryBadgeText,
      style: badgeConfig[secondaryBadgeVariant] || badgeConfig.gray
    });
  }
  return <a href={href || "#"} className="block group !no-underline !shadow-none mb-6 last:mb-0 border-b border-gray-100 dark:border-gray-800 last:border-b-0 pb-6 last:pb-0" style={{
    maxWidth: "482px",
    minHeight: "111px"
  }}>
      <div className="flex flex-col justify-center gap-2">
        {badges.length > 0 && <div className="self-start flex flex-row flex-wrap items-center gap-2">
            {badges.map(({text, style: currentStyle}) => <span key={text} className="inline-flex items-center justify-center uppercase" style={{
    backgroundColor: currentStyle.bg,
    color: currentStyle.text,
    minWidth: "100px",
    height: "20px",
    borderRadius: "133.33px",
    fontFamily: "Inter Display, Inter, sans-serif",
    fontWeight: 600,
    fontSize: "10.67px",
    lineHeight: 1,
    letterSpacing: "0px",
    textAlign: "center"
  }}>
                <span style={{
    display: "block",
    transform: "translateY(0.5px)"
  }}>
                  {text}
                </span>
              </span>)}
          </div>}
        <h4 className="!mt-0 !mb-0 text-[16px] font-bold text-[#151F26] dark:text-white group-hover:underline leading-snug">
          {title}
        </h4>
        <p className="!mt-0 !mb-0 text-[#5D656B] dark:text-gray-400 text-[14px]">
          {date}
        </p>
      </div>
    </a>;
};

export const HidePageTitle = () => {
  React.useEffect(() => {
    const hidePageTitle = () => {
      const pageTitle = document.getElementById("page-title");
      if (pageTitle) {
        pageTitle.style.display = "none";
      }
    };
    hidePageTitle();
    const observer = new MutationObserver(hidePageTitle);
    observer.observe(document.body, {
      childList: true,
      subtree: true
    });
    return () => observer.disconnect();
  }, []);
  return null;
};

export const CustomCard = ({href, icon, darkIcon, title, description, image, darkImage, tagTitle, linkText, lang}) => {
  const translations = {
    ja: "詳細を表示",
    fr: "En savoir plus"
  };
  const isLarge = !!image;
  const linkLabel = linkText || translations[lang] || "Learn more";
  const measureRef = React.useRef(null);
  const containerRef = React.useRef(null);
  const [truncatedDesc, setTruncatedDesc] = React.useState(description);
  React.useEffect(() => {
    const measure = measureRef.current;
    const container = containerRef.current;
    if (!measure || !container || !description) return;
    const maxLines = 3;
    const update = () => {
      const width = container.getBoundingClientRect().width;
      measure.style.width = width + "px";
      measure.textContent = description;
      const style = window.getComputedStyle(measure);
      const lineHeight = parseFloat(style.lineHeight);
      const maxHeight = lineHeight * maxLines;
      if (measure.scrollHeight <= Math.ceil(maxHeight)) {
        setTruncatedDesc(description);
        return;
      }
      const isCJK = (/[\u3000-\u9FFF\uF900-\uFAFF]/).test(description);
      const units = isCJK ? [...description] : description.split(/\s+/);
      const joiner = isCJK ? "" : " ";
      let lo = 0;
      let hi = units.length;
      while (lo < hi) {
        const mid = Math.ceil((lo + hi) / 2);
        measure.textContent = units.slice(0, mid).join(joiner) + "...";
        if (measure.scrollHeight > Math.ceil(maxHeight)) {
          hi = mid - 1;
        } else {
          lo = mid;
        }
      }
      setTruncatedDesc(lo > 0 ? units.slice(0, lo).join(joiner) + "..." : description);
    };
    update();
    const observer = new ResizeObserver(update);
    observer.observe(container);
    return () => observer.disconnect();
  }, [description]);
  if (isLarge) {
    return <a href={href} className="custom-card-wrapper block group !no-underline !border-none !shadow-none !m-0 !p-0">
        <div className="h-full flex flex-col border border-gray-200 dark:border-gray-800 rounded-[32px] overflow-hidden bg-white dark:bg-[#0b0b0b] transition-all hover:shadow-lg">
          <div className="h-[262px] w-full relative overflow-hidden !m-0 !p-0 leading-[0] !-mt-px">
            {image && <>
                <img src={image} alt={title} noZoom className={`block w-full h-full object-cover !mt-1 !p-1 !rounded-t-[36px] !border-none ${darkImage ? "dark:hidden" : ""}`} />
                {darkImage && <img src={darkImage} alt={title} noZoom className="block w-full h-full object-cover !mt-1 !p-1 !rounded-t-[36px] !border-none hidden dark:block" />}
              </>}
          </div>
          <div className="flex-1 flex flex-col">
            <div className="p-6 flex-1">
              <div className="flex items-center gap-2 mb-1">
                <div className="flex items-center gap-2 border-[0.5px] border-gray-200 dark:border-gray-600 rounded-full px-3 py-1">
                  <span className="w-4 h-4 flex items-center justify-center text-gray-900 dark:text-white">
                    {icon && <>
                        <img src={icon} alt="" noZoom className={`w-full m-0 h-full object-contain ${darkIcon ? "block dark:hidden" : ""}`} />
                        {darkIcon && <img src={darkIcon} alt="" noZoom className="w-full h-full m-0 object-contain hidden dark:block" />}
                      </>}
                  </span>
                  {tagTitle && <span className="text-xs font-semibold text-gray-700 dark:text-gray-300">
                      {tagTitle}
                    </span>}
                </div>
              </div>
              <h3 className="text-2xl mt-4 font-bold text-gray-900 dark:text-white mb-2">
                {title}
              </h3>
            </div>

            <div className="px-6 pb-6 pt-4 border-t border-gray-200 dark:border-gray-800 mt-auto">
              <div className="flex items-center justify-end text-[#0061D5] dark:text-white font-semibold text-sm">
                {linkLabel}
                <Icon icon="arrow-up-right" size={14} className="link-icon pl-6" />
              </div>
            </div>
          </div>
        </div>
      </a>;
  }
  return <a href={href} className="custom-card-wrapper block not-prose font-normal group !no-underline !border-none !shadow-none !m-0 !p-0 w-full">
      <div className="h-full flex flex-col rounded-[20px] bg-white dark:bg-[#18191a] transition-all hover:shadow-lg" style={{
    border: "1px solid #F0F1F2",
    overflow: "hidden"
  }}>
        <style>{`
          .dark .custom-card-wrapper > div {
            border: 0.93px solid #FFFFFF1A !important;
          }
          .dark .custom-card-wrapper:hover > div {
            border: 0.93px solid #FFFFFF4D !important;
          }
        `}</style>
        {icon && <div className="leading-[0]">
            <img src={icon} alt={title} noZoom className="block w-full aspect-video object-cover m-0 p-0 border-none shadow-none" />
          </div>}
        <div className="px-6 py-5">
          <h3 className="mt-0 text-base font-semibold text-gray-900 dark:text-white">
            {title}
          </h3>
          <p ref={containerRef} className="mt-1 mb-0 text-[#4B5258] dark:text-gray-300 font-normal text-sm leading-relaxed">
            {truncatedDesc}
          </p>
          <p ref={measureRef} className="text-[#4B5258] font-normal text-sm leading-relaxed m-0" style={{
    position: "absolute",
    visibility: "hidden",
    height: "auto",
    whiteSpace: "normal"
  }} aria-hidden="true" />
        </div>
      </div>
    </a>;
};

<div className="article_labels_list" style={{display: 'none'}} dangerouslySetInnerHTML={{__html: "End User , Overview , Article , Product Utilization , Established"}} />

<HidePageTitle />

<div className="hero-content w-full flex flex-col items-center py-[0] pb-[2.5rem] px-10">
  <h1
    className="text-center mb-[10px] text-[#151F26] dark:text-white"
    style={{
  fontWeight: 600,
  fontSize: "32px",
  lineHeight: "37.96px",
  letterSpacing: "0px",
}}
  >
    Comment pouvons-nous vous aider ?
  </h1>

  <p
    className="text-justify text-[#3F4448] dark:text-white max-w-2xl mx-auto mb-10"
    style={{
  fontWeight: 400,
  fontSize: "18px",
  lineHeight: "25.31px",
  letterSpacing: "0px",
}}
  >
    Explorez notre documentation produit ou posez une question à Docs AI pour en savoir plus sur la gestion intelligente du contenu, la collaboration sécurisée et les workflows automatisés dans Box.
  </p>
</div>

<div className="px-5 max-w-[1433px] mx-auto px-5">
  <LinkGroupContainer cols={2} title="Principes fondamentaux de Box">
    <LinkGroup title="Utilisateurs" icon="user">
      [Connexion et paramètres de l'utilisateur](/fr/box-fundamentals/for-users/user-login-and-settings)
      [Commencer](/fr/box-fundamentals/for-users/getting-started)
      [Collaborer](/fr/box-fundamentals/for-users/collaborating)
      [Rester organisé](/fr/box-fundamentals/for-users/staying-organized)
      [Chargements et téléchargements](/fr/box-fundamentals/for-users/uploads-and-downloads)
    </LinkGroup>

    <LinkGroup title="Administrateurs" icon="user-gear">
      [Commencer](/fr/box-fundamentals/for-admins/getting-started)
      [Collaborer](/fr/box-fundamentals/for-admins/collaborating)
      [Rester organisé](/fr/box-fundamentals/for-admins/staying-organized)
    </LinkGroup>
  </LinkGroupContainer>
</div>

<div className="homepage_max_width flex flex-col w-full px-5 md:pb-24 py-12 gap-5">
  <h2
    className="text-gray-900 dark:text-gray-200 mx-auto mb-5"
    style={{
    fontSize: '2rem',
    fontWeight: '700',
  }}
  >
    Thèmes populaires
  </h2>

  <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
    <CustomCard icon="/images/homepage/popular-topics/logging-in-with-sso.svg" title="Connexion avec Single Sign On (SSO)" description="UTILISATEURS" href="/fr/box-fundamentals/for-users/user-login-and-settings/logging-in-with-single-sign-on-sso" />

    <CustomCard icon="/images/homepage/popular-topics/uploading-content.svg" title="Téléchargez votre contenu sur Box" description="UTILISATEURS" href="/fr/box-fundamentals/for-users/getting-started/upload-your-content-to-box" />

    <CustomCard icon="/images/homepage/popular-topics/creating-shared-links.svg" title="Créer des liens partagés" description="UTILISATEURS" href="/fr/box-fundamentals/for-users/collaborating/using-shared-links/creating-shared-links" />

    <CustomCard icon="/images/homepage/popular-topics/using-metadata.svg" title="Utiliser des métadonnées" description="UTILISATEURS" href="/fr/box-fundamentals/for-users/staying-organized/organizing-and-tracking-content/using-metadata" />

    <CustomCard icon="/images/homepage/popular-topics/deploying-overview.svg" title="Déploiement de Box -- Vue d'ensemble pour les nouveaux administrateurs" description="ADMINISTRATEURS" href="/fr/box-fundamentals/for-admins/getting-started/deploying-box-overview-for-new-admins" />

    <CustomCard icon="/images/homepage/popular-topics/migrating-content.svg" title="Migrer le contenu" description="ADMINISTRATEURS" href="/fr/box-fundamentals/for-admins/getting-started/migrate-content" />

    <CustomCard icon="/images/homepage/popular-topics/managing-file-requests.svg" title="Gérer Box File Request" description="ADMINISTRATEURS" href="/fr/box-fundamentals/for-admins/collaborating/sharing-content-with-box/administering-box-file-request" />

    <CustomCard icon="/images/homepage/popular-topics/collab-invites.svg" title="Invitations à la collaboration créent un compte" description="ADMINISTRATEURS" href="/fr/box-fundamentals/for-admins/collaborating/collaborating-by-inviting-others/collaboration-invites-create-an-account" />
  </div>
</div>

<div className="relative w-full flex flex-col items-center justify-center overflow-hidden" style={{ padding: '2rem 1.25rem', marginBottom: '-3rem' }}>
  <div className="hero-content w-full flex flex-col items-center">
    <h4 className="text-3xl md:text-4xl font-bold text-center text-[#3F4448] dark:text-white mb-6 font-display" style={{ lineHeight: '1.2', letterSpacing: '-0.02em' }}>
      Prêt à collaborer et optimiser avec l'IA en toute sécurité?
    </h4>

    <div className="w-full max-w-2xl mx-auto relative flex justify-center">
      <a target="_blank" href="https://www.box.com/fr-fr/home" className="inline-block px-5 py-2 bg-white text-[#3F4448] font-semibold rounded-md border border-gray-200 hover:bg-[#1F73B7] hover:text-white hover:border-[#1F73B7] transition no-underline">
        Visitez Box
      </a>
    </div>
  </div>
</div>

<ChatAssistantInit />
