add Shivasakthi theme layout, dashboard components, and reservation models

This commit is contained in:
Alaguraj0361 2026-10-12 17:27:58 +05:30
parent bf58ac9667
commit 6daa038bd4
11 changed files with 515 additions and 92 deletions

View File

@ -1,6 +1,3 @@
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap');
@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');
/* Direct FontAwesome font-face declaration with reliable paths */
@font-face {
font-family: 'FontAwesome';
@ -1877,7 +1874,8 @@ body.o_saas_admin_body h4, body.o_saas_admin_body h5, body.o_saas_admin_body h6,
background: #ffffff;
border: 1px solid #e2e8f0;
border-radius: 16px;
overflow: hidden;
overflow-x: auto !important;
-webkit-overflow-scrolling: touch !important;
box-shadow: 0 4px 20px -2px rgba(15, 23, 42, 0.08), 0 2px 6px -1px rgba(15, 23, 42, 0.04);
}
@ -2468,114 +2466,444 @@ body.o_saas_admin_body h4, body.o_saas_admin_body h5, body.o_saas_admin_body h6,
/* -------------------------------------------------------------
Responsive Mobile & Tablet Viewport Adaptations
------------------------------------------------------------- */
/* Sidebar Brand Row with Close Button */
.o_sidebar_brand_row {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 28px;
}
.o_btn_sidebar_close {
display: none;
border: none;
background: #f1f5f9;
color: #64748b;
width: 34px;
height: 34px;
border-radius: 10px;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 16px;
transition: all 0.2s ease;
}
.o_btn_sidebar_close:hover {
background: #fee2e2;
color: #e50000;
}
/* Off-canvas Overlay Backdrop */
.o_sidebar_overlay {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(15, 23, 42, 0.6);
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
z-index: 1040;
opacity: 0;
pointer-events: none;
transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.o_sidebar_overlay.o_sidebar_open {
opacity: 1;
pointer-events: auto;
}
/* Topbar Left Controls (Hamburger & Brand) */
.o_topbar_left {
display: flex;
align-items: center;
gap: 14px;
flex: 1;
}
.o_btn_mobile_toggle {
display: none;
width: 40px;
height: 40px;
border-radius: 10px;
border: 1px solid #e2e8f0;
background: #ffffff;
color: #0f172a;
align-items: center;
justify-content: center;
font-size: 16px;
cursor: pointer;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
transition: all 0.2s ease;
}
.o_btn_mobile_toggle:hover {
background: #fff1f2;
color: #e50000;
border-color: #fee2e2;
}
.o_mobile_brand {
display: none;
align-items: center;
}
/* 1. Large Tablets & Small Desktops (max-width: 1200px) */
@media (max-width: 1200px) {
.o_middle_grid {
grid-template-columns: 1fr 1fr !important;
gap: 18px !important;
}
.o_card_activity {
grid-column: span 2 !important;
}
.o_bottom_grid {
grid-template-columns: 1fr !important;
gap: 18px !important;
}
.o_res_row_card {
grid-template-columns: 1.4fr 1.4fr 1fr !important;
gap: 16px !important;
}
.o_plans_grid {
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
gap: 20px !important;
}
.o_apps_grid {
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
gap: 18px !important;
}
}
/* 2. Standard Tablets & Mobile Viewports (max-width: 991px) */
@media (max-width: 991px) {
.o_saas_layout {
flex-direction: column !important;
width: 100% !important;
html, body, .o_dine_dashboard_root, .o_restaurant_body {
max-width: 100vw !important;
overflow-x: hidden !important;
}
.o_saas_sidebar {
position: static !important;
.o_saas_layout {
position: relative !important;
flex-direction: column !important;
width: 100% !important;
max-width: 100% !important;
min-width: 0 !important;
height: auto !important;
padding: 14px 16px !important;
border-right: none !important;
border-bottom: 1px solid #e2e8f0 !important;
box-sizing: border-box !important;
max-width: 100vw !important;
overflow-x: hidden !important;
}
.o_sidebar_brand {
margin-bottom: 12px !important;
/* Off-canvas Drawer Navigation */
.o_saas_sidebar {
position: fixed !important;
top: 0 !important;
left: 0 !important;
bottom: 0 !important;
width: 290px !important;
max-width: 85vw !important;
height: 100vh !important;
z-index: 1050 !important;
background: #ffffff !important;
transform: translateX(-100%) !important;
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
box-shadow: none !important;
padding: 20px 18px !important;
overflow-y: auto !important;
}
.o_sidebar_nav {
flex-direction: row !important;
overflow-x: auto !important;
flex-wrap: nowrap !important;
gap: 6px !important;
-webkit-overflow-scrolling: touch !important;
padding-bottom: 4px !important;
.o_saas_sidebar.o_sidebar_open {
transform: translateX(0) !important;
box-shadow: 0 0 45px rgba(0, 0, 0, 0.35) !important;
}
.o_nav_link {
white-space: nowrap !important;
padding: 6px 12px !important;
font-size: 13px !important;
flex-shrink: 0 !important;
.o_btn_sidebar_close {
display: inline-flex !important;
}
.o_nav_link.active::before {
display: none !important;
.o_btn_mobile_toggle {
display: inline-flex !important;
}
.o_sidebar_promo {
display: none !important;
.o_mobile_brand {
display: inline-flex !important;
}
.o_saas_main {
margin-left: 0 !important;
width: 100% !important;
max-width: 100% !important;
padding: 16px 14px !important;
padding: 16px 16px 36px 16px !important;
box-sizing: border-box !important;
}
.o_middle_grid {
grid-template-columns: 1fr !important;
gap: 16px !important;
}
.o_card_activity {
grid-column: span 1 !important;
}
.o_res_row_card {
grid-template-columns: 1fr 1fr !important;
gap: 14px !important;
padding: 18px 20px !important;
}
.o_kpi_grid {
grid-template-columns: repeat(2, 1fr) !important;
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
gap: 14px !important;
}
.o_settings_grid {
grid-template-columns: 1fr !important;
gap: 16px !important;
}
}
/* 3. Small Mobile Devices (max-width: 767px) */
@media (max-width: 767px) {
.o_saas_topbar {
flex-direction: column-reverse !important;
flex-direction: column !important;
align-items: stretch !important;
gap: 12px !important;
margin-bottom: 20px !important;
}
.o_topbar_left {
justify-content: space-between !important;
width: 100% !important;
}
.o_topbar_actions {
width: 100% !important;
justify-content: flex-end !important;
gap: 8px !important;
}
.o_search_container {
width: 100% !important;
max-width: 100% !important;
}
.o_topbar_actions {
justify-content: flex-end !important;
width: 100% !important;
}
.o_page_header {
flex-direction: column !important;
align-items: flex-start !important;
gap: 12px !important;
align-items: stretch !important;
gap: 14px !important;
margin-bottom: 18px !important;
}
.o_heading_title {
font-size: 22px !important;
}
.o_heading_subtitle {
font-size: 12px !important;
}
.o_header_controls {
flex-wrap: wrap !important;
flex-direction: column !important;
align-items: stretch !important;
gap: 8px !important;
width: 100% !important;
}
.o_status_tag, .o_date_picker_btn {
width: 100% !important;
justify-content: center !important;
text-align: center !important;
}
.o_btn_red_action {
width: 100% !important;
justify-content: center !important;
padding: 10px 16px !important;
height: 42px !important;
}
.o_kpi_grid {
grid-template-columns: 1fr !important;
gap: 12px !important;
}
.o_kpi_card {
padding: 18px 16px !important;
}
.o_kpi_number {
font-size: 26px !important;
}
.o_activity_content {
flex-direction: column !important;
align-items: stretch !important;
gap: 16px !important;
}
.o_substats_col {
border-left: none !important;
border-top: 1px solid #f1f5f9 !important;
padding-left: 0 !important;
padding-top: 16px !important;
width: 100% !important;
}
.o_res_row_card {
display: flex !important;
flex-direction: column !important;
align-items: stretch !important;
gap: 14px !important;
padding: 16px !important;
}
.o_res_actions_col {
width: 100% !important;
display: flex !important;
gap: 10px !important;
}
.o_res_actions_col .o_btn_launch_red,
.o_res_actions_col .o_btn_manage_white {
flex: 1 !important;
text-align: center !important;
}
.o_page_toolbar {
flex-direction: column !important;
align-items: stretch !important;
gap: 12px !important;
gap: 10px !important;
}
.o_toolbar_search {
width: 100% !important;
}
.o_filter_pills {
overflow-x: auto !important;
flex-wrap: nowrap !important;
padding-bottom: 6px !important;
-webkit-overflow-scrolling: touch !important;
}
.o_filter_pill {
white-space: nowrap !important;
flex-shrink: 0 !important;
padding: 6px 12px !important;
font-size: 12px !important;
}
.o_kpi_grid {
.o_modern_table_card {
overflow-x: auto !important;
-webkit-overflow-scrolling: touch !important;
border-radius: 12px !important;
width: 100% !important;
}
.o_modern_table {
min-width: 580px !important;
}
.o_modern_table th,
.o_modern_table td {
padding: 12px 14px !important;
font-size: 12.5px !important;
}
.o_tables_grid {
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
gap: 12px !important;
}
.o_table_tile {
padding: 14px 10px !important;
border-radius: 12px !important;
}
.o_table_num {
font-size: 15px !important;
}
.o_plans_grid {
grid-template-columns: 1fr !important;
gap: 16px !important;
}
.o_apps_grid {
grid-template-columns: 1fr !important;
gap: 14px !important;
}
.o_apps_grid {
.o_quick_apps_grid {
grid-template-columns: 1fr !important;
gap: 16px !important;
gap: 10px !important;
}
.o_modal_dialog {
width: 95% !important;
max-width: 95% !important;
margin: 10px !important;
border-radius: 16px !important;
}
.o_modal_header {
padding: 16px 18px !important;
}
.o_modal_body {
padding: 18px !important;
max-height: 80vh !important;
}
.o_modal_footer {
padding: 14px 18px !important;
flex-direction: column-reverse !important;
}
.o_modal_footer button {
width: 100% !important;
}
}
/* 4. Ultra-compact Phones (max-width: 480px) */
@media (max-width: 480px) {
.o_saas_main {
padding: 12px 10px 28px 10px !important;
}
.o_heading_title {
font-size: 20px !important;
}
.o_kpi_card {
padding: 14px 12px !important;
}
.o_kpi_number {
font-size: 24px !important;
}
.o_tables_grid {
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
gap: 8px !important;
}
.o_table_tile {
padding: 10px 8px !important;
}
.o_table_icon_wrap {
width: 38px !important;
height: 38px !important;
font-size: 16px !important;
margin-bottom: 8px !important;
}
.o_btn_toggle_table {
padding: 4px 8px !important;
font-size: 11px !important;
}
}

View File

@ -29,6 +29,63 @@ document.addEventListener('DOMContentLoaded', function () {
}
// -------------------------------------------------------------
// Mobile Navigation Drawer Toggle & Backdrop Handlers
// -------------------------------------------------------------
const btnMobileToggle = document.getElementById('btnMobileSidebarToggle');
const btnSidebarClose = document.getElementById('btnSidebarClose');
const sidebarBackdrop = document.getElementById('sidebarBackdrop');
const saasSidebar = document.querySelector('.o_saas_sidebar');
function openMobileSidebar() {
if (saasSidebar) saasSidebar.classList.add('o_sidebar_open');
if (sidebarBackdrop) sidebarBackdrop.classList.add('o_sidebar_open');
document.body.style.overflow = 'hidden';
}
function closeMobileSidebar() {
if (saasSidebar) saasSidebar.classList.remove('o_sidebar_open');
if (sidebarBackdrop) sidebarBackdrop.classList.remove('o_sidebar_open');
document.body.style.overflow = '';
}
if (btnMobileToggle) {
btnMobileToggle.addEventListener('click', function (e) {
e.preventDefault();
e.stopPropagation();
openMobileSidebar();
});
}
if (btnSidebarClose) {
btnSidebarClose.addEventListener('click', function (e) {
e.preventDefault();
e.stopPropagation();
closeMobileSidebar();
});
}
if (sidebarBackdrop) {
sidebarBackdrop.addEventListener('click', function (e) {
e.preventDefault();
closeMobileSidebar();
});
}
// Auto-close drawer on link click in mobile view
document.querySelectorAll('.o_saas_sidebar .o_nav_link').forEach(link => {
link.addEventListener('click', function () {
if (window.innerWidth <= 991) {
closeMobileSidebar();
}
});
});
// Close on Escape key
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape') {
closeMobileSidebar();
}
});
// Toast Notification Utility
// -------------------------------------------------------------
function showToast(message, type = 'success') {

View File

@ -4,23 +4,28 @@
<!-- 1. REUSABLE DASHBOARD SIDEBAR COMPONENT -->
<!-- ============================================================== -->
<template id="dashboard_sidebar" name="Dashboard Sidebar">
<aside class="o_saas_sidebar">
<aside class="o_saas_sidebar" id="dashboardSidebar">
<div class="o_sidebar_top">
<!-- Logo Brand -->
<a href="/" class="o_sidebar_brand text-decoration-none">
<svg class="o_brand_logo_svg" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 4C14.5 4 12 6.5 12 9.5C10 9.8 8.5 11.5 8.5 13.5C8.5 15.2 9.6 16.6 11.2 17.1C11.1 17.5 11 18 11 18.5C11 21.5 13.5 24 16.5 24H19.5C22.5 24 25 21.5 25 18.5C25 18 24.9 17.5 24.8 17.1C26.4 16.6 27.5 15.2 27.5 13.5C27.5 11.5 26 9.8 24 9.5C24 6.5 21.5 4 18 4Z" fill="#fee2e2" stroke="#e50000" stroke-width="2.2" stroke-linejoin="round"/>
<path d="M12 24V28C12 29.1 12.9 30 14 30H22C23.1 30 24 29.1 24 28V24" stroke="#e50000" stroke-width="2.2" stroke-linecap="round"/>
<path d="M14 27H22" stroke="#e50000" stroke-width="1.8" stroke-linecap="round"/>
</svg>
<div>
<div class="o_brand_title">Dine<span class="text-danger">360</span></div>
<div class="o_brand_tagline">
<t t-if="is_saas_master">Restaurant Management Platform</t>
<t t-else=""><t t-esc="stats.get('company_name', 'Restaurant Platform')"/></t>
<!-- Logo Brand Row with Close Button for Mobile -->
<div class="o_sidebar_brand_row">
<a href="/" class="o_sidebar_brand text-decoration-none mb-0">
<svg class="o_brand_logo_svg" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 4C14.5 4 12 6.5 12 9.5C10 9.8 8.5 11.5 8.5 13.5C8.5 15.2 9.6 16.6 11.2 17.1C11.1 17.5 11 18 11 18.5C11 21.5 13.5 24 16.5 24H19.5C22.5 24 25 21.5 25 18.5C25 18 24.9 17.5 24.8 17.1C26.4 16.6 27.5 15.2 27.5 13.5C27.5 11.5 26 9.8 24 9.5C24 6.5 21.5 4 18 4Z" fill="#fee2e2" stroke="#e50000" stroke-width="2.2" stroke-linejoin="round"/>
<path d="M12 24V28C12 29.1 12.9 30 14 30H22C23.1 30 24 29.1 24 28V24" stroke="#e50000" stroke-width="2.2" stroke-linecap="round"/>
<path d="M14 27H22" stroke="#e50000" stroke-width="1.8" stroke-linecap="round"/>
</svg>
<div>
<div class="o_brand_title">Dine<span class="text-danger">360</span></div>
<div class="o_brand_tagline">
<t t-if="is_saas_master">Restaurant Management Platform</t>
<t t-else=""><t t-esc="stats.get('company_name', 'Restaurant Platform')"/></t>
</div>
</div>
</div>
</a>
</a>
<button type="button" class="o_btn_sidebar_close d-lg-none" id="btnSidebarClose" aria-label="Close Navigation">
<i class="fa fa-times"/>
</button>
</div>
<!-- Nav Menu -->
<nav class="o_sidebar_nav">
@ -101,6 +106,8 @@
</t>
</div>
</aside>
<!-- Overlay Backdrop for Mobile Drawer -->
<div class="o_sidebar_overlay" id="sidebarBackdrop"/>
</template>
<!-- ============================================================== -->
@ -108,9 +115,17 @@
<!-- ============================================================== -->
<template id="dashboard_topbar" name="Dashboard Topbar">
<header class="o_saas_topbar">
<div class="o_search_container">
<i class="fa fa-search o_search_icon"/>
<input type="text" placeholder="Search restaurants, users, or anything..." class="o_search_input"/>
<div class="o_topbar_left">
<button type="button" class="o_btn_mobile_toggle d-lg-none" id="btnMobileSidebarToggle" aria-label="Toggle Navigation">
<i class="fa fa-bars"/>
</button>
<a href="/" class="o_mobile_brand d-lg-none text-decoration-none">
<span class="o_brand_title">Dine<span class="text-danger">360</span></span>
</a>
<div class="o_search_container">
<i class="fa fa-search o_search_icon"/>
<input type="text" placeholder="Search restaurants, users, or anything..." class="o_search_input"/>
</div>
</div>
<div class="o_topbar_actions">

View File

@ -12,7 +12,7 @@ class PosOrderLine(models.Model):
('ready', 'Ready'),
('served', 'Served'),
('cancelled', 'Cancelled')
], string='Preparation Status', default='waiting', tracking=True, group_expand='_read_group_preparation_status')
], string='Preparation Status', default='waiting', group_expand='_read_group_preparation_status')
@api.model
def _read_group_preparation_status(self, stages, domain, order):
@ -25,21 +25,8 @@ class PosOrderLine(models.Model):
table_id = fields.Many2one('restaurant.table', related='order_id.table_id', string='Table', store=True)
floor_id = fields.Many2one('restaurant.floor', related='order_id.table_id.floor_id', string='Floor', store=True)
order_source = fields.Selection([
('walk_in', 'Walk-In (Standard POS)'),
('phone', 'Telephone Order'),
('online', 'Online / eCommerce'),
('whatsapp', 'WhatsApp'),
('social_media', 'Social Media'),
('platform', 'Third-Party Platform'),
('kiosk', 'Self-Order Kiosk'),
('qr', 'QR Table Order'),
], related='order_id.order_source', string='Order Source', store=True)
fulfilment_type = fields.Selection([
('dine_in', 'Dine-In'),
('pickup', 'Pickup'),
('delivery', 'Delivery'),
], related='order_id.fulfilment_type', string='Fulfilment Type', store=True)
order_source = fields.Selection(related='order_id.order_source', string='Order Source', store=True, readonly=True)
fulfilment_type = fields.Selection(related='order_id.fulfilment_type', string='Fulfilment Type', store=True, readonly=True)
@api.depends('preparation_time_start', 'preparation_time_end')
def _compute_cooking_time(self):

View File

@ -6,7 +6,7 @@ class ReservationHoliday(models.Model):
_description = 'Reservation Holiday/Override'
_order = 'date desc'
name = fields.Char(string='Description', required=True, placeholder="e.g. Christmas Day")
name = fields.Char(string='Description', required=True)
date = fields.Date(string='Date', required=True)
is_closed = fields.Boolean(string='Closed for Reservations', default=True)

View File

@ -63,7 +63,7 @@ class RestaurantReservation(models.Model):
('confirmed', 'Confirmed'),
('completed', 'Completed'),
('cancelled', 'Cancelled')
], string='Status', default='draft', tracking=True)
], string='Status', default='draft')
@api.model
def create(self, vals):

View File

@ -63,6 +63,20 @@
color: var(--res-secondary-color) !important;
border-color: var(--res-primary-color) !important;
}
@media (max-width: 767px) {
.s_reservation_form {
padding-top: 24px !important;
padding-bottom: 24px !important;
}
.res-title {
font-size: 2rem !important;
}
.slot-btn {
min-width: 80px !important;
padding: 8px 10px !important;
font-size: 0.85rem !important;
}
}
/* Hide website header and footer on the reservation page */
header#top,
footer#bottom {
@ -74,13 +88,13 @@
</style>
</t>
<div id="wrap" class="oe_structure oe_empty">
<section class="s_reservation_form pt64 pb64" style="background: linear-gradient(rgba(0,0,0,0.6), rgba(0,0,0,0.6)), url('/dine360_theme_shivasakthi/static/src/img/bg_reservation.jpg') center/cover no-repeat;">
<section class="s_reservation_form pt64 pb64" style="background: linear-gradient(rgba(0,0,0,0.6), rgba(0,0,0,0.6)), url('/dine360_theme_shivasakthi/static/src/img/bg-image.jpg') center/cover no-repeat;">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="card border-0 shadow-lg" style="background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); border-radius: 20px;">
<div class="card-body p-5">
<div class="text-center mb-5">
<div class="card-body p-3 p-sm-4 p-md-5">
<div class="text-center mb-4 mb-md-5">
<h2 class="display-4 fw-bold mb-2 res-title">Table Reservation</h2>
<p class="text-muted mb-1">Book your spot for an authentic South Indian dining experience.</p>
<div class="mt-2 text-center">
@ -383,6 +397,19 @@
background: color-mix(in srgb, var(--res-primary-color) 80%, black) !important;
color: var(--res-secondary-color) !important;
}
@media (max-width: 767px) {
.display-3 {
font-size: 2.2rem !important;
}
.res-success-card {
padding: 1.25rem !important;
}
.res-back-btn {
width: 100% !important;
padding-left: 20px !important;
padding-right: 20px !important;
}
}
/* Hide website header and footer on the reservation success page */
header#top,
footer#bottom {
@ -398,11 +425,11 @@
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6">
<div class="p-5 rounded-circle d-inline-block mb-4 res-success-icon-box">
<div class="p-4 p-md-5 rounded-circle d-inline-block mb-4 res-success-icon-box">
<i class="fa fa-check-circle display-1 res-success-icon"></i>
</div>
<h1 class="display-3 fw-bold mb-3">Thank You!</h1>
<p class="lead text-muted mb-5">Your reservation request <strong><t t-esc="reservation.name"/></strong> has been received. We will contact you shortly to confirm.</p>
<p class="lead text-muted mb-4 mb-md-5">Your reservation request <strong><t t-esc="reservation.name"/></strong> has been received. We will contact you shortly to confirm.</p>
<div class="p-4 mb-5 mx-auto res-success-card">
<div class="d-flex justify-content-around align-items-center text-center">
<div>

