diff --git a/assets/css/app.css b/assets/css/app.css index 04e12bc..465a4af 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -27,26 +27,31 @@ default: false; prefersdark: true; color-scheme: "dark"; - --color-base-100: oklch(25% 0.015 200); - --color-base-200: oklch(20% 0.012 200); - --color-base-300: oklch(15% 0.01 200); - --color-base-content: oklch(95% 0.01 200); - --color-primary: oklch(58% 0.15 180); - --color-primary-content: oklch(98% 0.01 180); - --color-secondary: oklch(58% 0.15 180); - --color-secondary-content: oklch(98% 0.01 180); - --color-accent: oklch(60% 0.12 175); - --color-accent-content: oklch(98% 0.01 175); - --color-neutral: oklch(30% 0.02 200); - --color-neutral-content: oklch(98% 0.01 200); - --color-info: oklch(58% 0.158 241.966); - --color-info-content: oklch(97% 0.013 236.62); - --color-success: oklch(60% 0.118 184.704); - --color-success-content: oklch(98% 0.014 180.72); - --color-warning: oklch(66% 0.179 58.318); - --color-warning-content: oklch(98% 0.022 95.277); - --color-error: oklch(58% 0.253 17.585); - --color-error-content: oklch(96% 0.015 12.422); + --color-base-100: #1a1a1a; + --color-base-200: #2a2a2a; + --color-base-300: #3a3a3a; + --color-base-content: #e5e5e5; + --color-primary: #c85a6e; + --color-primary-content: #ffffff; + --color-secondary: #7bb8db; + --color-secondary-content: #ffffff; + --color-accent: #95c5db; + --color-accent-content: #ffffff; + --color-neutral: #9ca3af; + --color-neutral-content: #e5e5e5; + --color-info: #7bb8db; + --color-info-content: #ffffff; + --color-success: oklch(65% 0.14 150); + --color-success-content: #ffffff; + --color-warning: oklch(75% 0.18 50); + --color-warning-content: #1a1a1a; + --color-error: oklch(65% 0.22 25); + --color-error-content: #ffffff; + --color-background-dark: #2b1220; + --color-card-dark: #1a3c34; + --color-text-primary-dark: #ffffff; + --color-text-secondary-dark: #d4c5b0; + --color-border-dark: #5e503f; --radius-selector: 1rem; --radius-field: 1rem; --radius-box: 1.5rem; @@ -62,26 +67,31 @@ default: true; prefersdark: false; color-scheme: "light"; - --color-base-100: oklch(99% 0.005 200); - --color-base-200: oklch(97% 0.01 200); - --color-base-300: oklch(93% 0.015 200); - --color-base-content: oklch(30% 0.02 200); - --color-primary: oklch(58% 0.15 180); - --color-primary-content: oklch(98% 0.01 180); - --color-secondary: oklch(58% 0.15 180); - --color-secondary-content: oklch(98% 0.01 180); - --color-accent: oklch(62% 0.12 175); - --color-accent-content: oklch(98% 0.01 175); - --color-neutral: oklch(50% 0.02 200); - --color-neutral-content: oklch(98% 0.01 200); - --color-info: oklch(62% 0.18 210); - --color-info-content: oklch(97% 0.01 210); + --color-base-100: #ffffff; + --color-base-200: #f3f4f6; + --color-base-300: #d4c5b0; + --color-base-content: #2b1220; + --color-primary: #ac485a; + --color-primary-content: #ffffff; + --color-secondary: #63a5c9; + --color-secondary-content: #ffffff; + --color-accent: #7fafc9; + --color-accent-content: #ffffff; + --color-neutral: #5e503f; + --color-neutral-content: #ffffff; + --color-info: #63a5c9; + --color-info-content: #ffffff; --color-success: oklch(70% 0.14 140); --color-success-content: oklch(98% 0.01 140); --color-warning: oklch(78% 0.18 45); --color-warning-content: oklch(20% 0.02 45); - --color-error: oklch(58% 0.20 20); + --color-error: oklch(58% 0.2 20); --color-error-content: oklch(96% 0.01 20); + --color-background-light: #ffffff; + --color-card-light: #ffffff; + --color-text-primary-light: #2b1220; + --color-text-secondary-light: #5e503f; + --color-border-light: #f3f4f6; --radius-selector: 1rem; --radius-field: 1rem; --radius-box: 1.5rem; @@ -101,61 +111,18 @@ @custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *)); /* Make LiveView wrapper divs transparent for layout */ -[data-phx-session], [data-phx-teleported-src] { display: contents } +[data-phx-session], +[data-phx-teleported-src] { + display: contents; +} /* This file is for your main application CSS */ -/* New Design Color Palette - Mediterranean Blue Theme */ +/* New Design Color Palette - Spazio Solazzo Theme */ @theme { - /* Primary - Mediterranean Blue */ - --color-primary: #0ea5e9; - --color-primary-hover: #0284c7; - - /* Accent - Sicilian Lemon/Sun */ - --color-accent: #facc15; - - /* Light Mode Colors */ - --color-background-light: #f8fafc; - --color-card-light: #ffffff; - --color-text-primary-light: #0f172a; - --color-text-secondary-light: #334155; - --color-border-light: #e2e8f0; - - /* Dark Mode Colors */ - --color-background-dark: #0f172a; - --color-card-dark: #1e293b; - --color-text-primary-dark: #f1f5f9; - --color-text-secondary-dark: #94a3b8; - --color-border-dark: #334155; - - /* Slate Scale for consistency */ - --color-slate-50: #f8fafc; - --color-slate-100: #f1f5f9; - --color-slate-200: #e2e8f0; - --color-slate-300: #cbd5e1; - --color-slate-400: #94a3b8; - --color-slate-500: #64748b; - --color-slate-600: #475569; - --color-slate-700: #334155; - --color-slate-800: #1e293b; - --color-slate-900: #0f172a; - - /* Sky Scale for primary variations */ - --color-sky-100: #e0f2fe; - --color-sky-400: #38bdf8; - --color-sky-500: #0ea5e9; - --color-sky-600: #0284c7; - - /* Yellow Scale for accent */ - --color-yellow-100: #fef9c3; - --color-yellow-300: #fde047; - --color-yellow-400: #facc15; - --color-yellow-600: #ca8a04; - --color-yellow-700: #a16207; - --color-yellow-900: #713f12; - /* Typography */ - --font-display: 'Inter', 'Montserrat', sans-serif; + --font-display: "Montserrat", sans-serif; + --font-brand: "Montserrat", sans-serif; } /* Global Typography & Styles */ @@ -165,9 +132,16 @@ html { body { font-family: var(--font-display); + background-color: white; + color: var(--color-text-primary-light); } -h1, h2, h3, h4, h5, h6 { +h1, +h2, +h3, +h4, +h5, +h6 { font-family: var(--font-display); font-weight: 700; } @@ -175,3 +149,74 @@ h1, h2, h3, h4, h5, h6 { .prose { font-family: var(--font-display); } + +/* Logo Styles */ +.hero-logo-img { + max-width: 100%; + height: auto; + max-height: 300px; + display: block; + margin: 0 auto; +} + +/* Spazio Solazzo Color Utility Classes */ +/* These map to DaisyUI theme colors for easy maintenance */ +.text-plum { + color: var(--color-primary); +} + +.text-plum-light { + color: #b16788; +} + +.text-plum-dark { + color: var(--color-base-content); +} + +.text-sky-accent { + color: var(--color-secondary); +} + +.text-sky-accent-light { + color: var(--color-accent); +} + +.text-earth { + color: var(--color-neutral); +} + +.text-oak { + color: var(--color-base-300); +} + +.bg-plum { + background-color: var(--color-primary); +} + +.bg-sky-accent { + background-color: var(--color-secondary); +} + +.bg-sky-accent-light { + background-color: var(--color-accent); +} + +.bg-earth { + background-color: var(--color-neutral); +} + +.border-plum { + border-color: var(--color-primary); +} + +.border-sky-accent { + border-color: var(--color-secondary); +} + +.hover\:bg-plum-light:hover { + background-color: #b16788; +} + +.hover\:text-plum:hover { + color: var(--color-primary); +} diff --git a/lib/spazio_solazzo_web/components/booking_components.ex b/lib/spazio_solazzo_web/components/booking_components.ex index 1d1663e..f6411b2 100644 --- a/lib/spazio_solazzo_web/components/booking_components.ex +++ b/lib/spazio_solazzo_web/components/booking_components.ex @@ -26,12 +26,12 @@ defmodule SpazioSolazzoWeb.BookingComponents do
-
+
-

