` - hidden by default and sliding in from the inline-end edge. In the standalone preview an `Open` button and an auto-open script force it visible; both are demo chrome, not part of the block.
- Header `py-2.5 px-4 flex justify-between items-center border-b border-overlay-divider` with the title `Create event` and a close button. Footer `mt-auto py-2 px-4 border-t border-overlay-footer` with exactly two buttons, `Cancel` (layer/outline) then `Create event` (primary), both closing the drawer.
- The scrollable body is a `p-4 space-y-3` wrapper around one `grid grid-cols-12 gap-2`; every row is a `col-span-1` icon-only label (its text is `sr-only`, e.g. `Title`, `Date & Time:`, `Time Zone:`, `Participants:`, `Video Conferencing:`, `Location:`, `Assignee:`, `Reminders:`) plus a `col-span-11` control. Rows after the first draw a hairline top rule with a `before:` pseudo-element, not a `border-t` on the row.
- Row order and empty-state copy: title textarea placeholder `Add title`; the date/time block; time-zone input with placeholder `Time Zone` and the pre-filled value `London (GMT+0)`; participants input placeholder `Add Participants` (no participant chips on first load); video conferencing; location textarea placeholder `Add Location`; then a collapsed toggle reading `Add description, URL, or Attachments`; then assignee, availability/visibility, and reminders.
- The date/time block is three `sm:grid-cols-7` rows of 3 / 1 / 3 with an arrow icon in the middle column: two time selects (placeholder `Start time`, both defaulting to `10:00AM`), two date dropdown buttons both reading `Thu, Jan 2024` that open a single-month calendar, and finally an `All-Day:` label with an unchecked toggle switch next to a `Do not repeat` dropdown whose options are `Do not repeat` (checked), `Every Day`, `Every Week`, `Every Year`, plus a divided `Custom` button.
- Video conferencing offers two rows: `Google Meet`, and a muted `Zoom` row with a `Connect` pill on the trailing edge. The `Add description, URL, or Attachments` region is `hs-collapse hidden` on first load and reveals a `Add Description` textarea, an `Add URL` input, and a file input.
- Assignee row: a text button reading `james@preline.co` opening a two-group dropdown - group `james@preline.co` with radios `James Collins` (checked, teal), `Preline tasks` (sky), `Performance Tasks` (purple), and group `collinsjames@gmail.com` with `Holidays` (pink) - beside a colour dropdown of seven swatch radios (red, orange, yellow, green, sky, pink, neutral) with green checked. Availability defaults to `Busy` (other option `Free`), visibility to `Default visibility` (`Private`, `Public`), reminders to `30 min before` (`At the start of event`, `5 min before`, `10 min before`, `1 hour before`).
- Behavior: Preline HSOverlay for the drawer, HSSelect for the time/availability/visibility/reminder selects (each pinned with `"viewport": "#hs-modal-create-event"` so menus stay inside the scroll container), HSDropdown for the date, repeat, assignee and colour menus, HSCollapse for the description region, and `data-hs-textarea-auto-height` on the title, location and description textareas. No chart, carousel or slider libraries are involved.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.