View File

@ -52,7 +52,7 @@
</div>
</div>
<a href="/menu" class="btn btn-warning text-uppercase fw-bold px-4 py-3 rounded-0" style="font-size: 14px; letter-spacing: 1px;">Discover More <i class="fa fa-arrow-right ms-2"></i></a>
<a href="/shop" class="btn btn-warning text-uppercase fw-bold px-4 py-3 rounded-0" style="font-size: 14px; letter-spacing: 1px;">Discover More <i class="fa fa-arrow-right ms-2"></i></a>
</div>
</div>
</div>

View File

@ -97,6 +97,15 @@
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
.fadeIn { animation-name: fadeIn; }
#uber_message strong { display: block; margin-bottom: 4px; }
@media (max-width: 576px) {
.order-type-card { padding: 12px 8px; border-radius: 10px; }
.order-type-card i { font-size: 1.4rem; margin-bottom: 4px; }
.order-type-card h5 { font-size: 0.9rem; margin-bottom: 2px; }
.order-type-card p { font-size: 0.72rem; line-height: 1.2; }
.active-mark { top: 6px; right: 6px; font-size: 14px; }
.section-header { margin: 20px 0 10px 0; font-size: 0.98rem; }
}
</style>
<div class="row mb-4 g-3 mt-1">