+

Booking Successful!

-

+

Your booking has been confirmed. You will receive a confirmation email shortly.

@@ -59,7 +59,7 @@ defmodule SpazioSolazzoWeb.BookingComponents do @@ -86,25 +86,24 @@ defmodule SpazioSolazzoWeb.BookingComponents do class={[ "group w-full flex items-center justify-between p-4 rounded-xl border-2 transition-all duration-200", if(@booked, - do: - "border-slate-300 dark:border-slate-600 bg-slate-100 dark:bg-slate-700 cursor-not-allowed opacity-75", + do: "border-base-300 bg-base-200 cursor-not-allowed opacity-75", else: - "border-sky-500/40 hover:border-sky-500 bg-transparent hover:bg-sky-500/5 dark:hover:bg-sky-500/10 cursor-pointer" + "border-secondary/40 hover:border-secondary bg-transparent hover:bg-secondary/5 cursor-pointer" ) ]} > {CalendarExt.format_time_range(@time_slot)} {if @booked, do: "Booked", else: "Available"} diff --git a/lib/spazio_solazzo_web/components/core_components.ex b/lib/spazio_solazzo_web/components/core_components.ex index 386f16f..984cf1d 100644 --- a/lib/spazio_solazzo_web/components/core_components.ex +++ b/lib/spazio_solazzo_web/components/core_components.ex @@ -256,12 +256,13 @@ defmodule SpazioSolazzoWeb.CoreComponents do ~H"""
+ <.input + type="textarea" + name="customer_comment" + label="Comments (Optional)" + id="customer_comment" + placeholder="Any special requests or notes..." + value={@form[:customer_comment].value} + rows="4" + />
-
+
- <.icon name="hero-information-circle" class="size-5 text-sky-600 dark:text-sky-400" /> + <.icon name="hero-information-circle" class="size-5 text-info" />
-
+
  • Cancel anytime with no commitment
  • Payment upon arrival only
  • @@ -152,14 +118,14 @@ defmodule SpazioSolazzoWeb.BookingFormLiveComponent do
    diff --git a/lib/spazio_solazzo_web/live/booking/calendar_live_component.ex b/lib/spazio_solazzo_web/live/booking/calendar_live_component.ex index b2962ac..11de78d 100644 --- a/lib/spazio_solazzo_web/live/booking/calendar_live_component.ex +++ b/lib/spazio_solazzo_web/live/booking/calendar_live_component.ex @@ -77,28 +77,28 @@ defmodule SpazioSolazzoWeb.CalendarLiveComponent do type="button" phx-click="prev-month" phx-target={@myself} - class="p-2 rounded-full hover:bg-slate-100 dark:hover:bg-slate-800 text-slate-600 dark:text-slate-400 transition-colors" + class="p-2 rounded-full hover:bg-base-200 text-neutral transition-colors" > <.icon name="hero-chevron-left" class="w-5 h-5" /> -

    +

    {Calendar.strftime(@beginning_of_month, "%B %Y")}

    -
    +
    MoTuWeThFrSaSu
    -
    +
    <%= for date <- @grid do %> <% is_selected = Date.compare(date, @selected_date) == :eq is_past = Date.compare(date, @today) == :lt @@ -115,13 +115,13 @@ defmodule SpazioSolazzoWeb.CalendarLiveComponent do [ "p-2 rounded-full transition-colors", # Styling for past dates (disabled) - is_past && "cursor-not-allowed opacity-40 text-slate-400 dark:text-slate-600", + is_past && "cursor-not-allowed opacity-40 text-neutral", # Styling for selected date is_selected && - "bg-sky-500 text-white font-bold shadow-md shadow-sky-500/30", + "bg-secondary text-white font-bold shadow-md shadow-secondary/30", # Styling for regular dates !is_past && !is_selected && - "hover:bg-sky-500/20 dark:hover:bg-sky-500/20" + "hover:bg-secondary/20" ] } > diff --git a/lib/spazio_solazzo_web/live/carousel_live_component.ex b/lib/spazio_solazzo_web/live/carousel_live_component.ex new file mode 100644 index 0000000..e73754e --- /dev/null +++ b/lib/spazio_solazzo_web/live/carousel_live_component.ex @@ -0,0 +1,74 @@ +defmodule SpazioSolazzoWeb.CarouselLiveComponent do + @moduledoc """ + A LiveComponent for image carousels with navigation controls. + + ## Configuration Options + - `images`: List of image URLs (required) + - `height`: Height of the carousel (default: "650px") + """ + use Phoenix.LiveComponent + + import SpazioSolazzoWeb.CoreComponents, only: [icon: 1] + + @impl true + def update(assigns, socket) do + {:ok, + socket + |> assign(assigns) + |> assign_new(:carousel_index, fn -> 0 end) + |> assign_new(:height, fn -> "650px" end)} + end + + @impl true + def handle_event("carousel_next", _params, socket) do + images_count = length(socket.assigns.images) + new_index = rem(socket.assigns.carousel_index + 1, images_count) + {:noreply, assign(socket, carousel_index: new_index)} + end + + @impl true + def handle_event("carousel_prev", _params, socket) do + images_count = length(socket.assigns.images) + new_index = rem(socket.assigns.carousel_index - 1 + images_count, images_count) + {:noreply, assign(socket, carousel_index: new_index)} + end + + @impl true + def render(assigns) do + ~H""" + + """ + end +end diff --git a/lib/spazio_solazzo_web/live/landing/carousel_live_component.ex b/lib/spazio_solazzo_web/live/landing/carousel_live_component.ex deleted file mode 100644 index 89addae..0000000 --- a/lib/spazio_solazzo_web/live/landing/carousel_live_component.ex +++ /dev/null @@ -1,67 +0,0 @@ -defmodule SpazioSolazzoWeb.CarouselLiveComponent do - @moduledoc """ - A LiveComponent for image carousels with navigation controls. - """ - use Phoenix.LiveComponent - - import SpazioSolazzoWeb.CoreComponents, only: [icon: 1] - - @impl true - def update(assigns, socket) do - {:ok, - socket - |> assign(assigns) - |> assign_new(:carousel_index, fn -> 0 end)} - end - - @impl true - def handle_event("carousel_next", _params, socket) do - images_count = length(socket.assigns.images) - new_index = rem(socket.assigns.carousel_index + 1, images_count) - {:noreply, assign(socket, carousel_index: new_index)} - end - - @impl true - def handle_event("carousel_prev", _params, socket) do - images_count = length(socket.assigns.images) - new_index = rem(socket.assigns.carousel_index - 1 + images_count, images_count) - {:noreply, assign(socket, carousel_index: new_index)} - end - - @impl true - def render(assigns) do - ~H""" -
    -
    -
    -
    -
    - <%= if length(@images) > 1 do %> - - - <% end %> -
    - """ - end -end diff --git a/lib/spazio_solazzo_web/live/landing/coworking_live.html.heex b/lib/spazio_solazzo_web/live/landing/coworking_live.html.heex index 8e3b2ce..3b8b7c0 100644 --- a/lib/spazio_solazzo_web/live/landing/coworking_live.html.heex +++ b/lib/spazio_solazzo_web/live/landing/coworking_live.html.heex @@ -38,19 +38,19 @@ /> -
    +
    -

    +

    Interactive Floor Plan

    -

    +

    Select any desk to customize your booking details on the next page, where availability is confirmed.

    -
    +
    - <.icon name="hero-building-office-2" class="w-32 h-32 text-sky-500" /> + <.icon name="hero-building-office-2" class="w-32 h-32 text-secondary" />
    @@ -59,13 +59,13 @@ navigate={~p"/book/asset/#{asset.id}"} class="group relative flex flex-col items-center gap-3 cursor-pointer" > -
    +
    <.icon name="hero-computer-desktop" - class="w-12 h-12 text-slate-300 group-hover:text-sky-500 dark:group-hover:text-teal-500 transition-colors" + class="w-12 h-12 text-base-300 group-hover:text-secondary transition-colors" />
    - + {asset.name} diff --git a/lib/spazio_solazzo_web/live/page_live.ex b/lib/spazio_solazzo_web/live/page_live.ex index 60f752f..e2eef35 100644 --- a/lib/spazio_solazzo_web/live/page_live.ex +++ b/lib/spazio_solazzo_web/live/page_live.ex @@ -9,11 +9,18 @@ defmodule SpazioSolazzoWeb.PageLive do {:ok, meeting_space} = BookingSystem.get_space_by_slug("meeting", not_found_error?: false) {:ok, music_space} = BookingSystem.get_space_by_slug("music", not_found_error?: false) + carousel_images = [ + "https://lh3.googleusercontent.com/aida-public/AB6AXuApty1_MYrfkL2mpGOAKKvlxo-7B-Y6nnko3DA4UDhJ-dCSjcyOLMFy1C0xZmh1_Pu9TEEFj25GkJ74dR1Sb_x4sY9mDjecKICFvwHFgHkMFVMigsZjldl9rH34x4tZhdpWvUGCo32V1P5_0uwtXVPohKMbvIbBxr5nsPoEy_d7X4WgIMOA1Nv2bwDgkqbsG4X3noBx-riLqcnREEl3cb0kbtquJZJ6pYHfbimuNyuxtfQHzrG8KOMHe3YPoIgWt43mgPtgPL9gswni", + "https://lh3.googleusercontent.com/aida-public/AB6AXuDmh_AkVuUoICqpHk1NdLuLdi0xQBOC8Hy9PrsSNz956igHFRhbNGsB8k0vSLe2U2NW1sxRVZm_dwR27Q4Db_f21XbYkLtfiRYob-j4ran1rTBB0bQAz4QLFSO1yL_cPhDIpAyvC069mDQ33-ckZgZ_yvFsIK_-_0Jj2NEOnDie684uaR7vKuiBWlsr-JmAsPzUp7Aik7Qbzozune348nBz1bvWkBNMCpMO3JV8hrYBo1i6JlUiGSuP3-5fWXKt8dKhxPUN-amjLFgh", + "https://lh3.googleusercontent.com/aida-public/AB6AXuBBJs1jEAgwwiIvJD00kx3aA9pfI-o2fXT-eZ9dEQeHNHhvwQdVqrwsqwNvCR69rIYUNBKf-uY1dqXZSvXaXoE__slTLMqGHkUzSQSXql9PwhW3cLoMMv1wtj52qDORHy-0NE2_qbTLxm051aTxGLloQKUCIklZ0EMKxs8lvMpnLisnRZBkSMyUVcTBcQu16gZw3eDuMGUtXaTXskrQFGwDcThTCCF4TZiNAmgEk87ae3VgEwfJ2zBVeyHQ-BfMo5KHRtNl6lbzBT9N" + ] + {:ok, assign(socket, coworking_space: coworking_space, meeting_space: meeting_space, - music_space: music_space + music_space: music_space, + carousel_images: carousel_images )} end end diff --git a/lib/spazio_solazzo_web/live/page_live.html.heex b/lib/spazio_solazzo_web/live/page_live.html.heex index e8d6c23..1264d62 100644 --- a/lib/spazio_solazzo_web/live/page_live.html.heex +++ b/lib/spazio_solazzo_web/live/page_live.html.heex @@ -1,107 +1,105 @@ -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    + Spazio Solazzo
    +

    + A space in the heart of Palermo where people meet to work, share ideas and spend time together. +

    + + Explore Spaces <.icon name="hero-chevron-down" class="size-5" /> + +
    -
    -

    - Creativity - - lives here - -

    -

    - Work, Meet, and Jam in the heart of the city. Join a grounded community of innovators at Spazio Solazzo. -

    -
    - - Explore Spaces <.icon name="hero-arrow-down" class="size-5" /> - +
    + <.live_component + module={SpazioSolazzoWeb.CarouselLiveComponent} + id="home-carousel" + images={@carousel_images} + height="650px" + /> +
    +
    + +
    +
    +
    +
    +

    + Our Natural Habitats +

    +

    + Sophisticated environments tailored for your creative flow. +

    -
    -
    -
    -
    -
    -

    - Our Spaces -

    -

    - Choose the perfect environment for your needs. -

    +
    + <%= if @coworking_space do %> + <.space_card + id="coworking" + title={@coworking_space.name} + description={@coworking_space.description} + price="15" + time_unit="4 hours" + image_url="https://lh3.googleusercontent.com/aida-public/AB6AXuApty1_MYrfkL2mpGOAKKvlxo-7B-Y6nnko3DA4UDhJ-dCSjcyOLMFy1C0xZmh1_Pu9TEEFj25GkJ74dR1Sb_x4sY9mDjecKICFvwHFgHkMFVMigsZjldl9rH34x4tZhdpWvUGCo32V1P5_0uwtXVPohKMbvIbBxr5nsPoEy_d7X4WgIMOA1Nv2bwDgkqbsG4X3noBx-riLqcnREEl3cb0kbtquJZJ6pYHfbimuNyuxtfQHzrG8KOMHe3YPoIgWt43mgPtgPL9gswni" + primary_label="Coworking" + primary_label_variant={:secondary} + image_position={:left} + booking_url={"/#{@coworking_space.slug}"} + asset_type="Desk" + /> + <% end %> + + <%= if @meeting_space do %> + <.space_card + id="meeting" + title={@meeting_space.name} + description={@meeting_space.description} + price="40" + time_unit="hour" + image_url="https://lh3.googleusercontent.com/aida-public/AB6AXuDmh_AkVuUoICqpHk1NdLuLdi0xQBOC8Hy9PrsSNz956igHFRhbNGsB8k0vSLe2U2NW1sxRVZm_dwR27Q4Db_f21XbYkLtfiRYob-j4ran1rTBB0bQAz4QLFSO1yL_cPhDIpAyvC069mDQ33-ckZgZ_yvFsIK_-_0Jj2NEOnDie684uaR7vKuiBWlsr-JmAsPzUp7Aik7Qbzozune348nBz1bvWkBNMCpMO3JV8hrYBo1i6JlUiGSuP3-5fWXKt8dKhxPUN-amjLFgh" + primary_label="Meeting" + primary_label_variant={:secondary} + secondary_label="Up to 8 people" + secondary_label_icon="hero-user-group" + image_position={:right} + booking_url={"/#{@meeting_space.slug}"} + asset_type="Room" + /> + <% end %> + + <%= if @music_space do %> + <.space_card + id="music" + title={@music_space.name} + description={@music_space.description} + price="25" + time_unit="hour" + image_url="https://lh3.googleusercontent.com/aida-public/AB6AXuBBJs1jEAgwwiIvJD00kx3aA9pfI-o2fXT-eZ9dEQeHNHhvwQdVqrwsqwNvCR69rIYUNBKf-uY1dqXZSvXaXoE__slTLMqGHkUzSQSXql9PwhW3cLoMMv1wtj52qDORHy-0NE2_qbTLxm051aTxGLloQKUCIklZ0EMKxs8lvMpnLisnRZBkSMyUVcTBcQu16gZw3eDuMGUtXaTXskrQFGwDcThTCCF4TZiNAmgEk87ae3VgEwfJ2zBVeyHQ-BfMo5KHRtNl6lbzBT9N" + primary_label="Music" + primary_label_variant={:primary} + secondary_label="Not Soundproof" + secondary_label_icon="hero-speaker-x-mark" + note="Note: This is not a professional studio and is not soundproofed." + image_position={:left} + booking_url={"/#{@music_space.slug}"} + asset_type="Slot" + /> + <% end %>
    -
    - <.icon name="hero-information-circle" class="size-[18px]" /> - Payment due in person upon arrival -
    -
    -
    - -
    - <%= if @coworking_space do %> - <.space_card - id="coworking" - title={@coworking_space.name} - description={@coworking_space.description} - price="15" - time_unit="4 hours" - image_url="https://lh3.googleusercontent.com/aida-public/AB6AXuApty1_MYrfkL2mpGOAKKvlxo-7B-Y6nnko3DA4UDhJ-dCSjcyOLMFy1C0xZmh1_Pu9TEEFj25GkJ74dR1Sb_x4sY9mDjecKICFvwHFgHkMFVMigsZjldl9rH34x4tZhdpWvUGCo32V1P5_0uwtXVPohKMbvIbBxr5nsPoEy_d7X4WgIMOA1Nv2bwDgkqbsG4X3noBx-riLqcnREEl3cb0kbtquJZJ6pYHfbimuNyuxtfQHzrG8KOMHe3YPoIgWt43mgPtgPL9gswni" - primary_label="Workspace" - primary_label_variant={:primary} - image_position={:left} - booking_url={"/#{@coworking_space.slug}"} - asset_type="Desk" - /> - <% end %> - - <%= if @meeting_space do %> - <.space_card - id="meeting" - title={@meeting_space.name} - description={@meeting_space.description} - price="40" - time_unit="hour" - image_url="https://lh3.googleusercontent.com/aida-public/AB6AXuDmh_AkVuUoICqpHk1NdLuLdi0xQBOC8Hy9PrsSNz956igHFRhbNGsB8k0vSLe2U2NW1sxRVZm_dwR27Q4Db_f21XbYkLtfiRYob-j4ran1rTBB0bQAz4QLFSO1yL_cPhDIpAyvC069mDQ33-ckZgZ_yvFsIK_-_0Jj2NEOnDie684uaR7vKuiBWlsr-JmAsPzUp7Aik7Qbzozune348nBz1bvWkBNMCpMO3JV8hrYBo1i6JlUiGSuP3-5fWXKt8dKhxPUN-amjLFgh" - primary_label="Business" - primary_label_variant={:secondary} - secondary_label="Up to 8 people" - secondary_label_icon="hero-user-group" - image_position={:right} - booking_url={"/#{@meeting_space.slug}"} - asset_type="Room" - /> - <% end %> - - <%= if @music_space do %> - <.space_card - id="music" - title={@music_space.name} - description={@music_space.description} - price="25" - time_unit="hour" - image_url="https://lh3.googleusercontent.com/aida-public/AB6AXuBBJs1jEAgwwiIvJD00kx3aA9pfI-o2fXT-eZ9dEQeHNHhvwQdVqrwsqwNvCR69rIYUNBKf-uY1dqXZSvXaXoE__slTLMqGHkUzSQSXql9PwhW3cLoMMv1wtj52qDORHy-0NE2_qbTLxm051aTxGLloQKUCIklZ0EMKxs8lvMpnLisnRZBkSMyUVcTBcQu16gZw3eDuMGUtXaTXskrQFGwDcThTCCF4TZiNAmgEk87ae3VgEwfJ2zBVeyHQ-BfMo5KHRtNl6lbzBT9N" - primary_label="Jam Space" - primary_label_variant={:accent} - secondary_label="Not Soundproof" - secondary_label_icon="hero-speaker-x-mark" - note="Note: This is not a professional studio and is not soundproofed." - image_position={:left} - booking_url={"/#{@music_space.slug}"} - asset_type="Slot" - /> - <% end %> -
    +
    +
    diff --git a/lib/spazio_solazzo_web/live/user/profile_live.html.heex b/lib/spazio_solazzo_web/live/user/profile_live.html.heex index eb69b8d..c9458ba 100644 --- a/lib/spazio_solazzo_web/live/user/profile_live.html.heex +++ b/lib/spazio_solazzo_web/live/user/profile_live.html.heex @@ -1,20 +1,20 @@
    -

    +

    User Profile

    -

    +

    Manage your account settings and personal information

    <%!-- Personal Information Section --%> -
    +
    <.icon name="hero-user" class="text-primary w-6 h-6" /> -

    +

    Personal Information

    @@ -33,12 +33,11 @@ label="Full Name *" required placeholder="Enter your full name" - class="w-full bg-slate-50 dark:bg-slate-900/50 border-slate-200 dark:border-slate-700 rounded-xl px-4 py-3 text-slate-900 dark:text-white focus:ring-2 focus:ring-primary focus:border-transparent transition-all outline-none" />
    -
    @@ -65,15 +64,14 @@ type="tel" label="Phone Number" placeholder="+39 123456789" - class="w-full bg-slate-50 dark:bg-slate-900/50 border-slate-200 dark:border-slate-700 rounded-xl px-4 py-3 text-slate-900 dark:text-white focus:ring-2 focus:ring-primary focus:border-transparent transition-all outline-none" />
    -
    +
    @@ -82,28 +80,28 @@ <%!-- Account Management Section --%> -
    +
    - <.icon name="hero-no-symbol" class="text-danger w-6 h-6" /> -

    + <.icon name="hero-no-symbol" class="text-error w-6 h-6" /> +

    Account Management

    -
    -

    +
    +

    <.icon name="hero-exclamation-triangle" - class="w-5 h-5 text-red-600 dark:text-red-500" + class="w-5 h-5 text-error" /> Danger Zone

    -

    +

    Deleting your account is permanent. This action cannot be undone. All your current active bookings will be cancelled.

    -
    +
    -
    @@ -128,7 +126,7 @@ @@ -144,18 +142,18 @@ class="fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm" phx-click="hide_delete_modal" > -
    +
    - <.icon name="hero-exclamation-triangle" class="text-danger w-8 h-8" /> -

    + <.icon name="hero-exclamation-triangle" class="text-error w-8 h-8" /> +

    Confirm Account Deletion

    -

    +

    Are you absolutely sure you want to delete your account? This action cannot be undone. <%= if @delete_history do %> - + All your booking history will be permanently deleted. <% else %> @@ -167,14 +165,14 @@ diff --git a/priv/repo/seeds.exs b/priv/repo/seeds.exs index c4f7648..1d3816f 100644 --- a/priv/repo/seeds.exs +++ b/priv/repo/seeds.exs @@ -19,18 +19,22 @@ end # Create Coworking Space coworking = - BookingSystem.create_space!("Coworking", "coworking", "Flexible desk spaces for remote work") + BookingSystem.create_space!("Arcipelago", "coworking", "Flexible desk spaces for remote work") IO.puts("✓ Created Coworking space") # Create Meeting Room Space meeting = - BookingSystem.create_space!("Meeting room", "meeting", "Private conference rooms by the hour") + BookingSystem.create_space!( + "Media room", + "meeting", + "Private conference room for your meetings" + ) IO.puts("✓ Created Meeting Room space") # Create Music Studio Space -music = BookingSystem.create_space!("Music room", "music", "Evening recording sessions") +music = BookingSystem.create_space!("Hall", "music", "Tailored for band rehearsals.") IO.puts("✓ Created Music Studio space") diff --git a/priv/static/images/logo.png b/priv/static/images/logo.png new file mode 100644 index 0000000..8bb084c Binary files /dev/null and b/priv/static/images/logo.png differ diff --git a/priv/static/images/logo_spazio_solazzo.svg b/priv/static/images/logo_spazio_solazzo.svg new file mode 100644 index 0000000..e8ac9c4 --- /dev/null +++ b/priv/static/images/logo_spazio_solazzo.svg @@ -0,0 +1,522 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +