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

# Managing clients

> Find, review and organise every client workspace linked to your reseller account, and understand why management access is sometimes unavailable.

<div className="mxp-hero xc-border">
  <div className="exp-eyebrow mxp-rise">YOUR ROSTER</div>

  <h2 className="mxp-hero-title mxp-rise" style={{animationDelay:'0.06s'}}>
    Every client you manage, in one table. <span style={{background:'linear-gradient(90deg,#24A4FF,#9000FF,#E3008E)',WebkitBackgroundClip:'text',backgroundClip:'text',color:'transparent'}}>Search it, filter it, act on it.</span>
  </h2>

  <p className="mxp-hero-dek mxp-rise" style={{animationDelay:'0.13s'}}>
    The Clients tab lists every business workspace linked to your reseller ID, with the plan, join date, status and revenue contribution for each one. This page covers how to find a client fast, what the filters actually mean, and the single most common source of confusion: why the action button is sometimes greyed out for a client that looks perfectly active.
  </p>
</div>

<div className="w-full py-10">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">The layout</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">The table at a glance.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      "All business workspaces linked to your reseller ID. Click "View as Client" to load any account in the standard Actionist UI, scoped to that workspace." That is the tab's own subtitle, and it is a fair summary of everything below.
    </p>
  </div>

  <div className="mxp-window">
    <div className="mxp-window-bar">
      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-title">reseller / clients</span>
    </div>

    <div className="mxp-window-body" style={{minHeight:'auto'}}>
      <div className="xrs-mock-row" style={{fontSize:'10.5px',fontWeight:700,letterSpacing:'0.06em',textTransform:'uppercase',opacity:0.5,borderBottom:'none'}}>
        <span style={{flex:'2.3'}}>Client</span>
        <span style={{flex:'0.9'}}>Plan</span>
        <span style={{flex:'0.9'}}>Joined</span>
        <span style={{flex:'0.8'}}>Status</span>
        <span style={{flex:'1.1'}}>Revenue contribution</span>
        <span style={{flex:'1.2'}}>Actions</span>
      </div>

      <div className="xrs-mock-row">
        <span style={{flex:'2.3',display:'flex',alignItems:'center',gap:'10px'}}>
          <span className="xrs-mock-avatar">HS</span>

          <span>
            <div>Halo Studio LLC</div>
            <div style={{fontSize:'11px',opacity:0.55}}>[hello@halo.studio](mailto:hello@halo.studio)</div>
          </span>
        </span>

        <span style={{flex:'0.9'}}><span className="xrs-mock-tag pro">Pro</span></span>
        <span style={{flex:'0.9',opacity:0.7}}>Feb 2026</span>
        <span style={{flex:'0.8',display:'flex',alignItems:'center',gap:'6px'}}><span className="xrs-mock-status-dot active" />Active</span>
        <span style={{flex:'1.1'}}>\$412.00</span>
        <span style={{flex:'1.2'}}><span className="xrs-mock-cta" style={{marginTop:0,padding:'6px 14px',fontSize:'11px'}}>View as client</span></span>
      </div>

      <div className="xrs-mock-row">
        <span style={{flex:'2.3',display:'flex',alignItems:'center',gap:'10px'}}>
          <span className="xrs-mock-avatar" style={{background:'linear-gradient(135deg,#486EFF,#24A4FF)'}}>AC</span>

          <span>
            <div>Acme Consulting</div>
            <div style={{fontSize:'11px',opacity:0.55}}>[ops@acmeconsulting.io](mailto:ops@acmeconsulting.io)</div>
          </span>
        </span>

        <span style={{flex:'0.9'}}><span className="xrs-mock-tag starter">Starter</span></span>
        <span style={{flex:'0.9',opacity:0.7}}>Aug 2026</span>
        <span style={{flex:'0.8',display:'flex',alignItems:'center',gap:'6px'}}><span className="xrs-mock-status-dot active" />Active</span>
        <span style={{flex:'1.1',opacity:0.65}}>Pending</span>
        <span style={{flex:'1.2'}}><span className="xrs-lock-ctl" style={{padding:'6px 14px',fontSize:'11px'}}>View as client</span></span>
      </div>

      <div className="xrs-mock-row">
        <span style={{flex:'2.3',display:'flex',alignItems:'center',gap:'10px'}}>
          <span className="xrs-mock-avatar" style={{background:'linear-gradient(135deg,#FD840C,#FF0068)'}}>NW</span>

          <span>
            <div>Northwind Freight</div>
            <div style={{fontSize:'11px',opacity:0.55}}>[billing@northwindfreight.com](mailto:billing@northwindfreight.com)</div>
          </span>
        </span>

        <span style={{flex:'0.9'}}>
          {'-'}
        </span>

        <span style={{flex:'0.9',opacity:0.7}}>Jun 2026</span>
        <span style={{flex:'0.8',display:'flex',alignItems:'center',gap:'6px'}}><span className="xrs-mock-status-dot inactive" />Inactive</span>

        <span style={{flex:'1.1'}}>
          {'-'}
        </span>

        <span style={{flex:'1.2',opacity:0.6}}>View as client</span>
      </div>
    </div>
  </div>

  Six columns. Each renders a specific set of fields, no more.

  | Column               | What it shows                                                                                                                                                                                            |
  | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | Client               | The gradient avatar with initials, the client name, and the primary email underneath when one is on file. The domain is never shown in this cell, even though it is one of the things you can search on. |
  | Plan                 | The plan name exactly as the backend sends it, or a dash when no plan is set. There is no relabeling or mapping applied here.                                                                            |
  | Joined               | The date the workspace linked to your reseller ID.                                                                                                                                                       |
  | Status               | A single dot: active or inactive.                                                                                                                                                                        |
  | Revenue contribution | "Pending", a formatted amount, or a dash. Covered in full further down this page.                                                                                                                        |
  | Actions              | A **View as client** button, sometimes disabled. Covered in the signature section below.                                                                                                                 |

  <Note>
    The Client cell is the one place people expect to see a domain and don't. If you're trying to tell two similarly named clients apart, use the email underneath the name, not a domain that isn't rendered.
  </Note>

  <Info>
    The Plan cell is a raw pass-through of whatever the backend calls that client's plan. There's no relabeling applied here, so if a client's plan was renamed on the backend, this cell reflects that immediately, even if it doesn't match the plan names you're used to seeing elsewhere in the product.
  </Info>

  This is the full roster, not a preview. The Overview tab's "Most recent clients" panel shows the same underlying data capped at five rows, with a "View all" link that lands you back here. If you only need a quick pulse check on your newest clients, start there. If you need to search, filter, or page through everyone, this is the page for it. See [Dashboard overview](/resellers/dashboard) for that panel.
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Search</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Finding a client.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      The search box sits above the table with the placeholder "Search clients, domains, contacts…". It matches against more than the name shown in the Client cell.
    </p>
  </div>

  <div className="mxp-window">
    <div className="mxp-window-bar">
      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-title">clients / search</span>
    </div>

    <div className="mxp-window-body" style={{minHeight:'auto'}}>
      <div className="xrs-mock-label">Search</div>

      <div style={{display:'flex',alignItems:'center',gap:'10px'}}>
        <div className="xrs-mock-input" style={{flex:1}}>halo</div>
        <span className="xrs-usdc-pill" style={{color:'inherit',background:'rgb(128 128 144 / 0.12)',border:'1px solid rgb(128 128 144 / 0.28)'}}>⌘K</span>
      </div>

      <div className="xrs-mock-hint">Type at least 3 characters to search</div>
    </div>
  </div>

  Three things matter here:

  * **Minimum three characters.** Below that, the box shows the hint "Type at least 3 characters to search" instead of querying anything.
  * **300 ms debounce.** Once you're past three characters, the table waits a beat after you stop typing before it fetches, so a fast typer doesn't fire a request per keystroke.
  * **The match happens on the server**, across name, domain and contact fields, not just the name string rendered in the Client cell. That's why the placeholder says "clients, domains, contacts" even though no domain column exists in the table.

  <Tip>
    If you can't find a client by name, try the domain or the contact email instead. The Client cell won't show you the domain, but the search index does look at it.
  </Tip>

  In practice this matters most when a client's company name in Actionist doesn't match the name you know them by internally. If "halo" doesn't turn up a match on the name you expected, try their domain (`halo.studio`) or the contact email you have on file for them instead of assuming the client isn't linked at all.

  <Note>
    The keyboard chip next to the search box, showing **⌘K** or **Ctrl+K**, is decorative. There is no keyboard handler behind it anywhere in the reseller interface. Pressing it does nothing, and that's expected, not a bug. Worth knowing before it turns into a support ticket.
  </Note>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Narrow the roster</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Filtering.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Four chips sit next to the search box, each showing a live count. Search and filters combine, so typing a query while a chip is selected narrows both at once.
    </p>
  </div>

  <div className="mxp-srch-chips" style={{marginBottom:'18px'}}>
    <label htmlFor="clients-f-all"><input className="mxp-r" type="radio" name="clients-filter" id="clients-f-all" defaultChecked />All · 46</label>
    <label htmlFor="clients-f-active"><input className="mxp-r" type="radio" name="clients-filter" id="clients-f-active" />Active · 31</label>
    <label htmlFor="clients-f-inactive"><input className="mxp-r" type="radio" name="clients-filter" id="clients-f-inactive" />Inactive · 9</label>
    <label htmlFor="clients-f-historical"><input className="mxp-r" type="radio" name="clients-filter" id="clients-f-historical" />Historical · 6</label>
  </div>

  | Chip       | Filters on                                                                                                    |
  | ---------- | ------------------------------------------------------------------------------------------------------------- |
  | All        | No filter applied. Every linked workspace, in any relationship state.                                         |
  | Active     | The operational status shown as the green dot in the Status column.                                           |
  | Inactive   | The operational status shown as the grey dot in the Status column.                                            |
  | Historical | The underlying relationship status being canceled or force\_disconnected, not the Active/Inactive dot at all. |

  Active and Inactive read the same two-state status the table already shows you. Historical reads something the table never shows directly: the four-value relationship status underneath (`pending_metadata_sync`, `active`, `canceled`, `force_disconnected`). A Historical client isn't just "not active" today, it's a relationship that has actually ended. The chip carries the tooltip "Canceled or disconnected clients, kept here for reference." to make that plain.

  Two things worth understanding about that ended state:

  * **A canceled relationship** means the client's own subscription lapsed or they chose to disconnect.
  * **A force-disconnected relationship** is an administrative action, not something either you or the client triggers from a button in the product. If a client shows up as Historical and you weren't expecting it, that's the reason to ask support rather than to look for a setting you missed.

  <Note>
    The Historical chip only appears once the backend actually returns that breakdown. If you don't see a fourth chip, it isn't hidden, it simply hasn't been computed for your account yet.
  </Note>

  Search and filters combine rather than compete. Selecting **Active** and then searching "acme" doesn't show you every client matching "acme", it shows you only the ones that are both active and match that search. Switch the chip back to **All** if a search comes back emptier than you expected, since a filter left over from an earlier look at the table is a common reason for a client to seem to have vanished.

  Sort is fixed to most recently linked first, and it isn't something you can change from this screen. Pagination runs 20 clients per page with Previous, the current page number, and Next, and the footer under the table reads "Showing {'{'}shown{'}'} of {'{'}total{'}'} clients" so you always know how much of the roster you're looking at.

  <div className="mxp-window" style={{maxWidth:'420px'}}>
    <div className="mxp-window-bar">
      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-title">pagination</span>
    </div>

    <div className="mxp-window-body" style={{minHeight:'auto',display:'flex',alignItems:'center',justifyContent:'space-between'}}>
      <span style={{opacity:0.6,fontSize:'12px'}}>Showing 20 of 46 clients</span>

      <span style={{display:'flex',gap:'8px',fontSize:'12px'}}>
        <span className="xrs-lock-ctl" style={{padding:'5px 12px'}}>Previous</span>
        <span style={{padding:'5px 12px',opacity:0.7}}>1</span>
        <span className="xrs-mock-cta" style={{marginTop:0,padding:'5px 12px'}}>Next</span>
      </span>
    </div>
  </div>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">The question everyone asks</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Why is View as client greyed out?</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      The Actions column always shows a **View as client** button, in lowercase c. Most of the time it's clickable. Sometimes it isn't, and the reason is rarely what people first assume.
    </p>
  </div>

  <div className="xrs-two">
    <div className="xrs-two-col can">
      <div className="xrs-two-tag">What makes a client manageable</div>
      <div className="xrs-two-item">The backend reports that a delegated session can actually be created for this relationship.</div>
      <div className="xrs-two-item">The workspace has finished its initial setup and metadata sync, not just been linked.</div>
      <div className="xrs-two-item">The relationship is in a state where scopes can be resolved at the moment you click the button.</div>
      <div className="xrs-two-item">Nothing about that specific row's session is currently in progress or previously failed and needs a retry.</div>
    </div>

    <div className="xrs-two-col cant">
      <div className="xrs-two-tag">What disables the button</div>
      <div className="xrs-two-item">The backend says management isn't possible for this client right now, and gives you its own reason for it.</div>
      <div className="xrs-two-item">No reason is given, in which case the button falls back to "Managing this client isn't available right now".</div>
      <div className="xrs-two-item">A session is actively being created for that row. The button shows a spinner and stays disabled until it resolves.</div>
      <div className="xrs-two-item">The relationship has ended (canceled or force-disconnected), which is exactly what the Historical filter surfaces.</div>
    </div>
  </div>

  <Warning>
    A client can show the green Active dot and still have a greyed-out **View as client** button. Status and manageability are two different fields under the hood: a workspace that is still syncing reports as active in the Status column, but isn't manageable yet. Don't read Active as a promise that the button will work. If it's disabled on an active client, the workspace is almost always still finishing setup, not broken.
  </Warning>

  There is no separate column that spells this out for you, so the button's own state, and whatever tooltip it carries, is the only signal you get. If the tooltip gives a specific reason, trust that reason over any guess. If it's the generic fallback line, treat it as "not yet", check back later, or ask the client whether their setup finished on their end.

  One more thing worth knowing before you click: the permissions you get inside the session aren't cached from whenever the client last saved their settings. They're resolved from the client's live grants at the moment you click **View as client**. If a client flips a toggle off five minutes before you start a session, you'll see the narrower set, not whatever was true earlier in the day.

  <AccordionGroup>
    <Accordion title="The button was clickable a minute ago, now it isn't" icon="refresh-cw">
      Manageability can change between page loads. A client's workspace finishing its sync, or a relationship changing state, can flip the button from disabled to enabled or back without any action on your part. Refresh the table rather than trusting a state you saw a few minutes ago.
    </Accordion>

    <Accordion title="A client shows Inactive but I can still click the button" icon="circle-alert">
      Status and manageability are independent fields. An Inactive client can still be manageable if the backend allows a session to be created for that relationship. Don't infer manageability from the dot in either direction, check the button itself.
    </Accordion>

    <Accordion title="I want to know why, not just that it's disabled" icon="message-circle-more">
      Hover the button. The tooltip carries the backend's own reason when one is available, and only falls back to the generic "Managing this client isn't available right now" when it isn't. Read the tooltip before assuming the generic case applies.
    </Accordion>
  </AccordionGroup>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Reading the numbers</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Revenue contribution.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      This column has exactly three possible states. It never shows anything else.
    </p>
  </div>

  | State    | What you see                                      | What it means                                                           |
  | -------- | ------------------------------------------------- | ----------------------------------------------------------------------- |
  | Deferred | "Pending", sometimes with a tooltip               | The backend hasn't finished calculating this client's contribution yet. |
  | Computed | A formatted currency amount, for example \$412.00 | The client's confirmed contribution, as calculated.                     |
  | No data  | A dash (`-`)                                      | There is no amount to show for this client.                             |

  <div className="mxp-window" style={{maxWidth:'420px'}}>
    <div className="mxp-window-bar">
      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-title">revenue contribution</span>
    </div>

    <div className="mxp-window-body" style={{minHeight:'auto'}}>
      <div className="xrs-mock-row"><span>Halo Studio LLC</span><span style={{marginLeft:'auto',fontWeight:600}}>\$412.00</span></div>
      <div className="xrs-mock-row"><span>Acme Consulting</span><span style={{marginLeft:'auto',opacity:0.65}}>Pending</span></div>
      <div className="xrs-mock-row"><span>Northwind Freight</span><span style={{marginLeft:'auto',opacity:0.5}}>{'-'}</span></div>
    </div>
  </div>

  <Warning>
    This "Pending" is not the same thing as the **Pending** commission status you'll see later in the Revenue ledger. In the Clients table, Pending means the backend hasn't finished computing that client's revenue contribution figure yet, a data-availability state. In the Revenue ledger, Pending describes a specific commission line item that has accrued but not yet been paid out, a payout-lifecycle state. Same word, two unrelated concepts, in two different views of the same programme. If a client shows Pending here, it says nothing about whether any commission tied to them has been paid.
  </Warning>

  If you need to know whether commission from a specific client has actually paid out, that's a question for the Revenue ledger, not this column. See [Revenue and payouts](/resellers/revenue) for the ledger's own Pending and Paid states.
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Troubleshooting</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">States and controls.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      What each visible state means, and what's worth doing about it before you escalate.
    </p>
  </div>

  | What you see                                                               | Why                                                                                                                                                                                       | What to do next                                                                                                                                                                                               |
  | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | The table shows only "No clients yet."                                     | Either you genuinely have no linked clients, or the fetch behind the table failed. There is no separate error state, a failed request renders the same empty text as a real empty roster. | If you expect clients to be there, refresh the page before assuming your roster is actually empty. If it happens repeatedly, that's worth a support ticket, since the UI can't tell you which case you're in. |
  | The **View as client** button is greyed out                                | The backend has marked this client as not manageable right now, most often because the workspace is still syncing.                                                                        | Read the tooltip for the reason. If it's the generic fallback, check back shortly. See the section above for the full breakdown.                                                                              |
  | Revenue contribution shows "Pending"                                       | The backend hasn't finished computing that client's figure.                                                                                                                               | Nothing to fix on your end. Recheck later. Don't confuse it with the ledger's own Pending status.                                                                                                             |
  | A spinner on the Actions button never resolves                             | Session creation for that row is taking longer than expected, or has silently stalled.                                                                                                    | Give it a moment, then refresh the page. If it consistently never resolves for the same client, treat it the same as a disabled button and check the tooltip once it settles.                                 |
  | A toast reads "Client manager is currently unavailable. Please try again." | Session creation for that client failed outright.                                                                                                                                         | Try again. If it keeps failing for one specific client while others work fine, that points at something client-side (their workspace) rather than your account.                                               |

  <Note>
    Notice the pattern: several of these states look identical to each other on the surface, "No clients yet." covering both empty and broken, a syncing client looking the same as any other active one until you try the button. When the table won't tell you which case you're in, the fastest signal is usually a refresh, followed by whether the same state persists for one client specifically or for the whole roster.
  </Note>

  <Tip>
    If you're not sure whether "No clients yet." means your roster is genuinely empty or the fetch failed, check the "Total clients onboarded" KPI tile on the [Dashboard overview](/resellers/dashboard). It's driven by a separate query, so a nonzero count there while this table shows nothing points at a failed fetch, not an empty roster.
  </Tip>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">From roster to workspace</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Working with a client.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Once you've found the right row, stepping into that client's workspace is a short hop, not a separate tool.
    </p>
  </div>

  <Steps>
    <Step title="Confirm the row is manageable">
      Check the Actions cell isn't greyed out and isn't mid-spinner. If it is, work through the section above before you try clicking.
    </Step>

    <Step title="Click View as client">
      This mints a delegated session scoped to that one workspace, using whichever scopes the client currently has granted.
    </Step>

    <Step title="Read the Reseller mode banner">
      It names the client and lists exactly which permissions are active for this session, before you touch anything inside their workspace.
    </Step>

    <Step title="Exit cleanly when you're done">
      The full walkthrough, including what each scope unlocks and how sessions expire, lives at [View as client](/resellers/view-as-client).
    </Step>
  </Steps>

  Set expectations with the client before the first session, not during it. Tell them which scopes you're expecting to use, and ask them to confirm those toggles are on in their own **Manage Reseller** panel. It's a five minute conversation that avoids a wasted click on a greyed-out button later.

  <div className="xc-recipes" style={{marginTop:'26px'}}>
    <div className="xc-recipe">
      <div className="xc-recipe-who"><i style={{background:'linear-gradient(135deg,#9000FF,#00DBFF)'}} />Agency owner · Monday roster check</div>
      <div className="xc-recipe-flow">Filters to <em>Active</em>, scans plan and revenue contribution for anything that looks off since Friday, then moves on. No search needed when the whole roster fits on one screen.</div>
      <span className="xc-recipe-save">about 10 minutes</span>
    </div>

    <div className="xc-recipe">
      <div className="xc-recipe-who"><i style={{background:'linear-gradient(135deg,#486EFF,#24A4FF)'}} />Agency owner · spotting churn</div>
      <div className="xc-recipe-flow">Notices a client that used to be Active now shows a grey dot, checks the <em>Historical</em> chip to see if the relationship actually ended, and follows up by email if it did.</div>
      <span className="xc-recipe-save">about 5 minutes</span>
    </div>

    <div className="xc-recipe">
      <div className="xc-recipe-who"><i style={{background:'linear-gradient(135deg,#FD840C,#FF0068)'}} />Agency owner · chasing a stuck setup</div>
      <div className="xc-recipe-flow">A client shows Active but the button won't click. Reads the tooltip, sees it's still syncing, and pings the client to confirm they finished their side of onboarding instead of assuming the dashboard is broken.</div>
      <span className="xc-recipe-save">about 10 minutes</span>
    </div>
  </div>
