[{"data":1,"prerenderedAt":1038},["ShallowReactive",2],{"$f27n9zraowk6y0":3,"mdc-nb8e9k-key":15},{"release":4,"newer":10,"older":12,"page":14},{"tag":5,"name":5,"publishedAt":6,"url":7,"prerelease":8,"markdown":9},"v1.0.11","2026-05-01T14:25:37Z","https:\u002F\u002Fgithub.com\u002Fanhourtec\u002FBookYourPTO-SaaS\u002Freleases\u002Ftag\u002Fv1.0.11",false,"### Documents Redesign\r\n\r\nA top-to-bottom rework of the Documents experience. The \u002Fdocuments page now opens to a familiar filing-cabinet view of every employee's drawer, custom folders sit alongside the 13 built-in categories, the upload flow has separate Store and Sign modes, and the document detail page has a large preview and a quieter sidebar. Most of this release is in the documents area; the rest is small fixes around feature-flag propagation, exports, and dependency updates.\r\n\r\n### New Features — My Documents (filing cabinet)\r\n\r\n- **Folder cabinet for every user** — The \u002Fdocuments page opens on \"My Documents\" — a 2-3 column grid of folder tiles for every employee in the org. Each user always sees the full cabinet (13 built-in categories: Contracts, Offer Letters, Salary Increments, Performance Reviews, Policy Documents, ID Documents, Certificates, Training Materials, Medical Certificates, Visa Documents, Tax Documents, Insurance, Other) — even if a folder is empty — so you can drop a new doc straight into the right category instead of routing everything through a generic Upload entry point.\r\n\r\n- **Folder visual** — Each tile is rendered as an actual two-layer folder shape (tab + body) tinted by the category's brand color. Empty folders sit at low opacity; populated folders take a bolder tint plus a colored count badge in the corner. Hover lifts the folder graphic for a subtle \"pluck-out\" feel. The \"New folder\" tile mirrors the same shape with a dashed outline so it sits in the cabinet visually.\r\n\r\n- **Custom folders** — Per-user custom folders sit above the 13 built-in categories. Pick a name (max 50 chars), a Lucide icon from a curated set, and a hex color from a swatch grid. Folders are scoped to a single user's drawer.\r\n\r\n- **Folder context menu** — Edit \u002F rename \u002F re-icon \u002F recolor \u002F delete on any custom folder via the context menu that surfaces on hover. Soft-deleted folders release their name slot immediately, so you can recreate a folder with the same name without hitting a unique-constraint error.\r\n\r\n- **Tag filter** — Folder grid carries a tag filter dropdown sourced from the docs in the currently visible scope. Selecting a tag at the top level drops you into a flat result list with cross-folder matches; inside an open folder, the tag narrows that folder. Composes with search.\r\n\r\n- **Folder URL routing** — Open folders are encoded as `?folder=offer-letters` etc., so refresh, browser-back, and shared links keep state. Custom folders use `?folder=custom:\u003Cid>` for unambiguity.\r\n\r\n- **Per-user folder pages** — `\u002Fusers\u002F{id}` now shows the same folder grid component on the Documents tab. Admins, Executives, and Department Heads (for in-scope employees) can browse a coworker's drawer; everyone else sees their own.\r\n\r\n- **Role-gated folder creation** — The \"New folder\" tile is hidden when an employee or department head is viewing their own drawer — you don't manage your own filing structure as a non-admin. It's still available to admins \u002F executives anywhere, and to department heads viewing an in-scope employee.\r\n\r\n### New Features — Action Required\r\n\r\n- **Unified attention dashboard** — Action Required is now a single dashboard that aggregates pending signatures + expiring documents into one list, with chips to filter by All \u002F Sign \u002F Expiring \u002F Overdue and stat tiles that double as filters. Replaces the old separate Inbox \u002F Completed \u002F Expiring rails.\r\n\r\n- **Sent-style toolbar** — Search, status filter, sort, Export, admin-only Templates \u002F Bulk Send shortcuts, and a Start CTA on top of a desktop table + mobile card list. Pagination footer with rows-per-page selector renders whenever the list has any items.\r\n\r\n- **Completed view folded in** — The retired ?view=completed page is now a fifth chip + filter on Action Required. URL syncs via `?filter=` so refresh and back-button preserve state.\r\n\r\n### New Features — Drive-style Upload Page\r\n\r\n- **Two-mode upload** — `\u002Fdocuments\u002Fupload` ships with a Store \u002F Sign segmented control rendered as a sliding-pill tab, each mode laid out as a 2-column drive view: large file dropzone + live PDF or image preview on the left, metadata aside on the right. Mode is URL-synced via `?mode=store|sign` so deep-links and refresh land consistently.\r\n\r\n- **Store mode** — A dedicated form for filing a doc in a built-in category or a per-user custom folder. Posts to the existing personal-upload endpoint. Optionally targets another user when the caller can manage that user's documents.\r\n\r\n- **Sign mode** — Drag-and-drop a PDF, choose recipients (parallel or sequential), set a due date, place signing fields, and send. PDF preview now uses viewport-relative sizing (78vh, capped at 1100px) so the preview is actually usable on a 14\"+ display.\r\n\r\n- **Description & tags** — Both modes have a \"Description & tags\" section: optional description (sanitized) and up to 10 tags (32 chars each, lowercase, deduped). Tags flow through to the folder grid's tag filter.\r\n\r\n- **Categories-only upload picker with help tooltip** — Store mode's category dropdown now offers only the 13 built-in DocumentCategory values, with a help tooltip next to the Category label explaining that administrators and executives can move the file into a custom folder afterwards. Removes confusion where uploaders saw their custom folders in the picker but couldn't always file into them.\r\n\r\n- **Expiry date tooltip** — A help tooltip next to the optional Expiry date field gives a concrete example (visa \u002F insurance \u002F certificate renewal) so it's clear what the field is for and when to leave it blank.\r\n\r\n### New Features — Document Detail Page\r\n\r\n- **Slim breadcrumb header** — Back link › title › status pill › action buttons (Place fields \u002F Open \u002F Download), all in one row, replacing the tall hero card.\r\n\r\n- **Large embedded preview** — The PDF takes the dominant left column at 78vh viewport-height with a click-to-open hint floating top-right on hover. No more 280×320 thumbnail card.\r\n\r\n- **Unified sticky sidebar** — One sticky panel on the right with internal dividers instead of four separately-bordered cards. Reads as a single neutral surface.\r\n\r\n- **Sequential signing chips** — In sequential mode the order chip (1, 2, 3…) is color-coded — green for signed steps, primary tint for the active step, gray for queued, red for declined \u002F expired — so the timeline reads as a checklist at a glance.\r\n\r\n- **Initials avatar chips** — Each recipient row shows an initials avatar tinted by status, with a tiny colored dot + sentence-case status label inline (\"● Declined · Apr 29, 7:46 PM\") instead of a chunky pastel pill chip.\r\n\r\n- **Truncated document ID** — Doc IDs render as `CMOKVT…0T0S1` in the Details panel with a one-click copy of the full ID.\r\n\r\n- **Audit history collapsible** — The audit timeline (admin-only) becomes a disclosure section at the bottom of the sidebar instead of a third tab. Tucked away because most visits aren't there to read it.\r\n\r\n### New Features — Sign Page Polish\r\n\r\n- **Header always visible** — The \"Review and complete \u002F Decline \u002F Finish\" header on `\u002Fdocuments\u002Fsign\u002F:id` no longer hides behind the global app toolbar until you scroll.\r\n\r\n- **Decline modal works on first click** — The decline confirmation modal opens reliably the moment you press Decline.\r\n\r\n### New Features — Excel Export\r\n\r\n- **AG Grid export preview for Documents** — The Documents page's \"Export in Excel\" now opens `\u002Fdocuments-export`, an AG Grid preview matching `\u002Fusers-export`. Theme picker (Quartz \u002F Alpine \u002F Balham \u002F Material), quick filter, column show\u002Fhide, sort, reset, and CSV download. Status cells are color-tinted to match the chips on the list page.\r\n\r\n### New Features — Notifications\r\n\r\n- **Document notifications deep-link to the right view** — Notifications for signing requests, reminders, and expiring documents now link straight to `\u002Fdocuments?view=actionRequired` instead of the generic \u002Fdocuments landing page. The user lands one click from the doc that needs them.\r\n\r\n- **Personal-upload recipients are notified** — When an admin uploads a personal document for an employee (Store mode targeting another user), that employee now gets an in-app notification + email. Previously the upload was silent.\r\n\r\n- **Document upload oversight notifications** — Whenever a document is uploaded for an employee, executive, department head, or administrator, leadership is now looped in: every executive is notified, administrators are notified (except in the narrow case where an executive uploads to an administrator), and a department head whose own report receives a document is included for their own department. The recipient still gets their existing notification — this is an additional oversight feed for the people responsible for HR records.\r\n\r\n- **Daily document-expiry reminders** — A new daily reminder fires at the 60 \u002F 30 \u002F 7 \u002F 0-day marks before a document's expiry date. The document owner is always notified (so they have time to renew their visa, insurance, certificate, etc.); the same oversight audience above is also notified, with mute switches per audience member. Internal de-duplication prevents repeat reminders inside the same window.\r\n\r\n- **Document oversight settings** — `\u002Fsettings\u002Fnotifications` now has a Documents section (visible to administrators, executives, and department heads) with two toggles: \"When a document is uploaded for someone in scope\" and \"When a document is approaching expiry\". Both default on so leadership has visibility out of the box.\r\n\r\n- **Default digest scope is now \"Full organisation\"** — New users get a full-org digest by default rather than \"Just me\", since most teams want to see who's off across the whole company. Existing users keep whatever they had.\r\n\r\n- **Public holidays on the digest by default** — The \"Include public holidays in digest\" toggle is now on by default, so the daily \u002F weekly digest shows holidays alongside leaves without having to opt in.\r\n\r\n- **\"Anyone you manage\" is now manager-only** — The \"Anyone you manage\" digest scope only appears for users who actually have direct reports. Non-managers no longer see (or get clamped onto) an empty scope, and the radio is hidden in their settings.\r\n\r\n- **Privacy settings flow into the digest** — When an organisation has \"Other departments — Hidden\" enabled in \u002Fsettings\u002Fgeneral, non-admin users can no longer pick the full-organisation digest scope, and any saved org-wide preference is automatically narrowed to their own department at dispatch time. Administrators and executives stay exempt — the privacy toggle has always carved them out.\r\n\r\n### New Features — Calendar Privacy\r\n\r\n- **\"Calendar view — Hidden\" is now actually enforced** — The privacy toggle in `\u002Fsettings\u002Fgeneral` for \"Calendar view\" was previously cosmetic — turning it on didn't change what users could see. It now gates the per-user year-view absence calendar at `\u002Fcalendar\u002F\u003CuserId>` end-to-end: when \"Hidden\", only the user themselves, their direct manager, the department head of their department, and administrators \u002F executives can open the page. Peers are redirected back to the dashboard with a notice. The leaves and balance APIs that power the page apply the same rule, so direct API calls can't bypass it either.\r\n\r\n- **Calendar view defaults to Hidden** — New organisations now start with \"Calendar view\" set to Hidden out of the box, since a year-view absence calendar shows medical \u002F bereavement \u002F similar sensitive leaves and shouldn't be broadcast to peers without an explicit opt-in. Existing organisations are also flipped to Hidden, on the basis that the toggle wasn't enforced before so any prior \"Visible\" value reflected the legacy default rather than a deliberate choice. Admins who do want the calendar open across their org can flip it back from `\u002Fsettings\u002Fgeneral` at any time.\r\n\r\n- **Dashboard name links respect the toggle** — On `\u002Fdashboard`, the colleague name in each row is only rendered as a clickable link when the viewer is allowed into that person's calendar. Click-through never lands on a 403 or an empty grid — the link simply isn't a link for viewers who'd be blocked.\r\n\r\n- **Private leave types are hidden on the per-user calendar too** — The \"Private\" toggle on `\u002Fsettings\u002Fleavetypes` (\"Hide leave type name from other employees on the dashboard\") already worked on `\u002Fdashboard`; it now applies on `\u002Fcalendar\u002F\u003CuserId>` as well. Non-self \u002F non-admin \u002F non-same-department-head viewers see the type as a generic \"Private\" label with the reason and notes hidden, matching the dashboard behaviour. The leave's owner and admin \u002F dept-head viewers still see the real type name and details.\r\n\r\n### Improvements — Visibility & Billing\r\n\r\n- **Declined \u002F expired docs hidden from your own drawer** — A document you declined to sign or one whose deadline lapsed no longer keeps appearing in your own folder. Department heads still see those rows for their reports, and admins \u002F executives still see the whole organization. Restored automatically if the document is reopened.\r\n\r\n- **Multi-recipient visibility fix** — When a document is sent to multiple co-signers, every recipient now sees the doc in their My Documents folder — not just the first recipient. Previously only the primary signer saw it in their drawer; the others had to open it from the notification.\r\n\r\n- **Document quota now gates assignment + bulk send** — Adding new signers to an existing document, and bulk-sending from a template, both now check the org's monthly document quota before creating any rows. Previously these paths could push usage past your plan's limit silently. The block surfaces a clear message with current vs. allowed counts and a link to upgrade.\r\n\r\n- **Per-user signer counts in the Sent list** — The Sent view groups multi-recipient sends as one row with a \"Signed by N of M\" indicator, instead of one row per signer.\r\n\r\n- **\"Shared\" and \"Unassigned\" status filters** — The status filter on `?view=sent` adds two new entries — \"Shared\" (for documents shared without a signature request) and \"Unassigned\" (for documents with no recipients yet) — so admins can split bulk-send activity from one-off shares without scanning every row.\r\n\r\n- **Department-head Sent view scoped to their own uploads** — When a department head opens `?view=sent`, the list now shows only the documents they themselves uploaded. Previously the view could surface admin- or executive-initiated sends that happened to involve the department head, which was confusing.\r\n\r\n### Improvements — Navigation & Settings\r\n\r\n- **Documents in the sidebar gets its own group** — The global app sidebar now has a top-level \"Documents\" section above Time & Projects, with role-aware children (My Documents, Action Required, Sent, Templates, Bulk Send, By Employee).\r\n\r\n- **By Employee moves under Management** — On the global sidebar, By Employee sits under Management next to Approvals and Reports — they're all admin oversight surfaces with the same shape. The in-page documents rail keeps its own By Employee link so admins already inside \u002Fdocuments don't have to bounce back to the global nav.\r\n\r\n- **Sidebar scrollbar auto-hides** — The app sidebar's scrollbar is now hidden until hover \u002F focus \u002F active scroll. CSS keeps gutter stable so the rail width doesn't jump.\r\n\r\n- **Tag filter at top level** — Selecting a tag on \u002Fdocuments (with no folder open and no search) now drops you into a flat result list of matching docs across folders. Previously the tag dropdown updated state but didn't change the visible cabinet, so it appeared to do nothing.\r\n\r\n- **\u002Fapprovals stat row fills width** — When time tracking is disabled, the \u002Fapprovals stat row (Total Pending \u002F Leave \u002F Expense \u002F Timesheet) drops to 3 columns instead of leaving an empty 4th slot.\r\n\r\n- **Time-tracking toggle reflects immediately** — Toggling \"Enable Time Tracking & Projects\" in \u002Fsettings\u002Ftimetracking now updates \u002Freports and \u002Fapprovals on the next visit instead of waiting on a 5-minute settings cache. The Time \u002F Projects \u002F Scheduling cards, charts, the Available Reports table rows, and the Timesheet Entries tile all appear or disappear in sync with the flag.\r\n\r\n- **No more redirect flash** — Visiting `\u002Freports\u002Ftime`, `\u002Freports\u002Fprojects`, `\u002Freports\u002Fscheduling`, or `\u002Fapprovals\u002Ftime` while time tracking is disabled now redirects cleanly to the parent dashboard before the page renders. Previously you'd see a split-second flash of the disabled report before being bounced back.\r\n\r\n- **All \"when does the org work\" config in one place** — `\u002Fsettings\u002Fgeneral` is now the single home for both **business days** (the day-of-week picker) and **default working hours** (start, end, break for shift auto-generation). The Default Organization Schedule card moved over from `\u002Fsettings\u002Ftimetracking`, so admins no longer have to bounce between two pages to set up the company calendar. The schedule card only appears when time tracking is enabled.\r\n\r\n- **Settings search refreshed for the new sections** — The \"Search settings\" bar in the \u002Fsettings header now finds the Default Working Hours card, the new notification toggles (\"Default digest scope\", \"Public holidays on digest\", \"Document upload activity\", \"Document expiry reminders\"), the per-leave-type \"Private\" toggle, and gives the Calendar privacy and Other Departments privacy toggles their own dedicated entries. Searching for the old label \"business hours\" still resolves to the new Business Days section.\r\n\r\n### Bug Fixes\r\n\r\n- **Folder rename collision with soft-deleted rows** — Recreating a folder with the same name no longer fails with a 500. The unique index on (organizationId, userId, name) was treating soft-deleted rows as still occupying the slot. Delete now tombstone-renames the row so the slot frees up immediately.\r\n\r\n- **Empty drawer now shows the full cabinet** — A user with zero documents now sees every category folder marked \"Empty\" plus the \"+ New folder\" tile, instead of being routed through a generic upload prompt that hid all 13 categories.\r\n\r\n- **Personal-upload notifications were missing** — Employees received no notification when an admin uploaded a personal document for them. Fixed.\r\n\r\n- **Multi-recipient docs vanished for co-signers** — A document with multiple recipients only appeared in the first recipient's drawer. All recipients now see the doc in their My Documents folder.\r\n\r\n- **Decline button on \u002Fdocuments\u002Fsign\u002F:id did nothing** — A z-index conflict caused the decline confirmation modal to render behind the signing pane, so clicks appeared to do nothing.\r\n\r\n- **Personal upload would fail for some built-in categories** — Uploading a document under categories such as Insurance, Tax, Visa, Medical Certificate, Training Material, ID Document, or Salary Increment could surface a generic \"Server Error\" on submit. Fixed — every built-in category now uploads cleanly.\r\n\r\n- **\"Requires signature\" toggle removed in sign mode** — Sign mode always requires signatures, so the redundant toggle on `\u002Fdocuments\u002Fupload?mode=sign` is gone. The Sign-by picker and signing-order editor are always rendered when the page is in sign mode.\r\n\r\n- **Private leave types could leak on a colleague's calendar** — Opening another user's `\u002Fcalendar\u002F\u003CuserId>` page surfaced the real leave-type name (e.g. Bereavement Leave) even when the type was marked Private — only the dashboard was applying the obfuscation. Fixed; the per-user calendar now mirrors the dashboard rule.\r\n\r\n- **\"Calendar view — Hidden\" privacy toggle did nothing** — The toggle in `\u002Fsettings\u002Fgeneral` for \"Calendar view — Hidden\" was persisted to the database but never read by the actual per-user calendar. Toggling it on \u002F off didn't change what peers could see. Fully wired up now (see \"Calendar Privacy\" above).\r\n\r\n- **\"Business hours\" was actually the business-days picker** — The section in `\u002Fsettings\u002Fgeneral` labelled \"Business hours\" was a row of day-of-week checkboxes (Mon, Tue, ...), not a time-of-day setting. Renamed to \"Business days\" to match what it actually does.",{"tag":11,"name":11},"v1.0.12",{"tag":13,"name":13},"v1.0.10",2,{"data":16,"body":17},{},{"type":18,"children":19},"root",[20,29,35,41,152,158,199,205,283,289,370,376,407,413,442,448,556,562,658,664,742,748,900,906],{"type":21,"tag":22,"props":23,"children":25},"element","h3",{"id":24},"documents-redesign",[26],{"type":27,"value":28},"text","Documents Redesign",{"type":21,"tag":30,"props":31,"children":32},"p",{},[33],{"type":27,"value":34},"A top-to-bottom rework of the Documents experience. The \u002Fdocuments page now opens to a familiar filing-cabinet view of every employee's drawer, custom folders sit alongside the 13 built-in categories, the upload flow has separate Store and Sign modes, and the document detail page has a large preview and a quieter sidebar. Most of this release is in the documents area; the rest is small fixes around feature-flag propagation, exports, and dependency updates.",{"type":21,"tag":22,"props":36,"children":38},{"id":37},"new-features-my-documents-filing-cabinet",[39],{"type":27,"value":40},"New Features — My Documents (filing cabinet)",{"type":21,"tag":42,"props":43,"children":44},"ul",{},[45,57,67,77,87,97,124,142],{"type":21,"tag":46,"props":47,"children":48},"li",{},[49,55],{"type":21,"tag":50,"props":51,"children":52},"strong",{},[53],{"type":27,"value":54},"Folder cabinet for every user",{"type":27,"value":56}," — The \u002Fdocuments page opens on \"My Documents\" — a 2-3 column grid of folder tiles for every employee in the org. Each user always sees the full cabinet (13 built-in categories: Contracts, Offer Letters, Salary Increments, Performance Reviews, Policy Documents, ID Documents, Certificates, Training Materials, Medical Certificates, Visa Documents, Tax Documents, Insurance, Other) — even if a folder is empty — so you can drop a new doc straight into the right category instead of routing everything through a generic Upload entry point.",{"type":21,"tag":46,"props":58,"children":59},{},[60,65],{"type":21,"tag":50,"props":61,"children":62},{},[63],{"type":27,"value":64},"Folder visual",{"type":27,"value":66}," — Each tile is rendered as an actual two-layer folder shape (tab + body) tinted by the category's brand color. Empty folders sit at low opacity; populated folders take a bolder tint plus a colored count badge in the corner. Hover lifts the folder graphic for a subtle \"pluck-out\" feel. The \"New folder\" tile mirrors the same shape with a dashed outline so it sits in the cabinet visually.",{"type":21,"tag":46,"props":68,"children":69},{},[70,75],{"type":21,"tag":50,"props":71,"children":72},{},[73],{"type":27,"value":74},"Custom folders",{"type":27,"value":76}," — Per-user custom folders sit above the 13 built-in categories. Pick a name (max 50 chars), a Lucide icon from a curated set, and a hex color from a swatch grid. Folders are scoped to a single user's drawer.",{"type":21,"tag":46,"props":78,"children":79},{},[80,85],{"type":21,"tag":50,"props":81,"children":82},{},[83],{"type":27,"value":84},"Folder context menu",{"type":27,"value":86}," — Edit \u002F rename \u002F re-icon \u002F recolor \u002F delete on any custom folder via the context menu that surfaces on hover. Soft-deleted folders release their name slot immediately, so you can recreate a folder with the same name without hitting a unique-constraint error.",{"type":21,"tag":46,"props":88,"children":89},{},[90,95],{"type":21,"tag":50,"props":91,"children":92},{},[93],{"type":27,"value":94},"Tag filter",{"type":27,"value":96}," — Folder grid carries a tag filter dropdown sourced from the docs in the currently visible scope. Selecting a tag at the top level drops you into a flat result list with cross-folder matches; inside an open folder, the tag narrows that folder. Composes with search.",{"type":21,"tag":46,"props":98,"children":99},{},[100,105,107,114,116,122],{"type":21,"tag":50,"props":101,"children":102},{},[103],{"type":27,"value":104},"Folder URL routing",{"type":27,"value":106}," — Open folders are encoded as ",{"type":21,"tag":108,"props":109,"children":111},"code",{"className":110},[],[112],{"type":27,"value":113},"?folder=offer-letters",{"type":27,"value":115}," etc., so refresh, browser-back, and shared links keep state. Custom folders use ",{"type":21,"tag":108,"props":117,"children":119},{"className":118},[],[120],{"type":27,"value":121},"?folder=custom:\u003Cid>",{"type":27,"value":123}," for unambiguity.",{"type":21,"tag":46,"props":125,"children":126},{},[127,132,134,140],{"type":21,"tag":50,"props":128,"children":129},{},[130],{"type":27,"value":131},"Per-user folder pages",{"type":27,"value":133}," — ",{"type":21,"tag":108,"props":135,"children":137},{"className":136},[],[138],{"type":27,"value":139},"\u002Fusers\u002F{id}",{"type":27,"value":141}," now shows the same folder grid component on the Documents tab. Admins, Executives, and Department Heads (for in-scope employees) can browse a coworker's drawer; everyone else sees their own.",{"type":21,"tag":46,"props":143,"children":144},{},[145,150],{"type":21,"tag":50,"props":146,"children":147},{},[148],{"type":27,"value":149},"Role-gated folder creation",{"type":27,"value":151}," — The \"New folder\" tile is hidden when an employee or department head is viewing their own drawer — you don't manage your own filing structure as a non-admin. It's still available to admins \u002F executives anywhere, and to department heads viewing an in-scope employee.",{"type":21,"tag":22,"props":153,"children":155},{"id":154},"new-features-action-required",[156],{"type":27,"value":157},"New Features — Action Required",{"type":21,"tag":42,"props":159,"children":160},{},[161,171,181],{"type":21,"tag":46,"props":162,"children":163},{},[164,169],{"type":21,"tag":50,"props":165,"children":166},{},[167],{"type":27,"value":168},"Unified attention dashboard",{"type":27,"value":170}," — Action Required is now a single dashboard that aggregates pending signatures + expiring documents into one list, with chips to filter by All \u002F Sign \u002F Expiring \u002F Overdue and stat tiles that double as filters. Replaces the old separate Inbox \u002F Completed \u002F Expiring rails.",{"type":21,"tag":46,"props":172,"children":173},{},[174,179],{"type":21,"tag":50,"props":175,"children":176},{},[177],{"type":27,"value":178},"Sent-style toolbar",{"type":27,"value":180}," — Search, status filter, sort, Export, admin-only Templates \u002F Bulk Send shortcuts, and a Start CTA on top of a desktop table + mobile card list. Pagination footer with rows-per-page selector renders whenever the list has any items.",{"type":21,"tag":46,"props":182,"children":183},{},[184,189,191,197],{"type":21,"tag":50,"props":185,"children":186},{},[187],{"type":27,"value":188},"Completed view folded in",{"type":27,"value":190}," — The retired ?view=completed page is now a fifth chip + filter on Action Required. URL syncs via ",{"type":21,"tag":108,"props":192,"children":194},{"className":193},[],[195],{"type":27,"value":196},"?filter=",{"type":27,"value":198}," so refresh and back-button preserve state.",{"type":21,"tag":22,"props":200,"children":202},{"id":201},"new-features-drive-style-upload-page",[203],{"type":27,"value":204},"New Features — Drive-style Upload Page",{"type":21,"tag":42,"props":206,"children":207},{},[208,233,243,253,263,273],{"type":21,"tag":46,"props":209,"children":210},{},[211,216,217,223,225,231],{"type":21,"tag":50,"props":212,"children":213},{},[214],{"type":27,"value":215},"Two-mode upload",{"type":27,"value":133},{"type":21,"tag":108,"props":218,"children":220},{"className":219},[],[221],{"type":27,"value":222},"\u002Fdocuments\u002Fupload",{"type":27,"value":224}," ships with a Store \u002F Sign segmented control rendered as a sliding-pill tab, each mode laid out as a 2-column drive view: large file dropzone + live PDF or image preview on the left, metadata aside on the right. Mode is URL-synced via ",{"type":21,"tag":108,"props":226,"children":228},{"className":227},[],[229],{"type":27,"value":230},"?mode=store|sign",{"type":27,"value":232}," so deep-links and refresh land consistently.",{"type":21,"tag":46,"props":234,"children":235},{},[236,241],{"type":21,"tag":50,"props":237,"children":238},{},[239],{"type":27,"value":240},"Store mode",{"type":27,"value":242}," — A dedicated form for filing a doc in a built-in category or a per-user custom folder. Posts to the existing personal-upload endpoint. Optionally targets another user when the caller can manage that user's documents.",{"type":21,"tag":46,"props":244,"children":245},{},[246,251],{"type":21,"tag":50,"props":247,"children":248},{},[249],{"type":27,"value":250},"Sign mode",{"type":27,"value":252}," — Drag-and-drop a PDF, choose recipients (parallel or sequential), set a due date, place signing fields, and send. PDF preview now uses viewport-relative sizing (78vh, capped at 1100px) so the preview is actually usable on a 14\"+ display.",{"type":21,"tag":46,"props":254,"children":255},{},[256,261],{"type":21,"tag":50,"props":257,"children":258},{},[259],{"type":27,"value":260},"Description & tags",{"type":27,"value":262}," — Both modes have a \"Description & tags\" section: optional description (sanitized) and up to 10 tags (32 chars each, lowercase, deduped). Tags flow through to the folder grid's tag filter.",{"type":21,"tag":46,"props":264,"children":265},{},[266,271],{"type":21,"tag":50,"props":267,"children":268},{},[269],{"type":27,"value":270},"Categories-only upload picker with help tooltip",{"type":27,"value":272}," — Store mode's category dropdown now offers only the 13 built-in DocumentCategory values, with a help tooltip next to the Category label explaining that administrators and executives can move the file into a custom folder afterwards. Removes confusion where uploaders saw their custom folders in the picker but couldn't always file into them.",{"type":21,"tag":46,"props":274,"children":275},{},[276,281],{"type":21,"tag":50,"props":277,"children":278},{},[279],{"type":27,"value":280},"Expiry date tooltip",{"type":27,"value":282}," — A help tooltip next to the optional Expiry date field gives a concrete example (visa \u002F insurance \u002F certificate renewal) so it's clear what the field is for and when to leave it blank.",{"type":21,"tag":22,"props":284,"children":286},{"id":285},"new-features-document-detail-page",[287],{"type":27,"value":288},"New Features — Document Detail Page",{"type":21,"tag":42,"props":290,"children":291},{},[292,302,312,322,332,342,360],{"type":21,"tag":46,"props":293,"children":294},{},[295,300],{"type":21,"tag":50,"props":296,"children":297},{},[298],{"type":27,"value":299},"Slim breadcrumb header",{"type":27,"value":301}," — Back link › title › status pill › action buttons (Place fields \u002F Open \u002F Download), all in one row, replacing the tall hero card.",{"type":21,"tag":46,"props":303,"children":304},{},[305,310],{"type":21,"tag":50,"props":306,"children":307},{},[308],{"type":27,"value":309},"Large embedded preview",{"type":27,"value":311}," — The PDF takes the dominant left column at 78vh viewport-height with a click-to-open hint floating top-right on hover. No more 280×320 thumbnail card.",{"type":21,"tag":46,"props":313,"children":314},{},[315,320],{"type":21,"tag":50,"props":316,"children":317},{},[318],{"type":27,"value":319},"Unified sticky sidebar",{"type":27,"value":321}," — One sticky panel on the right with internal dividers instead of four separately-bordered cards. Reads as a single neutral surface.",{"type":21,"tag":46,"props":323,"children":324},{},[325,330],{"type":21,"tag":50,"props":326,"children":327},{},[328],{"type":27,"value":329},"Sequential signing chips",{"type":27,"value":331}," — In sequential mode the order chip (1, 2, 3…) is color-coded — green for signed steps, primary tint for the active step, gray for queued, red for declined \u002F expired — so the timeline reads as a checklist at a glance.",{"type":21,"tag":46,"props":333,"children":334},{},[335,340],{"type":21,"tag":50,"props":336,"children":337},{},[338],{"type":27,"value":339},"Initials avatar chips",{"type":27,"value":341}," — Each recipient row shows an initials avatar tinted by status, with a tiny colored dot + sentence-case status label inline (\"● Declined · Apr 29, 7:46 PM\") instead of a chunky pastel pill chip.",{"type":21,"tag":46,"props":343,"children":344},{},[345,350,352,358],{"type":21,"tag":50,"props":346,"children":347},{},[348],{"type":27,"value":349},"Truncated document ID",{"type":27,"value":351}," — Doc IDs render as ",{"type":21,"tag":108,"props":353,"children":355},{"className":354},[],[356],{"type":27,"value":357},"CMOKVT…0T0S1",{"type":27,"value":359}," in the Details panel with a one-click copy of the full ID.",{"type":21,"tag":46,"props":361,"children":362},{},[363,368],{"type":21,"tag":50,"props":364,"children":365},{},[366],{"type":27,"value":367},"Audit history collapsible",{"type":27,"value":369}," — The audit timeline (admin-only) becomes a disclosure section at the bottom of the sidebar instead of a third tab. Tucked away because most visits aren't there to read it.",{"type":21,"tag":22,"props":371,"children":373},{"id":372},"new-features-sign-page-polish",[374],{"type":27,"value":375},"New Features — Sign Page Polish",{"type":21,"tag":42,"props":377,"children":378},{},[379,397],{"type":21,"tag":46,"props":380,"children":381},{},[382,387,389,395],{"type":21,"tag":50,"props":383,"children":384},{},[385],{"type":27,"value":386},"Header always visible",{"type":27,"value":388}," — The \"Review and complete \u002F Decline \u002F Finish\" header on ",{"type":21,"tag":108,"props":390,"children":392},{"className":391},[],[393],{"type":27,"value":394},"\u002Fdocuments\u002Fsign\u002F:id",{"type":27,"value":396}," no longer hides behind the global app toolbar until you scroll.",{"type":21,"tag":46,"props":398,"children":399},{},[400,405],{"type":21,"tag":50,"props":401,"children":402},{},[403],{"type":27,"value":404},"Decline modal works on first click",{"type":27,"value":406}," — The decline confirmation modal opens reliably the moment you press Decline.",{"type":21,"tag":22,"props":408,"children":410},{"id":409},"new-features-excel-export",[411],{"type":27,"value":412},"New Features — Excel Export",{"type":21,"tag":42,"props":414,"children":415},{},[416],{"type":21,"tag":46,"props":417,"children":418},{},[419,424,426,432,434,440],{"type":21,"tag":50,"props":420,"children":421},{},[422],{"type":27,"value":423},"AG Grid export preview for Documents",{"type":27,"value":425}," — The Documents page's \"Export in Excel\" now opens ",{"type":21,"tag":108,"props":427,"children":429},{"className":428},[],[430],{"type":27,"value":431},"\u002Fdocuments-export",{"type":27,"value":433},", an AG Grid preview matching ",{"type":21,"tag":108,"props":435,"children":437},{"className":436},[],[438],{"type":27,"value":439},"\u002Fusers-export",{"type":27,"value":441},". Theme picker (Quartz \u002F Alpine \u002F Balham \u002F Material), quick filter, column show\u002Fhide, sort, reset, and CSV download. Status cells are color-tinted to match the chips on the list page.",{"type":21,"tag":22,"props":443,"children":445},{"id":444},"new-features-notifications",[446],{"type":27,"value":447},"New Features — Notifications",{"type":21,"tag":42,"props":449,"children":450},{},[451,469,479,489,499,516,526,536,546],{"type":21,"tag":46,"props":452,"children":453},{},[454,459,461,467],{"type":21,"tag":50,"props":455,"children":456},{},[457],{"type":27,"value":458},"Document notifications deep-link to the right view",{"type":27,"value":460}," — Notifications for signing requests, reminders, and expiring documents now link straight to ",{"type":21,"tag":108,"props":462,"children":464},{"className":463},[],[465],{"type":27,"value":466},"\u002Fdocuments?view=actionRequired",{"type":27,"value":468}," instead of the generic \u002Fdocuments landing page. The user lands one click from the doc that needs them.",{"type":21,"tag":46,"props":470,"children":471},{},[472,477],{"type":21,"tag":50,"props":473,"children":474},{},[475],{"type":27,"value":476},"Personal-upload recipients are notified",{"type":27,"value":478}," — When an admin uploads a personal document for an employee (Store mode targeting another user), that employee now gets an in-app notification + email. Previously the upload was silent.",{"type":21,"tag":46,"props":480,"children":481},{},[482,487],{"type":21,"tag":50,"props":483,"children":484},{},[485],{"type":27,"value":486},"Document upload oversight notifications",{"type":27,"value":488}," — Whenever a document is uploaded for an employee, executive, department head, or administrator, leadership is now looped in: every executive is notified, administrators are notified (except in the narrow case where an executive uploads to an administrator), and a department head whose own report receives a document is included for their own department. The recipient still gets their existing notification — this is an additional oversight feed for the people responsible for HR records.",{"type":21,"tag":46,"props":490,"children":491},{},[492,497],{"type":21,"tag":50,"props":493,"children":494},{},[495],{"type":27,"value":496},"Daily document-expiry reminders",{"type":27,"value":498}," — A new daily reminder fires at the 60 \u002F 30 \u002F 7 \u002F 0-day marks before a document's expiry date. The document owner is always notified (so they have time to renew their visa, insurance, certificate, etc.); the same oversight audience above is also notified, with mute switches per audience member. Internal de-duplication prevents repeat reminders inside the same window.",{"type":21,"tag":46,"props":500,"children":501},{},[502,507,508,514],{"type":21,"tag":50,"props":503,"children":504},{},[505],{"type":27,"value":506},"Document oversight settings",{"type":27,"value":133},{"type":21,"tag":108,"props":509,"children":511},{"className":510},[],[512],{"type":27,"value":513},"\u002Fsettings\u002Fnotifications",{"type":27,"value":515}," now has a Documents section (visible to administrators, executives, and department heads) with two toggles: \"When a document is uploaded for someone in scope\" and \"When a document is approaching expiry\". Both default on so leadership has visibility out of the box.",{"type":21,"tag":46,"props":517,"children":518},{},[519,524],{"type":21,"tag":50,"props":520,"children":521},{},[522],{"type":27,"value":523},"Default digest scope is now \"Full organisation\"",{"type":27,"value":525}," — New users get a full-org digest by default rather than \"Just me\", since most teams want to see who's off across the whole company. Existing users keep whatever they had.",{"type":21,"tag":46,"props":527,"children":528},{},[529,534],{"type":21,"tag":50,"props":530,"children":531},{},[532],{"type":27,"value":533},"Public holidays on the digest by default",{"type":27,"value":535}," — The \"Include public holidays in digest\" toggle is now on by default, so the daily \u002F weekly digest shows holidays alongside leaves without having to opt in.",{"type":21,"tag":46,"props":537,"children":538},{},[539,544],{"type":21,"tag":50,"props":540,"children":541},{},[542],{"type":27,"value":543},"\"Anyone you manage\" is now manager-only",{"type":27,"value":545}," — The \"Anyone you manage\" digest scope only appears for users who actually have direct reports. Non-managers no longer see (or get clamped onto) an empty scope, and the radio is hidden in their settings.",{"type":21,"tag":46,"props":547,"children":548},{},[549,554],{"type":21,"tag":50,"props":550,"children":551},{},[552],{"type":27,"value":553},"Privacy settings flow into the digest",{"type":27,"value":555}," — When an organisation has \"Other departments — Hidden\" enabled in \u002Fsettings\u002Fgeneral, non-admin users can no longer pick the full-organisation digest scope, and any saved org-wide preference is automatically narrowed to their own department at dispatch time. Administrators and executives stay exempt — the privacy toggle has always carved them out.",{"type":21,"tag":22,"props":557,"children":559},{"id":558},"new-features-calendar-privacy",[560],{"type":27,"value":561},"New Features — Calendar Privacy",{"type":21,"tag":42,"props":563,"children":564},{},[565,591,608,626],{"type":21,"tag":46,"props":566,"children":567},{},[568,573,575,581,583,589],{"type":21,"tag":50,"props":569,"children":570},{},[571],{"type":27,"value":572},"\"Calendar view — Hidden\" is now actually enforced",{"type":27,"value":574}," — The privacy toggle in ",{"type":21,"tag":108,"props":576,"children":578},{"className":577},[],[579],{"type":27,"value":580},"\u002Fsettings\u002Fgeneral",{"type":27,"value":582}," for \"Calendar view\" was previously cosmetic — turning it on didn't change what users could see. It now gates the per-user year-view absence calendar at ",{"type":21,"tag":108,"props":584,"children":586},{"className":585},[],[587],{"type":27,"value":588},"\u002Fcalendar\u002F\u003CuserId>",{"type":27,"value":590}," end-to-end: when \"Hidden\", only the user themselves, their direct manager, the department head of their department, and administrators \u002F executives can open the page. Peers are redirected back to the dashboard with a notice. The leaves and balance APIs that power the page apply the same rule, so direct API calls can't bypass it either.",{"type":21,"tag":46,"props":592,"children":593},{},[594,599,601,606],{"type":21,"tag":50,"props":595,"children":596},{},[597],{"type":27,"value":598},"Calendar view defaults to Hidden",{"type":27,"value":600}," — New organisations now start with \"Calendar view\" set to Hidden out of the box, since a year-view absence calendar shows medical \u002F bereavement \u002F similar sensitive leaves and shouldn't be broadcast to peers without an explicit opt-in. Existing organisations are also flipped to Hidden, on the basis that the toggle wasn't enforced before so any prior \"Visible\" value reflected the legacy default rather than a deliberate choice. Admins who do want the calendar open across their org can flip it back from ",{"type":21,"tag":108,"props":602,"children":604},{"className":603},[],[605],{"type":27,"value":580},{"type":27,"value":607}," at any time.",{"type":21,"tag":46,"props":609,"children":610},{},[611,616,618,624],{"type":21,"tag":50,"props":612,"children":613},{},[614],{"type":27,"value":615},"Dashboard name links respect the toggle",{"type":27,"value":617}," — On ",{"type":21,"tag":108,"props":619,"children":621},{"className":620},[],[622],{"type":27,"value":623},"\u002Fdashboard",{"type":27,"value":625},", the colleague name in each row is only rendered as a clickable link when the viewer is allowed into that person's calendar. Click-through never lands on a 403 or an empty grid — the link simply isn't a link for viewers who'd be blocked.",{"type":21,"tag":46,"props":627,"children":628},{},[629,634,636,642,644,649,651,656],{"type":21,"tag":50,"props":630,"children":631},{},[632],{"type":27,"value":633},"Private leave types are hidden on the per-user calendar too",{"type":27,"value":635}," — The \"Private\" toggle on ",{"type":21,"tag":108,"props":637,"children":639},{"className":638},[],[640],{"type":27,"value":641},"\u002Fsettings\u002Fleavetypes",{"type":27,"value":643}," (\"Hide leave type name from other employees on the dashboard\") already worked on ",{"type":21,"tag":108,"props":645,"children":647},{"className":646},[],[648],{"type":27,"value":623},{"type":27,"value":650},"; it now applies on ",{"type":21,"tag":108,"props":652,"children":654},{"className":653},[],[655],{"type":27,"value":588},{"type":27,"value":657}," as well. Non-self \u002F non-admin \u002F non-same-department-head viewers see the type as a generic \"Private\" label with the reason and notes hidden, matching the dashboard behaviour. The leave's owner and admin \u002F dept-head viewers still see the real type name and details.",{"type":21,"tag":22,"props":659,"children":661},{"id":660},"improvements-visibility-billing",[662],{"type":27,"value":663},"Improvements — Visibility & Billing",{"type":21,"tag":42,"props":665,"children":666},{},[667,677,687,697,707,725],{"type":21,"tag":46,"props":668,"children":669},{},[670,675],{"type":21,"tag":50,"props":671,"children":672},{},[673],{"type":27,"value":674},"Declined \u002F expired docs hidden from your own drawer",{"type":27,"value":676}," — A document you declined to sign or one whose deadline lapsed no longer keeps appearing in your own folder. Department heads still see those rows for their reports, and admins \u002F executives still see the whole organization. Restored automatically if the document is reopened.",{"type":21,"tag":46,"props":678,"children":679},{},[680,685],{"type":21,"tag":50,"props":681,"children":682},{},[683],{"type":27,"value":684},"Multi-recipient visibility fix",{"type":27,"value":686}," — When a document is sent to multiple co-signers, every recipient now sees the doc in their My Documents folder — not just the first recipient. Previously only the primary signer saw it in their drawer; the others had to open it from the notification.",{"type":21,"tag":46,"props":688,"children":689},{},[690,695],{"type":21,"tag":50,"props":691,"children":692},{},[693],{"type":27,"value":694},"Document quota now gates assignment + bulk send",{"type":27,"value":696}," — Adding new signers to an existing document, and bulk-sending from a template, both now check the org's monthly document quota before creating any rows. Previously these paths could push usage past your plan's limit silently. The block surfaces a clear message with current vs. allowed counts and a link to upgrade.",{"type":21,"tag":46,"props":698,"children":699},{},[700,705],{"type":21,"tag":50,"props":701,"children":702},{},[703],{"type":27,"value":704},"Per-user signer counts in the Sent list",{"type":27,"value":706}," — The Sent view groups multi-recipient sends as one row with a \"Signed by N of M\" indicator, instead of one row per signer.",{"type":21,"tag":46,"props":708,"children":709},{},[710,715,717,723],{"type":21,"tag":50,"props":711,"children":712},{},[713],{"type":27,"value":714},"\"Shared\" and \"Unassigned\" status filters",{"type":27,"value":716}," — The status filter on ",{"type":21,"tag":108,"props":718,"children":720},{"className":719},[],[721],{"type":27,"value":722},"?view=sent",{"type":27,"value":724}," adds two new entries — \"Shared\" (for documents shared without a signature request) and \"Unassigned\" (for documents with no recipients yet) — so admins can split bulk-send activity from one-off shares without scanning every row.",{"type":21,"tag":46,"props":726,"children":727},{},[728,733,735,740],{"type":21,"tag":50,"props":729,"children":730},{},[731],{"type":27,"value":732},"Department-head Sent view scoped to their own uploads",{"type":27,"value":734}," — When a department head opens ",{"type":21,"tag":108,"props":736,"children":738},{"className":737},[],[739],{"type":27,"value":722},{"type":27,"value":741},", the list now shows only the documents they themselves uploaded. Previously the view could surface admin- or executive-initiated sends that happened to involve the department head, which was confusing.",{"type":21,"tag":22,"props":743,"children":745},{"id":744},"improvements-navigation-settings",[746],{"type":27,"value":747},"Improvements — Navigation & Settings",{"type":21,"tag":42,"props":749,"children":750},{},[751,761,771,781,791,801,811,852,890],{"type":21,"tag":46,"props":752,"children":753},{},[754,759],{"type":21,"tag":50,"props":755,"children":756},{},[757],{"type":27,"value":758},"Documents in the sidebar gets its own group",{"type":27,"value":760}," — The global app sidebar now has a top-level \"Documents\" section above Time & Projects, with role-aware children (My Documents, Action Required, Sent, Templates, Bulk Send, By Employee).",{"type":21,"tag":46,"props":762,"children":763},{},[764,769],{"type":21,"tag":50,"props":765,"children":766},{},[767],{"type":27,"value":768},"By Employee moves under Management",{"type":27,"value":770}," — On the global sidebar, By Employee sits under Management next to Approvals and Reports — they're all admin oversight surfaces with the same shape. The in-page documents rail keeps its own By Employee link so admins already inside \u002Fdocuments don't have to bounce back to the global nav.",{"type":21,"tag":46,"props":772,"children":773},{},[774,779],{"type":21,"tag":50,"props":775,"children":776},{},[777],{"type":27,"value":778},"Sidebar scrollbar auto-hides",{"type":27,"value":780}," — The app sidebar's scrollbar is now hidden until hover \u002F focus \u002F active scroll. CSS keeps gutter stable so the rail width doesn't jump.",{"type":21,"tag":46,"props":782,"children":783},{},[784,789],{"type":21,"tag":50,"props":785,"children":786},{},[787],{"type":27,"value":788},"Tag filter at top level",{"type":27,"value":790}," — Selecting a tag on \u002Fdocuments (with no folder open and no search) now drops you into a flat result list of matching docs across folders. Previously the tag dropdown updated state but didn't change the visible cabinet, so it appeared to do nothing.",{"type":21,"tag":46,"props":792,"children":793},{},[794,799],{"type":21,"tag":50,"props":795,"children":796},{},[797],{"type":27,"value":798},"\u002Fapprovals stat row fills width",{"type":27,"value":800}," — When time tracking is disabled, the \u002Fapprovals stat row (Total Pending \u002F Leave \u002F Expense \u002F Timesheet) drops to 3 columns instead of leaving an empty 4th slot.",{"type":21,"tag":46,"props":802,"children":803},{},[804,809],{"type":21,"tag":50,"props":805,"children":806},{},[807],{"type":27,"value":808},"Time-tracking toggle reflects immediately",{"type":27,"value":810}," — Toggling \"Enable Time Tracking & Projects\" in \u002Fsettings\u002Ftimetracking now updates \u002Freports and \u002Fapprovals on the next visit instead of waiting on a 5-minute settings cache. The Time \u002F Projects \u002F Scheduling cards, charts, the Available Reports table rows, and the Timesheet Entries tile all appear or disappear in sync with the flag.",{"type":21,"tag":46,"props":812,"children":813},{},[814,819,821,827,829,835,836,842,844,850],{"type":21,"tag":50,"props":815,"children":816},{},[817],{"type":27,"value":818},"No more redirect flash",{"type":27,"value":820}," — Visiting ",{"type":21,"tag":108,"props":822,"children":824},{"className":823},[],[825],{"type":27,"value":826},"\u002Freports\u002Ftime",{"type":27,"value":828},", ",{"type":21,"tag":108,"props":830,"children":832},{"className":831},[],[833],{"type":27,"value":834},"\u002Freports\u002Fprojects",{"type":27,"value":828},{"type":21,"tag":108,"props":837,"children":839},{"className":838},[],[840],{"type":27,"value":841},"\u002Freports\u002Fscheduling",{"type":27,"value":843},", or ",{"type":21,"tag":108,"props":845,"children":847},{"className":846},[],[848],{"type":27,"value":849},"\u002Fapprovals\u002Ftime",{"type":27,"value":851}," while time tracking is disabled now redirects cleanly to the parent dashboard before the page renders. Previously you'd see a split-second flash of the disabled report before being bounced back.",{"type":21,"tag":46,"props":853,"children":854},{},[855,860,861,866,868,873,875,880,882,888],{"type":21,"tag":50,"props":856,"children":857},{},[858],{"type":27,"value":859},"All \"when does the org work\" config in one place",{"type":27,"value":133},{"type":21,"tag":108,"props":862,"children":864},{"className":863},[],[865],{"type":27,"value":580},{"type":27,"value":867}," is now the single home for both ",{"type":21,"tag":50,"props":869,"children":870},{},[871],{"type":27,"value":872},"business days",{"type":27,"value":874}," (the day-of-week picker) and ",{"type":21,"tag":50,"props":876,"children":877},{},[878],{"type":27,"value":879},"default working hours",{"type":27,"value":881}," (start, end, break for shift auto-generation). The Default Organization Schedule card moved over from ",{"type":21,"tag":108,"props":883,"children":885},{"className":884},[],[886],{"type":27,"value":887},"\u002Fsettings\u002Ftimetracking",{"type":27,"value":889},", so admins no longer have to bounce between two pages to set up the company calendar. The schedule card only appears when time tracking is enabled.",{"type":21,"tag":46,"props":891,"children":892},{},[893,898],{"type":21,"tag":50,"props":894,"children":895},{},[896],{"type":27,"value":897},"Settings search refreshed for the new sections",{"type":27,"value":899}," — The \"Search settings\" bar in the \u002Fsettings header now finds the Default Working Hours card, the new notification toggles (\"Default digest scope\", \"Public holidays on digest\", \"Document upload activity\", \"Document expiry reminders\"), the per-leave-type \"Private\" toggle, and gives the Calendar privacy and Other Departments privacy toggles their own dedicated entries. Searching for the old label \"business hours\" still resolves to the new Business Days section.",{"type":21,"tag":22,"props":901,"children":903},{"id":902},"bug-fixes",[904],{"type":27,"value":905},"Bug Fixes",{"type":21,"tag":42,"props":907,"children":908},{},[909,919,929,939,949,959,969,987,1004,1021],{"type":21,"tag":46,"props":910,"children":911},{},[912,917],{"type":21,"tag":50,"props":913,"children":914},{},[915],{"type":27,"value":916},"Folder rename collision with soft-deleted rows",{"type":27,"value":918}," — Recreating a folder with the same name no longer fails with a 500. The unique index on (organizationId, userId, name) was treating soft-deleted rows as still occupying the slot. Delete now tombstone-renames the row so the slot frees up immediately.",{"type":21,"tag":46,"props":920,"children":921},{},[922,927],{"type":21,"tag":50,"props":923,"children":924},{},[925],{"type":27,"value":926},"Empty drawer now shows the full cabinet",{"type":27,"value":928}," — A user with zero documents now sees every category folder marked \"Empty\" plus the \"+ New folder\" tile, instead of being routed through a generic upload prompt that hid all 13 categories.",{"type":21,"tag":46,"props":930,"children":931},{},[932,937],{"type":21,"tag":50,"props":933,"children":934},{},[935],{"type":27,"value":936},"Personal-upload notifications were missing",{"type":27,"value":938}," — Employees received no notification when an admin uploaded a personal document for them. Fixed.",{"type":21,"tag":46,"props":940,"children":941},{},[942,947],{"type":21,"tag":50,"props":943,"children":944},{},[945],{"type":27,"value":946},"Multi-recipient docs vanished for co-signers",{"type":27,"value":948}," — A document with multiple recipients only appeared in the first recipient's drawer. All recipients now see the doc in their My Documents folder.",{"type":21,"tag":46,"props":950,"children":951},{},[952,957],{"type":21,"tag":50,"props":953,"children":954},{},[955],{"type":27,"value":956},"Decline button on \u002Fdocuments\u002Fsign\u002F:id did nothing",{"type":27,"value":958}," — A z-index conflict caused the decline confirmation modal to render behind the signing pane, so clicks appeared to do nothing.",{"type":21,"tag":46,"props":960,"children":961},{},[962,967],{"type":21,"tag":50,"props":963,"children":964},{},[965],{"type":27,"value":966},"Personal upload would fail for some built-in categories",{"type":27,"value":968}," — Uploading a document under categories such as Insurance, Tax, Visa, Medical Certificate, Training Material, ID Document, or Salary Increment could surface a generic \"Server Error\" on submit. Fixed — every built-in category now uploads cleanly.",{"type":21,"tag":46,"props":970,"children":971},{},[972,977,979,985],{"type":21,"tag":50,"props":973,"children":974},{},[975],{"type":27,"value":976},"\"Requires signature\" toggle removed in sign mode",{"type":27,"value":978}," — Sign mode always requires signatures, so the redundant toggle on ",{"type":21,"tag":108,"props":980,"children":982},{"className":981},[],[983],{"type":27,"value":984},"\u002Fdocuments\u002Fupload?mode=sign",{"type":27,"value":986}," is gone. The Sign-by picker and signing-order editor are always rendered when the page is in sign mode.",{"type":21,"tag":46,"props":988,"children":989},{},[990,995,997,1002],{"type":21,"tag":50,"props":991,"children":992},{},[993],{"type":27,"value":994},"Private leave types could leak on a colleague's calendar",{"type":27,"value":996}," — Opening another user's ",{"type":21,"tag":108,"props":998,"children":1000},{"className":999},[],[1001],{"type":27,"value":588},{"type":27,"value":1003}," page surfaced the real leave-type name (e.g. Bereavement Leave) even when the type was marked Private — only the dashboard was applying the obfuscation. Fixed; the per-user calendar now mirrors the dashboard rule.",{"type":21,"tag":46,"props":1005,"children":1006},{},[1007,1012,1014,1019],{"type":21,"tag":50,"props":1008,"children":1009},{},[1010],{"type":27,"value":1011},"\"Calendar view — Hidden\" privacy toggle did nothing",{"type":27,"value":1013}," — The toggle in ",{"type":21,"tag":108,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":27,"value":580},{"type":27,"value":1020}," for \"Calendar view — Hidden\" was persisted to the database but never read by the actual per-user calendar. Toggling it on \u002F off didn't change what peers could see. Fully wired up now (see \"Calendar Privacy\" above).",{"type":21,"tag":46,"props":1022,"children":1023},{},[1024,1029,1031,1036],{"type":21,"tag":50,"props":1025,"children":1026},{},[1027],{"type":27,"value":1028},"\"Business hours\" was actually the business-days picker",{"type":27,"value":1030}," — The section in ",{"type":21,"tag":108,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":27,"value":580},{"type":27,"value":1037}," labelled \"Business hours\" was a row of day-of-week checkboxes (Mon, Tue, ...), not a time-of-day setting. Renamed to \"Business days\" to match what it actually does.",1790889965160]