{# Admin panel sidebar — included in all admin pages #}
<div class="hb-admin-sidebar">
<div class="hb-admin-sidebar__brand">
<span class="hb-admin-sidebar__logo">🐝</span>
<span class="hb-admin-sidebar__title">HoneyBee Admin</span>
</div>
<nav class="hb-admin-nav">
<a href="{{ path('super_admin_command_center') }}"
class="hb-admin-nav__item {{ app.request.get('_route') == 'super_admin_command_center' ? 'is-active' : '' }}">
<i class="ft-grid"></i> Dashboard
</a>
<div class="hb-admin-nav__group-label">Quotes</div>
<a href="{{ path('admin_quotes_list') }}"
class="hb-admin-nav__item {{ app.request.get('_route') starts with 'admin_quote' ? 'is-active' : '' }}">
<i class="ft-file-text"></i> All Quotes
{% set _pending_quotes = pending_quotes_count|default(0) %}
{% if _pending_quotes > 0 %}
<span class="hb-admin-badge">{{ _pending_quotes }}</span>
{% endif %}
</a>
<a href="{{ path('admin_quotes_list', {status: 'requested'}) }}"
class="hb-admin-nav__item hb-admin-nav__item--sub">
Requested
</a>
<a href="{{ path('admin_quotes_list', {status: 'modified'}) }}"
class="hb-admin-nav__item hb-admin-nav__item--sub">
Modified
</a>
<a href="{{ path('admin_quotes_list', {status: 'accepted'}) }}"
class="hb-admin-nav__item hb-admin-nav__item--sub">
Accepted
</a>
<a href="{{ path('admin_quotes_list', {status: 'rejected'}) }}"
class="hb-admin-nav__item hb-admin-nav__item--sub">
Rejected
</a>
<a href="{{ path('admin_quote_create') }}"
class="hb-admin-nav__item hb-admin-nav__item--action">
<i class="ft-plus-circle"></i> New Quote
</a>
<div class="hb-admin-nav__group-label">Invoices</div>
<a href="{{ path('admin_invoices_list') }}"
class="hb-admin-nav__item {{ app.request.get('_route') starts with 'admin_invoice' ? 'is-active' : '' }}">
<i class="ft-dollar-sign"></i> All Invoices
</a>
<a href="{{ path('admin_invoices_list', {status: 'pending'}) }}"
class="hb-admin-nav__item hb-admin-nav__item--sub">
Pending
</a>
<a href="{{ path('admin_invoices_list', {status: 'paid'}) }}"
class="hb-admin-nav__item hb-admin-nav__item--sub">
Paid
</a>
<a href="{{ path('admin_invoices_list', {status: 'failed'}) }}"
class="hb-admin-nav__item hb-admin-nav__item--sub">
Failed
</a>
<div class="hb-admin-nav__group-label">Companies</div>
<a href="{{ path('super_admin_command_center') }}"
class="hb-admin-nav__item {{ app.request.get('_route') == 'super_admin_command_center' ? 'is-active' : '' }}">
<i class="ft-briefcase"></i> All Companies
</a>
<a href="{{ path('owner_dashboard') }}"
class="hb-admin-nav__item {{ app.request.get('_route') starts with 'owner_' ? 'is-active' : '' }}">
<i class="ft-grid"></i> Owner Portal
</a>
<div class="hb-admin-nav__group-label">Support</div>
<a href="{{ path('ticket_list') }}"
class="hb-admin-nav__item {{ app.request.get('_route') starts with 'ticket' ? 'is-active' : '' }}">
<i class="ft-alert-circle"></i> All Tickets
</a>
<a href="{{ path('ticket_create') }}"
class="hb-admin-nav__item hb-admin-nav__item--action">
<i class="ft-plus-circle"></i> New Ticket
</a>
</nav>
</div>
<style>
.hb-admin-sidebar {
position: fixed;
top: 0; left: 0;
width: 220px;
height: 100vh;
background: linear-gradient(180deg, #0f2952 0%, #1a3d6e 100%);
display: flex;
flex-direction: column;
z-index: 900;
overflow-y: auto;
box-shadow: 4px 0 18px rgba(15,41,82,0.18);
}
.hb-admin-sidebar__brand {
display: flex;
align-items: center;
gap: 10px;
padding: 22px 20px 18px;
border-bottom: 1px solid rgba(255,255,255,0.08);
}
.hb-admin-sidebar__logo { font-size: 1.5rem; }
.hb-admin-sidebar__title {
font-size: 0.92rem;
font-weight: 700;
color: #fff;
letter-spacing: 0.02em;
}
.hb-admin-nav { padding: 10px 0 30px; flex: 1; }
.hb-admin-nav__group-label {
font-size: 0.65rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.12em;
color: rgba(255,255,255,0.35);
padding: 16px 20px 4px;
}
.hb-admin-nav__item {
display: flex;
align-items: center;
gap: 9px;
padding: 9px 20px;
color: rgba(255,255,255,0.72);
font-size: 0.865rem;
text-decoration: none;
transition: background 0.15s, color 0.15s;
border-radius: 0;
position: relative;
}
.hb-admin-nav__item:hover,
.hb-admin-nav__item.is-active {
background: rgba(255,255,255,0.10);
color: #fff;
text-decoration: none;
}
.hb-admin-nav__item.is-active::before {
content: '';
position: absolute;
left: 0; top: 0; bottom: 0;
width: 3px;
background: #f5c518;
border-radius: 0 2px 2px 0;
}
.hb-admin-nav__item--sub {
padding-left: 40px;
font-size: 0.815rem;
color: rgba(255,255,255,0.52);
}
.hb-admin-nav__item--sub:hover { color: rgba(255,255,255,0.85); }
.hb-admin-nav__item--action {
margin: 6px 12px;
padding: 8px 14px;
background: rgba(245,197,24,0.12);
border: 1px solid rgba(245,197,24,0.3);
border-radius: 7px;
color: #f5c518;
font-weight: 600;
}
.hb-admin-nav__item--action:hover {
background: rgba(245,197,24,0.22);
color: #f5c518;
}
.hb-admin-nav__divider {
height: 1px;
background: rgba(255,255,255,0.08);
margin: 10px 20px;
}
.hb-admin-badge {
margin-left: auto;
background: #e74c3c;
color: #fff;
font-size: 0.68rem;
font-weight: 700;
border-radius: 10px;
padding: 1px 7px;
min-width: 18px;
text-align: center;
}
/* Push main content right when sidebar is present */
.hb-admin-layout { margin-left: 220px; }
@media (max-width: 900px) {
.hb-admin-sidebar { display: none; }
.hb-admin-layout { margin-left: 0; }
}
</style>