</div>

<hr className="xc-divider" />

<div className="w-full py-10">
  <div className="actionist-cta-panel xc-border">
    <div className="relative z-10 flex flex-col items-center gap-5 max-w-2xl mx-auto">
      <span className="actionist-eyebrow">Managing clients</span>

      <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-white leading-tight">
        Know your roster, know the boundary.
      </h2>

      <p className="text-base md:text-lg text-white/85">
        Every client's status, plan and manageability lives in one table. When something looks off, the tooltip usually already told you why.
      </p>

      <div className="flex flex-wrap items-center justify-center gap-3 pt-2">
        <a className="actionist-cta-btn-primary" href="https://app.actionist.ai" target="_blank" rel="noreferrer">
          Open the Dashboard

          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round">
            <path d="M5 12h14" />

            <path d="m12 5 7 7-7 7" />
          </svg>
        </a>

        <a className="actionist-cta-btn-secondary" href="https://actionist.ai/partners/" target="_blank" rel="noreferrer">
          Signup as a Partner
        </a>
      </div>
    </div>
  </div>
</div>

<div className="w-full pt-2 pb-6">
  <p className="actionist-trust-line">
    Search is server side, sort is fixed, and Active never guarantees manageable.<br />
    The button tells you the truth about a client's state before you click it.
  </p>
</div>

<div className="w-full pb-16 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Keep going</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Next steps.</h2>
  </div>

  <Columns cols={4}>
    <Card title="View as client" icon="log-in" href="/resellers/view-as-client">
      Starting a session, reading the banner, and leaving cleanly once the button is clickable.
    </Card>

    <Card title="Onboarding a client" icon="user-plus" href="/resellers/client-onboarding">
      How a client ends up on this roster in the first place, and the handoff that follows.
    </Card>

    <Card title="Client permissions" icon="shield-check" href="/resellers/permissions">
      What each toggle unlocks from the client's side, and why credentials never appear here.
    </Card>

    <Card title="Troubleshooting" icon="life-buoy" href="/resellers/troubleshooting">
      A fuller symptom index for when a row's state doesn't match what you expected.
    </Card>
  </Columns>
</div>
