{#
@System/inc/_start_anywhere_modal.html.twig
"Start Anywhere" global entry launcher modal.
Triggered by any element with data-toggle="modal" data-target="#startAnywhereModal".
#}
<div class="modal fade" id="startAnywhereModal" tabindex="-1"
aria-labelledby="startAnywhereModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content" style="
background: #ffffff;
border-radius: 16px;
border: 1px solid var(--cp-outline-variant);
box-shadow: 0 24px 64px rgba(26,28,28,.18);
overflow: hidden;
">
{# ── Header ─────────────────────────────────────────────────────── #}
<div style="
padding: 22px 24px 16px;
border-bottom: 1px solid var(--cp-outline-variant);
display: flex;
align-items: flex-start;
justify-content: space-between;
">
<div>
<h5 id="startAnywhereModalLabel" style="
font-family: var(--cp-font-head);
font-size: 18px;
font-weight: 700;
color: var(--cp-text);
margin: 0 0 3px;
">
<i class="zmdi zmdi-plus-circle" style="color: var(--cp-primary); margin-right: 8px;"></i>
Start Anywhere
</h5>
<p style="font-size: 12.5px; color: var(--cp-text-muted); margin: 0;">
Quickly initiate new workflows and records across the CRM & ERP.
</p>
</div>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"
style="font-size: 20px; color: var(--cp-text-faint); background: none; border: none; cursor: pointer; padding: 0 2px;">
×
</button>
</div>
{# ── Action grid ─────────────────────────────────────────────────── #}
<div style="padding: 20px 24px;">
<div style="
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12px;
" id="cp-sa-grid">
{# Lead #}
<a href="{{ path('create_lead', {id: 0}) }}" class="cp-sa-card" data-group="crm">
<div class="cp-sa-icon" style="background: rgba(91,93,113,.1); color: #5b5d71;">
<i class="zmdi zmdi-account-add"></i>
</div>
<div class="cp-sa-title">Create Lead</div>
<div class="cp-sa-desc">Log a new potential customer inquiry or prospect.</div>
<div class="cp-sa-meta">
<span>Min: Name, Email/Phone</span>
<span class="cp-sa-next">→ Qualification</span>
</div>
</a>
{# Account #}
<a href="{{ path('create_client', {id: 0}) }}" class="cp-sa-card" data-group="crm">
<div class="cp-sa-icon" style="background: rgba(91,93,113,.1); color: #5b5d71;">
<i class="zmdi zmdi-city-alt"></i>
</div>
<div class="cp-sa-title">Create Account</div>
<div class="cp-sa-desc">Register a new company or organisational entity.</div>
<div class="cp-sa-meta">
<span>Min: Company Name</span>
<span class="cp-sa-next">→ Add Contacts</span>
</div>
</a>
{# Opportunity #}
<a href="{{ path('create_opportunity', {id: 0}) }}" class="cp-sa-card" data-group="crm">
<div class="cp-sa-icon" style="background: rgba(133,79,0,.1); color: var(--cp-primary);">
<i class="zmdi zmdi-trending-up"></i>
</div>
<div class="cp-sa-title">Create Opportunity</div>
<div class="cp-sa-desc">Track a potential sale or deal pipeline.</div>
<div class="cp-sa-meta">
<span>Min: Value, Stage, Account</span>
<span class="cp-sa-next">→ Proposal</span>
</div>
</a>
{# Tender/RFQ #}
<a href="#" class="cp-sa-card" data-group="crm">
<div class="cp-sa-icon" style="background: rgba(112,93,0,.1); color: #705d00;">
<i class="zmdi zmdi-upload"></i>
</div>
<div class="cp-sa-title">Import Tender / RFQ</div>
<div class="cp-sa-desc">Upload and parse a formal request for quote.</div>
<div class="cp-sa-meta">
<span>Min: PDF/Word File</span>
<span class="cp-sa-next">→ Scope Review</span>
</div>
</a>
{# Offer/Proposal #}
<a href="{{ path('create_sales_proposal', {id: 0}) }}" class="cp-sa-card" data-group="offer">
<div class="cp-sa-icon" style="background: rgba(133,79,0,.1); color: var(--cp-primary);">
<i class="zmdi zmdi-assignment"></i>
</div>
<div class="cp-sa-title">Create Offer</div>
<div class="cp-sa-desc">Generate a formal proposal based on an Opportunity.</div>
<div class="cp-sa-meta">
<span>Min: Opportunity ID</span>
<span class="cp-sa-next">→ Client Review</span>
</div>
</a>
{# Site Survey #}
<a href="#" class="cp-sa-card" data-group="project">
<div class="cp-sa-icon" style="background: rgba(46,125,50,.1); color: #2e7d32;">
<i class="zmdi zmdi-pin-drop"></i>
</div>
<div class="cp-sa-title">Site Survey</div>
<div class="cp-sa-desc">Capture technical requirements and site assessment data.</div>
<div class="cp-sa-meta">
<span>Min: Opportunity ID</span>
<span class="cp-sa-next">→ Tech Review</span>
</div>
</a>
</div>{# /.cp-sa-grid #}
{# ── Filter/search ─────────────────────────────────────────────── #}
<div style="margin-top: 16px; position: relative;">
<i class="zmdi zmdi-search" style="
position: absolute; left: 12px; top: 50%; transform: translateY(-50%);
color: var(--cp-text-faint); font-size: 14px;
"></i>
<input type="text" id="cp-sa-filter" placeholder="Type to filter actions…" style="
width: 100%;
height: 38px;
padding: 0 14px 0 36px;
background: var(--cp-surface-low);
border: 1px solid var(--cp-outline-variant);
border-radius: var(--cp-radius);
font-size: 13px;
font-family: var(--cp-font-body);
color: var(--cp-text);
outline: none;
">
</div>
</div>{# /.padding #}
</div>{# /.modal-content #}
</div>{# /.modal-dialog #}
</div>{# /#startAnywhereModal #}
<style>
.cp-sa-card {
display: flex;
flex-direction: column;
gap: 6px;
padding: 14px 14px 12px;
border: 1px solid var(--cp-outline-variant);
border-radius: var(--cp-radius-lg);
background: var(--cp-surface-low);
text-decoration: none;
color: inherit;
transition: background 0.12s, border-color 0.12s, box-shadow 0.12s;
cursor: pointer;
}
.cp-sa-card:hover {
background: var(--cp-surface-white);
border-color: var(--cp-primary);
box-shadow: 0 0 0 3px var(--cp-amber-dim);
text-decoration: none;
color: inherit;
}
.cp-sa-icon {
width: 34px;
height: 34px;
border-radius: 9px;
display: flex;
align-items: center;
justify-content: center;
font-size: var(--cp-fs-lg, 16px);
margin-bottom: 2px;
}
.cp-sa-title {
font-family: var(--cp-font-head);
font-size: var(--cp-fs-base, 13px);
font-weight: 700;
color: var(--cp-text);
}
.cp-sa-desc {
font-size: 12px;
color: var(--cp-text-muted);
line-height: 1.4;
}
.cp-sa-meta {
display: flex;
align-items: center;
justify-content: space-between;
font-size: var(--cp-fs-xs, 11.5px);
color: var(--cp-text-faint);
margin-top: 2px;
}
.cp-sa-next {
color: var(--cp-primary);
font-weight: 600;
}
.cp-sa-card.hidden { display: none; }
</style>
<script>
(function () {
var filterInput = document.getElementById('cp-sa-filter');
if (!filterInput) return;
filterInput.addEventListener('input', function () {
var q = this.value.toLowerCase();
document.querySelectorAll('#cp-sa-grid .cp-sa-card').forEach(function (card) {
var text = card.textContent.toLowerCase();
card.classList.toggle('hidden', q.length > 0 && text.indexOf(q) === -1);
});
});
}());
</script>