Next Task 6.0.0: a task manager for Joomla PHP2Shell: Is Your Joomla Site Safe? What to Do Today Introducing Next Boards: Kanban project and task boards for Joomla Next Exams 6.2.0: Exam Studio, six visual question types, exam embeds and six new languages Building the Future of Joomla Extensions
NextSoftware
Next Task — Documentation

Configuration

Next Task's central settings live under Components > Next Task: open Configuration > Settings in the app's navigation (the System tab needs the Configuration > Settings permission, see Roles) or go to the component's Options screen. Every setting here is a default: users can override the relevant ones in their own preferences. Which features exist at all is chosen in the App Manager.

The System tab of Settings: the home page, reminder defaults and what happens to a deleted user's lists

Task Settings

Setting What it does
Home page What opens first for people who haven't chosen their own: All tasks (the default), the Overview, or the person's default list. Someone who can't open the Overview gets All tasks, or their default list when All tasks is switched off.
Reminder lead time (minutes) Send due-time reminders this many minutes before the task is due. 0 sends at the due time itself. Applies to tasks that have a time.
Daily digest on by default Whether users who never opened their preferences receive the daily digest email. Individual users can still opt out (or in) in Settings.
Default digest time The digest time pre-filled for new users (HH:MM, site time). Each user's own choice wins once saved.
Assignment emails on by default Whether users are emailed when a task is assigned to them, unless they opt out in their own preferences.
Deleted users' lists What happens to the lists of a Joomla user who is deleted: Transfer them to another user (the default), or Delete them with their tasks. Transferred lists are renamed " (<name>)" and are no longer the default list. Shares, assignments, preferences and notifications of the deleted user are always removed. A privacy erasure request always deletes the user's lists, whatever this setting says.</td> </tr> <tr> <td>Transfer lists to</td> <td>The user who receives transferred lists. Leave empty for the first active Super User. If the chosen user is gone, blocked or is the user being deleted, the first active Super User receives them, and the lists are deleted only if there is none.</td> </tr> </tbody> </table> <h2 id="where-the-rest-is-configured">Where the Rest Is Configured</h2> <p>Next Task deliberately has almost no global configuration — the meaningful choices live with each user or each list:</p> <p><img loading="lazy" src="/media/com_nextextmanager/docsdata/10/v6/images/settings-preferences.webp" alt="The Preferences tab: home page, default list, reminder, digest, assignment and bell preferences" /></p> <ul> <li><strong>Per user</strong> (Settings > Preferences): their own home page (or "Use the site default"), default list, reminders on/off, digest on/off and time, assignment emails and bell notifications. With the Reminders app switched off, the email preferences are hidden. The colour scheme follows Joomla's (the sun/moon button in the header switches it).</li> <li><strong>Per user, remembered as they work</strong>: the lists hidden from All tasks, each list's sort, and their own order of the All tasks columns.</li> <li><strong>Per list</strong> (the list menu): title, colour, default-list flag, sharing with users or groups, and "delete all completed".</li> <li><strong>Email wording</strong>: the subjects and bodies are language strings (<code>COM_NEXTTASK_MAIL_*</code>), so they can be replaced per language with Joomla's Language Overrides without touching the code.</li> </ul> <h2 id="scheduled-tasks">Scheduled Tasks</h2> <p>The routines are configured in <strong>System > Scheduled Tasks</strong>; all the details are in <a href="/documentation/next-task/configuration/scheduled-tasks">Reminders and scheduled tasks</a>:</p> <ul> <li><strong>Next Task: due-time reminders</strong> — run every 5–15 minutes; it sends each timed task's reminder exactly once per due date, and prunes the email log after 90 days.</li> <li><strong>Next Task: daily digest</strong> — run hourly; it waits for each user's configured digest time and sends at most once per day (days in the site's timezone).</li> <li><strong>Next Task: maintenance</strong> — run hourly or daily; it creates any missing next occurrence of a recurring task, removes tasks deleted more than 7 days ago, and prunes old notifications.</li> </ul> <p>If Joomla's mail is switched off (Global Configuration > Server > Mail Settings), the email routines report that and send nothing, without counting it as a failure; due reminders still appear in the bell.</p> </article> <nav class="flex flex-col min-[600px]:flex-row gap-4 mt-12 pt-6 border-t border-nxt-border justify-between" aria-label="Page navigation"> <a href="/documentation/next-task/features/fullscreen-mode" rel="prev" class="group flex flex-col gap-1 p-4 border border-nxt-border rounded-nxt-md no-underline transition-colors hover:border-nxt-text-secondary min-[600px]:min-w-[220px]"> <span class="text-xs text-nxt-text-muted">← Previous</span> <span class="text-sm font-semibold text-nxt-text group-hover:text-nxt-primary">Full-screen mode</span> </a> <a href="/documentation/next-task/configuration/roles" rel="next" class="group flex flex-col gap-1 p-4 border border-nxt-border rounded-nxt-md no-underline transition-colors hover:border-nxt-text-secondary text-right min-[600px]:min-w-[220px]"> <span class="text-xs text-nxt-text-muted">Next →</span> <span class="text-sm font-semibold text-nxt-text group-hover:text-nxt-primary">Roles</span> </a> </nav> </main> <!-- Right rail --> <aside class="hidden min-[1280px]:block w-56 shrink-0 sticky top-[7.25rem] max-h-[calc(100vh-8.25rem)] overflow-y-auto"> <div class="mb-8"> <p class="text-xs font-semibold uppercase tracking-wide text-nxt-text-muted mb-3">On this page</p> <nav class="flex flex-col gap-1 text-sm border-l border-nxt-border" x-data="{ active: '', lock: false, lt: null }" x-init="$nextTick(() => { const hs = Array.prototype.slice.call(document.querySelectorAll('.nem-docs-body h2[id], .nem-docs-body h3[id]')); if (!hs.length || !('IntersectionObserver' in window)) return; const vis = {}; const io = new IntersectionObserver((es) => { es.forEach(e => { if (e.isIntersecting) { vis[e.target.id] = 1; } else { delete vis[e.target.id]; } }); if (lock) return; for (let i = 0; i < hs.length; i++) { if (vis[hs[i].id]) { active = hs[i].id; break; } } }, { rootMargin: '-80px 0px -70% 0px' }); hs.forEach(h => io.observe(h)); })"> <a href="#task-settings" @click.prevent="active = 'task-settings'; lock = true; clearTimeout(lt); lt = setTimeout(() => { lock = false; }, 800); drawer = false; const el = document.getElementById('task-settings'); if (el) { el.scrollIntoView({ behavior: 'smooth', block: 'start' }); history.replaceState(null, '', '#task-settings'); }" class="-ml-px border-l-2 no-underline transition-colors pl-3 py-0.5" :class="active === 'task-settings' ? 'border-nxt-primary text-nxt-primary font-semibold' : 'border-transparent text-nxt-text-secondary hover:text-nxt-text'">Task Settings</a> <a href="#where-the-rest-is-configured" @click.prevent="active = 'where-the-rest-is-configured'; lock = true; clearTimeout(lt); lt = setTimeout(() => { lock = false; }, 800); drawer = false; const el = document.getElementById('where-the-rest-is-configured'); if (el) { el.scrollIntoView({ behavior: 'smooth', block: 'start' }); history.replaceState(null, '', '#where-the-rest-is-configured'); }" class="-ml-px border-l-2 no-underline transition-colors pl-3 py-0.5" :class="active === 'where-the-rest-is-configured' ? 'border-nxt-primary text-nxt-primary font-semibold' : 'border-transparent text-nxt-text-secondary hover:text-nxt-text'">Where the Rest Is Configured</a> <a href="#scheduled-tasks" @click.prevent="active = 'scheduled-tasks'; lock = true; clearTimeout(lt); lt = setTimeout(() => { lock = false; }, 800); drawer = false; const el = document.getElementById('scheduled-tasks'); if (el) { el.scrollIntoView({ behavior: 'smooth', block: 'start' }); history.replaceState(null, '', '#scheduled-tasks'); }" class="-ml-px border-l-2 no-underline transition-colors pl-3 py-0.5" :class="active === 'scheduled-tasks' ? 'border-nxt-primary text-nxt-primary font-semibold' : 'border-transparent text-nxt-text-secondary hover:text-nxt-text'">Scheduled Tasks</a> </nav> </div> <div class="mb-8"> <p class="text-xs font-semibold uppercase tracking-wide text-nxt-text-muted mb-3">Quick Links</p> <div class="flex flex-col gap-2 text-sm"> <a href="/joomla-extensions/next-task" @click="drawer = false" class="inline-flex items-center gap-2 text-nxt-primary no-underline hover:underline [&_svg]:w-4 [&_svg]:h-4"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></svg> Product Page </a> <a href="/changelogs/next-task" @click="drawer = false" class="inline-flex items-center gap-2 text-nxt-primary no-underline hover:underline [&_svg]:w-4 [&_svg]:h-4"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M13 3a9 9 0 0 0-9 9H1l3.89 3.89.07.14L9 12H6a7 7 0 1 1 7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42A8.954 8.954 0 0 0 13 21a9 9 0 0 0 0-18zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/></svg> Changelogs </a> <a href="/customer-portal#/tickets/new?product=10&subject=Docs%3A%20Settings&message=About%20this%20documentation%20page%3A%20https%3A%2F%2Fwww.nextsoftware.dev%2Fdocumentation%2Fnext-task%2Fconfiguration%2Fsettings" rel="nofollow" @click="drawer = false" class="inline-flex items-center gap-2 text-nxt-primary no-underline hover:underline [&_svg]:w-4 [&_svg]:h-4"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20 2H4a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z"/></svg> Report an issue </a> <button type="button" x-data="{ state: '' }" @click="NemDocs.copyMarkdown('https://www.nextsoftware.dev/index.php?option=com_nextextmanager&task=documentation.markdown&slug=next-task&path=configuration%2Fsettings').then(() => { state = 'done'; }, () => { state = 'fail'; }).then(() => setTimeout(() => state = '', 1500))" class="inline-flex items-center gap-2 p-0 bg-transparent border-0 cursor-pointer text-left text-sm text-nxt-primary hover:underline [&_svg]:w-4 [&_svg]:h-4"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M16 1H4a2 2 0 0 0-2 2v14h2V3h12V1zm3 4H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2zm0 16H8V7h11v14z"/></svg> <span x-text="state === 'done' ? 'Copied!' : (state === 'fail' ? 'Copy failed' : 'Copy page as Markdown')">Copy page as Markdown</span> </button> </div> </div> <div> <p class="text-xs font-semibold uppercase tracking-wide text-nxt-text-muted mb-3">Share</p> <div class="flex items-center gap-2"> <button type="button" aria-label="Copy link" x-data="{ copied: false }" @click="navigator.clipboard && navigator.clipboard.writeText(window.location.href).then(() => { copied = true; setTimeout(() => copied = false, 1500); })" class="relative inline-flex items-center justify-center w-9 h-9 rounded-nxt-md border border-nxt-border bg-nxt-surface text-nxt-text-secondary cursor-pointer transition-colors hover:border-nxt-text-secondary hover:text-nxt-text [&_svg]:w-[18px] [&_svg]:h-[18px]"> <svg x-show="!copied" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M16 1H4a2 2 0 0 0-2 2v14h2V3h12V1zm3 4H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2zm0 16H8V7h11v14z"/></svg> <svg x-show="copied" x-cloak viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="text-green-600"><path d="M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg> <span x-show="copied" x-cloak class="absolute bottom-full mb-1.5 left-1/2 -translate-x-1/2 px-2 py-1 rounded bg-nxt-text text-nxt-bg text-[0.65rem] font-semibold whitespace-nowrap">Copied!</span> </button> <a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.nextsoftware.dev%2Fdocumentation%2Fnext-task%2Fconfiguration%2Fsettings&text=Settings%20%E2%80%94%20Next%20Task%20Documentation" target="_blank" rel="noopener noreferrer" aria-label="Share on X" class="inline-flex items-center justify-center w-9 h-9 rounded-nxt-md border border-nxt-border bg-nxt-surface text-nxt-text-secondary no-underline transition-colors hover:border-nxt-text-secondary hover:text-nxt-text [&_svg]:w-[18px] [&_svg]:h-[18px]"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24h-6.66l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg> </a> <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.nextsoftware.dev%2Fdocumentation%2Fnext-task%2Fconfiguration%2Fsettings" target="_blank" rel="noopener noreferrer" aria-label="Share on Facebook" class="inline-flex items-center justify-center w-9 h-9 rounded-nxt-md border border-nxt-border bg-nxt-surface text-nxt-text-secondary no-underline transition-colors hover:border-nxt-text-secondary hover:text-nxt-text [&_svg]:w-[18px] [&_svg]:h-[18px]"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M22 12a10 10 0 1 0-11.56 9.88v-6.99H7.9V12h2.54V9.8c0-2.5 1.49-3.89 3.78-3.89 1.09 0 2.24.2 2.24.2v2.46h-1.26c-1.24 0-1.63.77-1.63 1.56V12h2.78l-.44 2.89h-2.34v6.99A10 10 0 0 0 22 12z"/></svg> </a> <a href="https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.nextsoftware.dev%2Fdocumentation%2Fnext-task%2Fconfiguration%2Fsettings" target="_blank" rel="noopener noreferrer" aria-label="Share on LinkedIn" class="inline-flex items-center justify-center w-9 h-9 rounded-nxt-md border border-nxt-border bg-nxt-surface text-nxt-text-secondary no-underline transition-colors hover:border-nxt-text-secondary hover:text-nxt-text [&_svg]:w-[18px] [&_svg]:h-[18px]"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14zM8.34 18.34V9.99H5.67v8.35h2.67zM7 8.81a1.55 1.55 0 1 0 0-3.1 1.55 1.55 0 0 0 0 3.1zm11.34 9.53v-4.58c0-2.45-1.31-3.59-3.06-3.59-1.41 0-2.04.78-2.39 1.32v-1.13h-2.67c.04.75 0 8.35 0 8.35h2.67v-4.66c0-.24.02-.48.09-.65.19-.48.63-.97 1.36-.97.96 0 1.34.73 1.34 1.8v4.48h2.66z"/></svg> </a> </div> </div> </aside> </div> </div> </div> <!-- Mobile drawer (opens from the right): navigation + on this page --> <div x-show="drawer" x-cloak x-transition.opacity @click="drawer = false" class="fixed inset-0 z-[1500] bg-black/50 min-[1000px]:hidden" aria-hidden="true"></div> <aside x-show="drawer" x-cloak x-transition:enter="transition ease-out duration-200" x-transition:enter-start="translate-x-full" x-transition:enter-end="translate-x-0" x-transition:leave="transition ease-in duration-150" x-transition:leave-start="translate-x-0" x-transition:leave-end="translate-x-full" class="fixed top-0 right-0 z-[1501] h-full w-[300px] max-w-[85vw] bg-nxt-surface border-l border-nxt-border shadow-nxt-xl flex flex-col min-[1000px]:hidden" role="dialog" aria-modal="true" aria-label="Documentation contents"> <div class="flex items-center justify-between px-4 py-3 border-b border-nxt-border"> <span class="text-base font-bold text-nxt-text">Contents</span> <button type="button" @click="drawer = false" aria-label="Close" class="inline-flex items-center justify-center w-8 h-8 rounded-nxt-md bg-transparent border-0 text-nxt-text-secondary hover:bg-nxt-surface-hover hover:text-nxt-text [&_svg]:w-5 [&_svg]:h-5"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </div> <div class="flex-1 overflow-y-auto p-4" data-docs-scroll="drawer" x-effect="if (drawer) { $nextTick(() => window.NemDocs && NemDocs.revealActive($el)); }"> <nav aria-label="Documentation"> <ul class="m-0 list-none flex flex-col gap-0.5 p-0"><li><a href="/documentation/next-task/index" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Overview</a></li><li><a href="/documentation/next-task/installation" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Installation</a></li><li><a href="/documentation/next-task/getting-started" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Quick Start</a></li><li><a href="/documentation/next-task/features" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Features</a></li><li><div x-data="{ o: true }"><div class="flex items-center"><button type="button" @click="o=!o" :aria-expanded="o" class="flex-1 flex items-center justify-between gap-1 bg-transparent border-l-2 border-transparent pl-3 pr-2 py-1.5 text-sm font-bold text-nxt-text hover:text-nxt-primary [&_svg]:w-4 [&_svg]:h-4"><span>Feature guides</span><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="transition-transform text-nxt-text-muted" :class="o && 'rotate-90'"><path d="M8.59 16.59 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg></button></div><div x-show="o" x-cloak><ul class="m-0 list-none flex flex-col gap-0.5 pl-3 mt-0.5"><li><a href="/documentation/next-task/features/all-tasks-board" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">All tasks board</a></li><li><a href="/documentation/next-task/features/lists-and-views" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Lists & smart views</a></li><li><a href="/documentation/next-task/features/subtasks" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Subtasks</a></li><li><a href="/documentation/next-task/features/due-dates" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Due dates & times</a></li><li><a href="/documentation/next-task/features/recurring-tasks" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Recurring tasks</a></li><li><a href="/documentation/next-task/features/starred-tasks" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Starred tasks</a></li><li><a href="/documentation/next-task/features/assignment" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Assignment</a></li><li><a href="/documentation/next-task/features/sharing-and-team-lists" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Sharing & team lists</a></li><li><a href="/documentation/next-task/features/reminders-and-digest" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Reminders & daily digest</a></li><li><a href="/documentation/next-task/features/notifications" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Notifications</a></li><li><a href="/documentation/next-task/features/overview-and-users" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Overview & users</a></li><li><a href="/documentation/next-task/features/manage" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Manage: team lists, transfers, shares</a></li><li><a href="/documentation/next-task/features/roles-and-quotas" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Roles & quotas</a></li><li><a href="/documentation/next-task/features/keyboard-shortcuts" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Keyboard shortcuts & bulk actions</a></li><li><a href="/documentation/next-task/features/offline-and-pwa" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Installable app & offline</a></li><li><a href="/documentation/next-task/features/fullscreen-mode" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Full-screen mode</a></li></ul></div></div></li><li><div x-data="{ o: true }"><div class="flex items-center"><button type="button" @click="o=!o" :aria-expanded="o" class="flex-1 flex items-center justify-between gap-1 bg-transparent border-l-2 border-transparent pl-3 pr-2 py-1.5 text-sm font-bold text-nxt-text hover:text-nxt-primary [&_svg]:w-4 [&_svg]:h-4"><span>Configuration</span><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="transition-transform text-nxt-text-muted" :class="o && 'rotate-90'"><path d="M8.59 16.59 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg></button></div><div x-show="o" x-cloak><ul class="m-0 list-none flex flex-col gap-0.5 pl-3 mt-0.5"><li><a href="/documentation/next-task/configuration/settings" aria-current="page" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-nxt-primary bg-[#EFF6FF] dark:bg-[rgba(59,130,246,0.12)] text-nxt-primary font-semibold">Settings</a></li><li><a href="/documentation/next-task/configuration/roles" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Roles</a></li><li><a href="/documentation/next-task/configuration/app-manager" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">App Manager</a></li><li><a href="/documentation/next-task/configuration/manage" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Team lists, transfers & quotas</a></li><li><a href="/documentation/next-task/configuration/scheduled-tasks" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Reminders & scheduled tasks</a></li><li><a href="/documentation/next-task/configuration/notifications" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Notifications</a></li><li><a href="/documentation/next-task/configuration/pwa" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Installable app</a></li></ul></div></div></li><li><a href="/documentation/next-task/troubleshooting" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">Troubleshooting</a></li><li><a href="/documentation/next-task/faq" class="block border-l-2 pl-3 pr-2 py-1.5 text-sm no-underline transition-colors rounded-r-nxt-md border-transparent text-nxt-text-secondary hover:text-nxt-text hover:bg-nxt-surface-hover">FAQ</a></li></ul> </nav> <div class="mt-6 pt-6 border-t border-nxt-border"> <div class="mb-8"> <p class="text-xs font-semibold uppercase tracking-wide text-nxt-text-muted mb-3">On this page</p> <nav class="flex flex-col gap-1 text-sm border-l border-nxt-border" x-data="{ active: '', lock: false, lt: null }" x-init="$nextTick(() => { const hs = Array.prototype.slice.call(document.querySelectorAll('.nem-docs-body h2[id], .nem-docs-body h3[id]')); if (!hs.length || !('IntersectionObserver' in window)) return; const vis = {}; const io = new IntersectionObserver((es) => { es.forEach(e => { if (e.isIntersecting) { vis[e.target.id] = 1; } else { delete vis[e.target.id]; } }); if (lock) return; for (let i = 0; i < hs.length; i++) { if (vis[hs[i].id]) { active = hs[i].id; break; } } }, { rootMargin: '-80px 0px -70% 0px' }); hs.forEach(h => io.observe(h)); })"> <a href="#task-settings" @click.prevent="active = 'task-settings'; lock = true; clearTimeout(lt); lt = setTimeout(() => { lock = false; }, 800); drawer = false; const el = document.getElementById('task-settings'); if (el) { el.scrollIntoView({ behavior: 'smooth', block: 'start' }); history.replaceState(null, '', '#task-settings'); }" class="-ml-px border-l-2 no-underline transition-colors pl-3 py-0.5" :class="active === 'task-settings' ? 'border-nxt-primary text-nxt-primary font-semibold' : 'border-transparent text-nxt-text-secondary hover:text-nxt-text'">Task Settings</a> <a href="#where-the-rest-is-configured" @click.prevent="active = 'where-the-rest-is-configured'; lock = true; clearTimeout(lt); lt = setTimeout(() => { lock = false; }, 800); drawer = false; const el = document.getElementById('where-the-rest-is-configured'); if (el) { el.scrollIntoView({ behavior: 'smooth', block: 'start' }); history.replaceState(null, '', '#where-the-rest-is-configured'); }" class="-ml-px border-l-2 no-underline transition-colors pl-3 py-0.5" :class="active === 'where-the-rest-is-configured' ? 'border-nxt-primary text-nxt-primary font-semibold' : 'border-transparent text-nxt-text-secondary hover:text-nxt-text'">Where the Rest Is Configured</a> <a href="#scheduled-tasks" @click.prevent="active = 'scheduled-tasks'; lock = true; clearTimeout(lt); lt = setTimeout(() => { lock = false; }, 800); drawer = false; const el = document.getElementById('scheduled-tasks'); if (el) { el.scrollIntoView({ behavior: 'smooth', block: 'start' }); history.replaceState(null, '', '#scheduled-tasks'); }" class="-ml-px border-l-2 no-underline transition-colors pl-3 py-0.5" :class="active === 'scheduled-tasks' ? 'border-nxt-primary text-nxt-primary font-semibold' : 'border-transparent text-nxt-text-secondary hover:text-nxt-text'">Scheduled Tasks</a> </nav> </div> <div class="mb-8"> <p class="text-xs font-semibold uppercase tracking-wide text-nxt-text-muted mb-3">Quick Links</p> <div class="flex flex-col gap-2 text-sm"> <a href="/joomla-extensions/next-task" @click="drawer = false" class="inline-flex items-center gap-2 text-nxt-primary no-underline hover:underline [&_svg]:w-4 [&_svg]:h-4"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></svg> Product Page </a> <a href="/changelogs/next-task" @click="drawer = false" class="inline-flex items-center gap-2 text-nxt-primary no-underline hover:underline [&_svg]:w-4 [&_svg]:h-4"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M13 3a9 9 0 0 0-9 9H1l3.89 3.89.07.14L9 12H6a7 7 0 1 1 7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42A8.954 8.954 0 0 0 13 21a9 9 0 0 0 0-18zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/></svg> Changelogs </a> <a href="/customer-portal#/tickets/new?product=10&subject=Docs%3A%20Settings&message=About%20this%20documentation%20page%3A%20https%3A%2F%2Fwww.nextsoftware.dev%2Fdocumentation%2Fnext-task%2Fconfiguration%2Fsettings" rel="nofollow" @click="drawer = false" class="inline-flex items-center gap-2 text-nxt-primary no-underline hover:underline [&_svg]:w-4 [&_svg]:h-4"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20 2H4a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z"/></svg> Report an issue </a> <button type="button" x-data="{ state: '' }" @click="NemDocs.copyMarkdown('https://www.nextsoftware.dev/index.php?option=com_nextextmanager&task=documentation.markdown&slug=next-task&path=configuration%2Fsettings').then(() => { state = 'done'; }, () => { state = 'fail'; }).then(() => setTimeout(() => state = '', 1500))" class="inline-flex items-center gap-2 p-0 bg-transparent border-0 cursor-pointer text-left text-sm text-nxt-primary hover:underline [&_svg]:w-4 [&_svg]:h-4"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M16 1H4a2 2 0 0 0-2 2v14h2V3h12V1zm3 4H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2zm0 16H8V7h11v14z"/></svg> <span x-text="state === 'done' ? 'Copied!' : (state === 'fail' ? 'Copy failed' : 'Copy page as Markdown')">Copy page as Markdown</span> </button> </div> </div> <div> <p class="text-xs font-semibold uppercase tracking-wide text-nxt-text-muted mb-3">Share</p> <div class="flex items-center gap-2"> <button type="button" aria-label="Copy link" x-data="{ copied: false }" @click="navigator.clipboard && navigator.clipboard.writeText(window.location.href).then(() => { copied = true; setTimeout(() => copied = false, 1500); })" class="relative inline-flex items-center justify-center w-9 h-9 rounded-nxt-md border border-nxt-border bg-nxt-surface text-nxt-text-secondary cursor-pointer transition-colors hover:border-nxt-text-secondary hover:text-nxt-text [&_svg]:w-[18px] [&_svg]:h-[18px]"> <svg x-show="!copied" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M16 1H4a2 2 0 0 0-2 2v14h2V3h12V1zm3 4H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2zm0 16H8V7h11v14z"/></svg> <svg x-show="copied" x-cloak viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="text-green-600"><path d="M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg> <span x-show="copied" x-cloak class="absolute bottom-full mb-1.5 left-1/2 -translate-x-1/2 px-2 py-1 rounded bg-nxt-text text-nxt-bg text-[0.65rem] font-semibold whitespace-nowrap">Copied!</span> </button> <a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.nextsoftware.dev%2Fdocumentation%2Fnext-task%2Fconfiguration%2Fsettings&text=Settings%20%E2%80%94%20Next%20Task%20Documentation" target="_blank" rel="noopener noreferrer" aria-label="Share on X" class="inline-flex items-center justify-center w-9 h-9 rounded-nxt-md border border-nxt-border bg-nxt-surface text-nxt-text-secondary no-underline transition-colors hover:border-nxt-text-secondary hover:text-nxt-text [&_svg]:w-[18px] [&_svg]:h-[18px]"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24h-6.66l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg> </a> <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.nextsoftware.dev%2Fdocumentation%2Fnext-task%2Fconfiguration%2Fsettings" target="_blank" rel="noopener noreferrer" aria-label="Share on Facebook" class="inline-flex items-center justify-center w-9 h-9 rounded-nxt-md border border-nxt-border bg-nxt-surface text-nxt-text-secondary no-underline transition-colors hover:border-nxt-text-secondary hover:text-nxt-text [&_svg]:w-[18px] [&_svg]:h-[18px]"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M22 12a10 10 0 1 0-11.56 9.88v-6.99H7.9V12h2.54V9.8c0-2.5 1.49-3.89 3.78-3.89 1.09 0 2.24.2 2.24.2v2.46h-1.26c-1.24 0-1.63.77-1.63 1.56V12h2.78l-.44 2.89h-2.34v6.99A10 10 0 0 0 22 12z"/></svg> </a> <a href="https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.nextsoftware.dev%2Fdocumentation%2Fnext-task%2Fconfiguration%2Fsettings" target="_blank" rel="noopener noreferrer" aria-label="Share on LinkedIn" class="inline-flex items-center justify-center w-9 h-9 rounded-nxt-md border border-nxt-border bg-nxt-surface text-nxt-text-secondary no-underline transition-colors hover:border-nxt-text-secondary hover:text-nxt-text [&_svg]:w-[18px] [&_svg]:h-[18px]"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14zM8.34 18.34V9.99H5.67v8.35h2.67zM7 8.81a1.55 1.55 0 1 0 0-3.1 1.55 1.55 0 0 0 0 3.1zm11.34 9.53v-4.58c0-2.45-1.31-3.59-3.06-3.59-1.41 0-2.04.78-2.39 1.32v-1.13h-2.67c.04.75 0 8.35 0 8.35h2.67v-4.66c0-.24.02-.48.09-.65.19-.48.63-.97 1.36-.97.96 0 1.34.73 1.34 1.8v4.48h2.66z"/></svg> </a> </div> </div> </div> </div> </aside> <!-- Search palette (Alpine) --> <div x-show="sOpen" x-cloak class="fixed inset-0 z-[1600]" role="dialog" aria-modal="true" aria-label="Search documentation"> <div @click="sHide()" x-transition.opacity class="absolute inset-0 bg-black/20 backdrop-blur-sm"></div> <div class="relative mx-auto mt-[12vh] w-[92%] max-w-xl bg-nxt-surface border border-nxt-border rounded-nxt-xl shadow-nxt-xl overflow-hidden" x-transition:enter="transition ease-out duration-150" x-transition:enter-start="opacity-0 -translate-y-2" x-transition:enter-end="opacity-100 translate-y-0"> <div class="flex items-center gap-2 px-4 border-b border-nxt-border [&_svg]:w-5 [&_svg]:h-5"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="text-nxt-text-muted"><path d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 1 0-.7.7l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0A4.5 4.5 0 1 1 14 9.5 4.5 4.5 0 0 1 9.5 14z"/></svg> <input x-ref="sq" x-model="q" @input="refresh()" @keydown.down.prevent="sMove(1)" @keydown.up.prevent="sMove(-1)" @keydown.enter.prevent="sGo()" type="text" autocomplete="off" placeholder="Search documentation..." class="flex-1 h-12 bg-transparent border-0 outline-none text-nxt-text text-base placeholder:text-nxt-text-muted" /> <button type="button" @click="sHide()" aria-label="Close" class="inline-flex items-center justify-center w-7 h-7 rounded bg-transparent border-0 text-nxt-text-muted hover:text-nxt-text hover:bg-nxt-surface-hover [&_svg]:w-4 [&_svg]:h-4"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </div> <div x-show="q && items.length" class="px-4 py-2 text-xs text-nxt-text-muted border-b border-nxt-border" x-text="items.length + (items.length === 1 ? ' result' : ' results')"></div> <div class="max-h-[50vh] overflow-y-auto p-2"> <template x-for="(r, i) in items" :key="r.path"> <div> <p x-show="r.group" x-text="r.group" class="px-3 pt-3 pb-1 m-0 text-[0.65rem] font-semibold uppercase tracking-wide text-nxt-text-muted"></p> <a :href="r.url" @mouseenter="sel = i" class="block px-3 py-2.5 rounded-nxt-md no-underline" :class="sel === i ? 'bg-nxt-surface-hover' : ''"> <span class="flex items-center text-sm font-semibold text-nxt-text"> <span x-show="r.method" x-cloak x-text="r.method === 'EVENT' ? 'EVT' : r.method" class="shrink-0 w-10 text-center text-[0.6rem] font-bold uppercase tracking-wide px-1 py-px mr-2 rounded border bg-nxt-surface-hover text-nxt-text-muted border-nxt-border"></span> <span class="truncate" x-text="r.crumb"></span> </span> <span class="block text-xs text-nxt-text-secondary mt-0.5 truncate"><span x-text="r.pre"></span><mark class="bg-[#FEF3C7] text-[#92400E] rounded-[2px] px-0.5" x-text="r.match"></mark><span x-text="r.post"></span></span> </a> </div> </template> <div x-show="q && !items.length" class="px-3 py-8 text-center text-sm text-nxt-text-muted">No results</div> <div x-show="!q" class="px-3 py-8 text-center text-sm text-nxt-text-muted">Type to search…</div> </div> <div class="flex items-center gap-4 px-4 py-2 border-t border-nxt-border text-[0.7rem] text-nxt-text-muted [&_kbd]:px-1 [&_kbd]:border [&_kbd]:border-nxt-border [&_kbd]:rounded"> <span><kbd>↑↓</kbd> Navigate</span> <span><kbd>↵</kbd> Select</span> <span><kbd>esc</kbd> Close</span> </div> </div> </div> <!-- Image lightbox --> <div x-show="lbOpen" x-cloak x-transition.opacity @click="lbOpen = false" class="fixed inset-0 z-[1700] flex items-center justify-center p-4 bg-black/80 cursor-zoom-out" role="dialog" aria-modal="true" aria-label="Image preview"> <img :src="lbSrc" :alt="lbAlt" alt="Screenshot" class="max-w-full max-h-[90vh] rounded-nxt-md shadow-nxt-xl" /> <button type="button" @click="lbOpen = false" aria-label="Close" class="absolute top-4 right-4 inline-flex items-center justify-center w-10 h-10 rounded-full bg-black/50 border-0 text-white cursor-pointer [&_svg]:w-6 [&_svg]:h-6"> <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </div> </section> </main> <!-- Footer (per-brand include; JoomCoder gets its own code-themed layout) --> <!-- Footer --> <footer class="nxt-footer-root bg-nxt-footer-bg text-nxt-footer-text"> <div class="max-w-nxt mx-auto px-4 min-[600px]:px-6 pt-12 min-[600px]:pt-16"> <section class="pb-10 mb-10 border-b border-nxt-footer-border" aria-labelledby="nxt-footer-browse-h"> <h3 id="nxt-footer-browse-h" class="text-xs font-bold text-nxt-footer-heading uppercase tracking-[0.12em] m-0 mb-6"> <a href="/joomla-extensions" class="text-inherit hover:text-[#3b82f6]">Browse the Catalogue</a> </h3> <div class="grid grid-cols-1 min-[960px]:grid-cols-[3fr_1fr_1fr] gap-8 min-[960px]:gap-12"> <div class="flex flex-col gap-4 min-w-0"> <h4 class="text-[0.8125rem] font-semibold text-nxt-footer-heading uppercase tracking-[0.08em] m-0">By Category</h4> <ul class="list-none p-0 m-0 grid grid-cols-[repeat(auto-fill,minmax(140px,1fr))] min-[601px]:grid-cols-3 gap-y-2 gap-x-4 min-[601px]:gap-x-6"> <li> <a href="/joomla-extensions/category-sales-marketing" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Sales & Marketing</span> </a> </li> <li> <a href="/joomla-extensions/category-collaboration" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Collaboration</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">3</span> </a> </li> <li> <a href="/joomla-extensions/category-it-help-desk" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">IT & Help Desk</span> </a> </li> <li> <a href="/joomla-extensions/category-finance" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Finance</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">1</span> </a> </li> <li> <a href="/joomla-extensions/category-human-resources" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Human Resources</span> </a> </li> <li> <a href="/joomla-extensions/category-ecommerce" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">eCommerce</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">2</span> </a> </li> <li> <a href="/joomla-extensions/category-multimedia" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Multimedia</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">1</span> </a> </li> <li> <a href="/joomla-extensions/category-directory" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Directory</span> </a> </li> <li> <a href="/joomla-extensions/category-education" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Education</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">1</span> </a> </li> <li> <a href="/joomla-extensions/category-contact-feedbacks" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Contact & Feedbacks</span> </a> </li> <li> <a href="/joomla-extensions/category-content" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Content</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">3</span> </a> </li> <li> <a href="/joomla-extensions/category-seo" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">SEO & Privacy</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">3</span> </a> </li> <li> <a href="/joomla-extensions/category-booking" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Booking</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">1</span> </a> </li> <li> <a href="/joomla-extensions/category-calendars-events" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Calendars & Events</span> </a> </li> <li> <a href="/joomla-extensions/category-automation" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Automation</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">1</span> </a> </li> <li> <a href="/joomla-extensions/category-security-access" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Security & Access</span> </a> </li> <li> <a href="/joomla-extensions/category-tools" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Tools</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">2</span> </a> </li> </ul> </div> <div class="flex flex-col gap-4 min-w-0"> <h4 class="text-[0.8125rem] font-semibold text-nxt-footer-heading uppercase tracking-[0.08em] m-0">By Type</h4> <ul class="list-none p-0 m-0 flex flex-col gap-2"> <li> <a href="/joomla-extensions/type-package" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Package</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">7</span> </a> </li> <li> <a href="/joomla-extensions/type-plugin" class="flex items-center justify-between gap-2 text-sm min-w-0"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Plugin</span> <span class="shrink-0 text-[0.6875rem] font-semibold px-[7px] py-px rounded-[10px] bg-white/[0.06] text-nxt-footer-text-secondary leading-[1.5]">3</span> </a> </li> </ul> </div> <div class="flex flex-col gap-4 min-w-0"> <h4 class="text-[0.8125rem] font-semibold text-nxt-footer-heading uppercase tracking-[0.08em] m-0">All Extensions</h4> <button type="button" class="flex items-center justify-between gap-2 w-full px-[14px] py-[10px] bg-white/[0.04] border border-white/[0.08] rounded-[10px] text-nxt-footer-text-secondary text-sm cursor-pointer transition-[background-color,border-color,color] duration-[120ms] hover:bg-white/[0.08] hover:border-white/[0.18] hover:text-white focus-visible:bg-white/[0.08] focus-visible:border-white/[0.18] focus-visible:text-white focus-visible:outline-none" data-open="all-extensions" aria-haspopup="dialog"> <span class="min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">Browse all 10</span> <span class="text-base leading-none" aria-hidden="true">↗</span> </button> </div> </div> </section> <div class="grid grid-cols-1 min-[600px]:grid-cols-2 min-[960px]:grid-cols-[1.5fr_1fr_1fr_1fr] gap-8 min-[600px]:gap-10 min-[960px]:gap-12 pb-12 border-b border-nxt-footer-border"> <!-- Brand column --> <div class="flex flex-col gap-5 min-[600px]:col-span-2 min-[960px]:col-span-1"> <a href="/" aria-label="NextSoftware home" class="inline-block focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--nxt-focus-color,#4f8cff)] focus-visible:outline-offset-4 focus-visible:rounded-[2px]"> <div class="nxt-footer-logo flex items-center"> <svg viewBox="0 0 195 28" xmlns="http://www.w3.org/2000/svg"> <text y="23" font-family="'Inter', system-ui, -apple-system, sans-serif" font-size="26" letter-spacing="-0.5"> <tspan font-weight="800" fill="#ffffff">Next</tspan> <tspan dx="-4.5" font-weight="300" fill="rgba(255,255,255,0.7)">Software</tspan> </text> </svg> </div> </a> <p class="text-sm leading-[1.7] text-nxt-footer-text-secondary max-w-[320px] m-0"> Premium Joomla extensions crafted with care. Build better websites with professional components, modules, and plugins. </p> <div class="flex gap-3 mt-1"> <a href="#" class="flex items-center justify-center w-9 h-9 rounded-nxt-md bg-white/[0.06] transition-all hover:bg-white/[0.12] hover:-translate-y-0.5 [&_svg]:w-[18px] [&_svg]:h-[18px] [&_svg]:fill-current" target="_blank" rel="noopener" aria-label="GitHub"> <svg viewBox="0 0 24 24"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"/></svg> </a> <a href="https://x.com/nextsoftdev" class="flex items-center justify-center w-9 h-9 rounded-nxt-md bg-white/[0.06] transition-all hover:bg-white/[0.12] hover:-translate-y-0.5 [&_svg]:w-[18px] [&_svg]:h-[18px] [&_svg]:fill-current" target="_blank" rel="noopener" aria-label="Twitter"> <svg viewBox="0 0 24 24"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg> </a> <a href="#" class="flex items-center justify-center w-9 h-9 rounded-nxt-md bg-white/[0.06] transition-all hover:bg-white/[0.12] hover:-translate-y-0.5 [&_svg]:w-[18px] [&_svg]:h-[18px] [&_svg]:fill-current" target="_blank" rel="noopener" aria-label="YouTube"> <svg viewBox="0 0 24 24"><path d="M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg> </a> <a href="#" class="flex items-center justify-center w-9 h-9 rounded-nxt-md bg-white/[0.06] transition-all hover:bg-white/[0.12] hover:-translate-y-0.5 [&_svg]:w-[18px] [&_svg]:h-[18px] [&_svg]:fill-current" target="_blank" rel="noopener" aria-label="Discord"> <svg viewBox="0 0 24 24"><path d="M20.317 4.37a19.791 19.791 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.736 19.736 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.107 13.107 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.299 12.299 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.839 19.839 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"/></svg> </a> </div> </div> <!-- Latest News column --> <div class="flex flex-col gap-4"> <h4 class="text-[0.8125rem] font-semibold text-nxt-footer-heading uppercase tracking-[0.08em] m-0">Latest News</h4> <ul class="list-none p-0 m-0 flex flex-col gap-[10px]"> <li><a href="/news/next-task-6-0-0-task-manager-for-joomla" class="text-sm inline-flex items-center gap-1.5">Next Task 6.0.0: a task manager for Joomla</a></li> <li><a href="/news/next-inventory-6-1-1-smoother-check-out-no-more-list-limits" class="text-sm inline-flex items-center gap-1.5">Next Inventory 6.1.1: smoother Check Out, no more list limits, and much faster</a></li> <li><a href="/news/joomla-language-overrides-vs-wordpress" class="text-sm inline-flex items-center gap-1.5">Joomla Language Overrides: Change Any Text Without Touching Core Files (and How WordPress Compares)</a></li> <li><a href="/news/php2shell-is-your-joomla-site-safe" class="text-sm inline-flex items-center gap-1.5">PHP2Shell: Is Your Joomla Site Safe? What to Do Today</a></li> <li><a href="/news/introducing-next-boards-kanban-project-and-task-boards-for-joomla" class="text-sm inline-flex items-center gap-1.5">Introducing Next Boards: Kanban project and task boards for Joomla</a></li> </ul> <a href="/news" class="inline-block mt-[14px] text-[0.8125rem] font-semibold text-[#7d97c4] transition-opacity hover:opacity-80">View all news →</a> </div> <!-- Latest Changelogs column --> <div class="flex flex-col gap-4"> <h4 class="text-[0.8125rem] font-semibold text-nxt-footer-heading uppercase tracking-[0.08em] m-0">Latest Changelogs</h4> <ul class="list-none p-0 m-0 flex flex-col gap-[10px]"> <li><a href="/changelogs/next-task" class="text-sm inline-flex items-center gap-1.5">Next Task v6.0.0</a></li> <li><a href="/changelogs/next-exams" class="text-sm inline-flex items-center gap-1.5">Next Exams v6.2.2</a></li> <li><a href="/changelogs/next-inventory" class="text-sm inline-flex items-center gap-1.5">Next Inventory v6.1.1</a></li> <li><a href="/changelogs/next-boards" class="text-sm inline-flex items-center gap-1.5">Next Boards v6.0.0</a></li> <li><a href="/changelogs/next-exams" class="text-sm inline-flex items-center gap-1.5">Next Exams v6.2.1</a></li> <li><a href="/changelogs/next-exams" class="text-sm inline-flex items-center gap-1.5">Next Exams v6.2.0</a></li> <li><a href="/changelogs/smart-local-google-analytics" class="text-sm inline-flex items-center gap-1.5">Smart Local Google Analytics v6.1.0</a></li> <li><a href="/changelogs/next-exams" class="text-sm inline-flex items-center gap-1.5">Next Exams v6.1.0</a></li> <li><a href="/changelogs/next-restaurant" class="text-sm inline-flex items-center gap-1.5">Next Restaurant v6.0.0</a></li> <li><a href="/changelogs/next-db" class="text-sm inline-flex items-center gap-1.5">Next DB v6.0.1</a></li> </ul> <a href="/changelogs" class="inline-block mt-[14px] text-[0.8125rem] font-semibold text-[#7d97c4] transition-opacity hover:opacity-80">View all changelogs →</a> </div> <!-- Links column (from configurable menu) --> <div class="flex flex-col gap-4"> <h4 class="text-[0.8125rem] font-semibold text-nxt-footer-heading uppercase tracking-[0.08em] m-0">Links</h4> <ul class="list-none p-0 m-0 flex flex-col gap-[10px]"> <li><a href="/documentation" class="text-sm inline-flex items-center gap-1.5">Docs</a></li> <li><a href="/customer-portal" class="text-sm inline-flex items-center gap-1.5">Customer Portal</a></li> <li><a href="/about-us" class="text-sm inline-flex items-center gap-1.5">About Us</a></li> <li><a href="/contact-us" class="text-sm inline-flex items-center gap-1.5">Contact Us</a></li> <li><a href="/faq" class="text-sm inline-flex items-center gap-1.5">FAQ</a></li> <li><a href="/privacy-policy" class="text-sm inline-flex items-center gap-1.5">Privacy Policy</a></li> <li><a href="/refund-policy" class="text-sm inline-flex items-center gap-1.5">Refund Policy</a></li> <li><a href="/terms-of-service" class="text-sm inline-flex items-center gap-1.5">Terms Of Service</a></li> </ul> </div> </div> </div> <!-- Bottom bar --> <div class="bg-nxt-footer-bottom-bg"> <div class="max-w-nxt mx-auto py-5 px-4 min-[600px]:px-6 flex flex-col items-center gap-3 text-[0.8125rem] text-nxt-footer-text-secondary text-center min-[600px]:flex-row min-[600px]:justify-between min-[600px]:gap-0 min-[600px]:text-left"> <span>© 2026 AppWise. All rights reserved.</span> <div class="flex gap-4 min-[600px]:gap-6"> <a href="/privacy-policy" class="text-[0.8125rem]">Privacy Policy</a> <a href="/terms-of-service" class="text-[0.8125rem]">Terms of Service</a> <a href="/refund-policy" class="text-[0.8125rem]">Refund Policy</a> </div> </div> </div> <!-- Trademark disclaimer --> <div class="border-t border-nxt-footer-border max-w-nxt mx-auto px-6 py-4 text-center"> <p class="m-0 text-[0.6875rem] leading-[1.5] text-nxt-footer-text-secondary opacity-70">www.nextsoftware.dev is not affiliated with or endorsed by the Joomla! Project or Open Source Matters. The Joomla! name and logo is used under a limited license granted by Open Source Matters the trademark holder in the United States and other countries.</p> </div> </footer> <!-- All Extensions modal — content lives in the page HTML so crawlers see all product anchors. Native <dialog> stays closed until the footer button calls showModal(); Google explicitly permits this user-triggered reveal pattern (see SEO plan how-to-fix-this-clever-ripple.md). --> <dialog id="nxt-all-extensions-dialog" class="max-w-[560px] w-[calc(100%-32px)] max-h-[80vh] p-0 border border-black/[0.08] rounded-[14px] shadow-[0_24px_60px_rgba(0,0,0,0.25)] bg-white text-[#0f172a] overflow-hidden backdrop:bg-[rgba(15,23,42,0.55)] backdrop:backdrop-blur-[2px] dark:bg-[#0f172a] dark:text-[#e2e8f0] dark:border-white/[0.08]" aria-labelledby="nxt-all-extensions-title"> <header class="flex items-center justify-between gap-4 px-[22px] py-[18px] border-b border-[#e2e8f0] dark:border-white/[0.08]"> <h2 id="nxt-all-extensions-title" class="m-0 text-[1.05rem] font-bold text-[#0f172a] dark:text-[#f8fafc]">All Extensions</h2> <form method="dialog"> <button type="submit" class="bg-transparent border-0 text-2xl leading-none text-[#64748b] cursor-pointer px-2.5 py-1 rounded-lg transition-[background-color,color] duration-[120ms] hover:bg-[#f1f5f9] hover:text-[#0f172a] focus-visible:bg-[#f1f5f9] focus-visible:text-[#0f172a] focus-visible:outline-none dark:text-[#94a3b8] dark:hover:bg-white/[0.06] dark:hover:text-[#f8fafc] dark:focus-visible:bg-white/[0.06] dark:focus-visible:text-[#f8fafc]" aria-label="Close">×</button> </form> </header> <ul class="list-none p-2 m-0 overflow-y-auto max-h-[calc(80vh-70px)]"> <li class="m-0"> <a href="/joomla-extensions/next-boards" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Next Boards</strong> <span class="block mt-0.5 text-[0.8125rem] text-[#64748b] leading-[1.4]">Next Boards is a Trello-style Kanban project and task board for Joomla CMS. Plan work on boards of lists and cards, with workspaces, four views, automation, a personal Inbox and Planner, in the Joomla administrator, on your site and on a phone.</span> </a> </li> <li class="m-0"> <a href="/joomla-extensions/next-db" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Next DB</strong> <span class="block mt-0.5 text-[0.8125rem] text-[#64748b] leading-[1.4]">Joomla-native database administration with multi-database editing, fine-grained access control and a full audit trail — all inside the Joomla admin.</span> </a> </li> <li class="m-0"> <a href="/joomla-extensions/next-exams" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Next Exams</strong> <span class="block mt-0.5 text-[0.8125rem] text-[#64748b] leading-[1.4]">Exam and assessment management for Joomla — a fifteen-type question bank, a server-authoritative exam runner, automatic grading, certificates and live invigilation, all inside your own site.</span> </a> </li> <li class="m-0"> <a href="/joomla-extensions/next-file-manager" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Next File Manager</strong> <span class="block mt-0.5 text-[0.8125rem] text-[#64748b] leading-[1.4]">Profile-based file management for Joomla, spanning the server, SFTP, FTP, WebDAV and S3 — with per-user access scopes, protected paths and a full activity log.</span> </a> </li> <li class="m-0"> <a href="/joomla-extensions/next-inventory" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Next Inventory</strong> <span class="block mt-0.5 text-[0.8125rem] text-[#64748b] leading-[1.4]">Modern inventory management for Joomla — track assets, consumables, and sellables with barcode scanning, multi-warehouse stock, low-stock alerts, dark mode, and a full audit trail.</span> </a> </li> <li class="m-0"> <a href="/joomla-extensions/next-restaurant" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Next Restaurant</strong> <span class="block mt-0.5 text-[0.8125rem] text-[#64748b] leading-[1.4]">A complete restaurant management system inside Joomla — menu, online and QR ordering, reservations, kitchen display, point of sale, delivery, inventory and payments, all from one admin.</span> </a> </li> <li class="m-0"> <a href="/joomla-extensions/next-task" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Next Task</strong> <span class="block mt-0.5 text-[0.8125rem] text-[#64748b] leading-[1.4]">Next Task is a task manager for Joomla 4.4, 5 and 6: personal, shared and team lists, subtasks, recurring tasks, a board of every list, reminders, roles and an installable app.</span> </a> </li> <li class="m-0"> <a href="/joomla-extensions/smart-local-google-analytics" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Smart Local Google Analytics</strong> <span class="block mt-0.5 text-[0.8125rem] text-[#64748b] leading-[1.4]">GDPR-compliant cookie consent manager for Google Analytics 4 and Tag Manager on Joomla — with local script hosting, themes, and geo-detection.</span> </a> </li> <li class="m-0"> <a href="/joomla-extensions/smart-local-google-maps" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Smart Local Google Maps</strong> </a> </li> <li class="m-0"> <a href="/joomla-extensions/smart-local-youtube" class="block px-[14px] py-3 rounded-[10px] no-underline !text-inherit transition-[background-color] duration-[120ms] hover:bg-[#f1f5f9] focus-visible:bg-[#f1f5f9] focus-visible:outline-none dark:hover:bg-white/[0.06] dark:focus-visible:bg-white/[0.06]"> <strong class="block font-bold text-[0.95rem] text-[#0f172a] dark:text-[#f8fafc]">Smart Local Youtube</strong> </a> </li> </ul> </dialog> <script> (function() { var trigger = document.querySelector('[data-open="all-extensions"]'); var dialog = document.getElementById('nxt-all-extensions-dialog'); if (!trigger || !dialog || typeof dialog.showModal !== 'function') return; trigger.addEventListener('click', function() { dialog.showModal(); }); dialog.addEventListener('click', function(e) { if (e.target === dialog) dialog.close(); }); })(); </script> <!-- Floating support widget (server-rendered, Alpine-enhanced; desktop only) --> <div x-data="nxtSupport()" @click.outside="open=false" class="nxt-chrome fixed bottom-6 right-6 z-[1400] hidden min-[900px]:flex flex-col items-end"> <div x-show="open" x-cloak @keydown.escape.window="open=false" x-transition:enter="transition ease-out duration-200" x-transition:enter-start="opacity-0 scale-90" x-transition:enter-end="opacity-100 scale-100" x-transition:leave="transition ease-in duration-150" x-transition:leave-start="opacity-100 scale-100" x-transition:leave-end="opacity-0 scale-90" class="origin-bottom-right mb-4 w-[340px] max-w-[calc(100vw-3rem)] rounded-2xl overflow-hidden bg-nxt-surface text-nxt-text border border-nxt-border shadow-nxt-xl"> <div class="flex items-center justify-between gap-4 px-5 py-4 bg-[linear-gradient(135deg,#1E40AF_0%,#3B82F6_100%)]"> <div> <div class="text-white font-bold leading-snug">Need help?</div> <div class="text-white/80 text-sm mt-0.5">Choose how we can assist you</div> </div> <button type="button" @click="open=false" aria-label="Close" class="inline-flex p-1 rounded text-white/80 hover:text-white cursor-pointer"><svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg></button> </div> <div class="py-2"> <a href="/contact-us" class="flex items-center gap-3 px-5 py-3 no-underline text-nxt-text hover:bg-nxt-surface-hover"> <span class="w-10 h-10 rounded-full inline-flex items-center justify-center shrink-0 text-white" style="background:#3B82F6"><svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 14H4V8l8 5 8-5zm-8-7L4 6h16z"/></svg></span> <span class="flex-1 min-w-0"> <span class="block text-sm font-semibold">Contact Us</span> <span class="block text-xs text-nxt-text-secondary">Send us a message directly</span> </span> <svg class="w-5 h-5 shrink-0 text-nxt-text-muted" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg> </a> <div class="mx-5 h-px bg-nxt-border"></div> <a href="https://services.nextsoftware.dev" class="flex items-center gap-3 px-5 py-3 no-underline text-nxt-text hover:bg-nxt-surface-hover"> <span class="w-10 h-10 rounded-full inline-flex items-center justify-center shrink-0 text-white" style="background:#D97706"><svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m16.24 11.51 1.57-1.57-3.75-3.75-1.57 1.57-4.14-4.13c-.78-.78-2.05-.78-2.83 0l-1.9 1.9c-.78.78-.78 2.05 0 2.83l4.13 4.13L3 17.25V21h3.75l4.76-4.76 4.13 4.13c.95.95 2.23.6 2.83 0l1.9-1.9c.78-.78.78-2.05 0-2.83zm-7.06-.44L5.04 6.94l1.89-1.9L8.2 6.31 7.02 7.5l1.41 1.41 1.19-1.19 1.45 1.45zm7.88 7.89-4.13-4.13 1.9-1.9 1.45 1.45-1.19 1.19 1.41 1.41 1.19-1.19 1.27 1.27zm3.65-11.92c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.47-.47-1.12-.29-1.41 0l-1.83 1.83 3.75 3.75z"/></svg></span> <span class="flex-1 min-w-0"> <span class="block text-sm font-semibold">Custom Development</span> <span class="block text-xs text-nxt-text-secondary">Request a quote for services</span> </span> <svg class="w-5 h-5 shrink-0 text-nxt-text-muted" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg> </a> <div class="mx-5 h-px bg-nxt-border"></div> <a href="/login#/login" class="flex items-center gap-3 px-5 py-3 no-underline text-nxt-text hover:bg-nxt-surface-hover"> <span class="w-10 h-10 rounded-full inline-flex items-center justify-center shrink-0 text-white" style="background:#10B981"><svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8z"/></svg></span> <span class="flex-1 min-w-0"> <span class="block text-sm font-semibold">Sign In</span> <span class="block text-xs text-nxt-text-secondary">Access tickets, downloads & portal</span> </span> <svg class="w-5 h-5 shrink-0 text-nxt-text-muted" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg> </a> </div> </div> <button type="button" @click="open=!open" :class="pulse && 'animate-[nxtSupportPulse_1.5s_ease-in-out_2]'" aria-label="Support" class="w-14 h-14 rounded-full inline-flex items-center justify-center bg-nxt-primary text-white shadow-[0_4px_14px_rgba(30,64,175,0.4)] cursor-pointer transition hover:brightness-110"> <span x-show="!open"><svg class="w-6 h-6" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M21 12.22C21 6.73 16.74 3 12 3c-4.69 0-9 3.65-9 9.28-.6.34-1 .98-1 1.72v2c0 1.1.9 2 2 2h1v-6.1c0-3.87 3.13-7 7-7s7 3.13 7 7V19h-8v2h8c1.1 0 2-.9 2-2v-1.22c.59-.31 1-.92 1-1.64v-2.3c0-.7-.41-1.31-1-1.62"/><path d="M18 11.03C17.52 8.18 15.04 6 12.05 6c-3.03 0-6.29 2.51-6.03 6.45 2.47-1.01 4.33-3.21 4.86-5.89 1.31 2.63 4 4.44 7.12 4.47"/></svg></span> <span x-show="open" x-cloak><svg class="w-6 h-6" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg></span> </button> </div> </body> </html>