View File

@ -12,7 +12,7 @@
<h1 class="display-3 fw-bold mb-3" style="letter-spacing: 1px;">FAQ</h1>
<nav aria-label="breadcrumb" class="d-flex justify-content-center">
<ol class="breadcrumb mb-0" style="background: transparent; font-size: 14px; text-transform: uppercase; font-weight: 600;">
<li class="breadcrumb-item"><a href="/home" class="text-white text-decoration-none" style="opacity: 0.8;">Home</a></li>
<li class="breadcrumb-item"><a href="/" class="text-white text-decoration-none" style="opacity: 0.8;">Home</a></li>
<!-- Separator (manual or via CSS, bootstrap adds /) -->
<li class="breadcrumb-item active" style="color: #e5b945;" aria-current="page">FAQ</li>
</ol>

View File

@ -150,7 +150,7 @@
<ul class="footer-links-list list-unstyled ps-0" style="font-size: 14px;">
<li class="mb-3"><a href="/" class="text-decoration-none text-white">Home</a></li>
<li class="mb-3"><a href="/about" class="text-decoration-none text-white">About</a></li>
<li class="mb-3"><a href="/menu" class="text-decoration-none text-white">Menu</a></li>
<li class="mb-3"><a href="/shop" class="text-decoration-none text-white">Menu</a></li>
<li class="mb-3"><a href="/contactus" class="text-decoration-none text-white">Contact</a></li>
</ul>
</div>