feat: sitio CV completo v1.0.0
- 4 temas WordPress: persona-cv (activo), lumina, apex-cv, cvolio - Plugin pflores-cv-fields con CMB2 (100% gratuito) — admin editable - Generador PDF dinámico con Chromium headless (?cv_pdf=1) - Datos del CV de Patricia Flores cargados en CMB2 - URL dinámica con soporte proxy SSL (NPM/X-Forwarded-Proto) - WP Mail SMTP instalado (pendiente config SMTP) - Documentación completa: PROMPT_IA.md, DEPLOY_WEB.md, PRODUCCION.md, VERSIONADO.md
This commit is contained in:
@@ -1,16 +1,20 @@
|
||||
:root {
|
||||
--bg: #f4efe7;
|
||||
--bg-strong: #eadfd1;
|
||||
--surface: rgba(255, 255, 255, 0.78);
|
||||
--surface-strong: #fffdf8;
|
||||
--text: #1f1d1a;
|
||||
--muted: #6f685f;
|
||||
--line: rgba(31, 29, 26, 0.1);
|
||||
--accent: #d4582b;
|
||||
--accent-dark: #9f3814;
|
||||
--accent-soft: #f6c9ae;
|
||||
--shadow: 0 24px 60px rgba(89, 57, 32, 0.12);
|
||||
--radius-lg: 28px;
|
||||
--bg: #ece8e1;
|
||||
--bg-soft: #f7f5f0;
|
||||
--surface: rgba(255, 255, 255, 0.82);
|
||||
--surface-strong: #ffffff;
|
||||
--surface-dark: #10161d;
|
||||
--text: #17202a;
|
||||
--muted: #5d6773;
|
||||
--line: rgba(23, 32, 42, 0.1);
|
||||
--accent: #9a7b4f;
|
||||
--accent-strong: #7b5f39;
|
||||
--accent-soft: #ece2d1;
|
||||
--deep: #13202d;
|
||||
--success: #2f6c60;
|
||||
--shadow: 0 24px 60px rgba(16, 22, 29, 0.08);
|
||||
--radius-xl: 32px;
|
||||
--radius-lg: 24px;
|
||||
--radius-md: 18px;
|
||||
--radius-sm: 999px;
|
||||
--container: 1180px;
|
||||
@@ -28,12 +32,11 @@ html {
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: "Outfit", sans-serif;
|
||||
color: var(--text);
|
||||
font-family: "Manrope", sans-serif;
|
||||
background:
|
||||
radial-gradient(circle at top left, rgba(212, 88, 43, 0.14), transparent 34%),
|
||||
radial-gradient(circle at right 20%, rgba(135, 148, 255, 0.12), transparent 24%),
|
||||
linear-gradient(180deg, #f6f1e8 0%, #f9f6f1 48%, #efe5d8 100%);
|
||||
radial-gradient(circle at top left, rgba(154, 123, 79, 0.15), transparent 26%),
|
||||
linear-gradient(180deg, #f8f6f2 0%, #f0ece5 46%, #e6e0d5 100%);
|
||||
}
|
||||
|
||||
a {
|
||||
@@ -41,13 +44,18 @@ a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.site-bg {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background-image: linear-gradient(rgba(31, 29, 26, 0.03) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(31, 29, 26, 0.03) 1px, transparent 1px);
|
||||
background-size: 24px 24px;
|
||||
mask-image: radial-gradient(circle at center, black 45%, transparent 90%);
|
||||
background:
|
||||
linear-gradient(rgba(19, 32, 45, 0.028) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(19, 32, 45, 0.028) 1px, transparent 1px);
|
||||
background-size: 28px 28px;
|
||||
mask-image: radial-gradient(circle at center, black 38%, transparent 86%);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@@ -67,19 +75,19 @@ a {
|
||||
}
|
||||
|
||||
.site-header {
|
||||
padding: 1.2rem 0 0;
|
||||
padding-top: 1.2rem;
|
||||
}
|
||||
|
||||
.site-header__inner {
|
||||
display: flex;
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr auto;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
padding: 1rem 1.25rem;
|
||||
border: 1px solid var(--line);
|
||||
padding: 0.95rem 1.2rem;
|
||||
border: 1px solid rgba(19, 32, 45, 0.08);
|
||||
border-radius: var(--radius-sm);
|
||||
background: rgba(255, 253, 248, 0.78);
|
||||
backdrop-filter: blur(18px);
|
||||
background: rgba(255, 255, 255, 0.72);
|
||||
backdrop-filter: blur(16px);
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
|
||||
@@ -87,94 +95,182 @@ a {
|
||||
h1,
|
||||
h2,
|
||||
h3 {
|
||||
font-family: "Fraunces", serif;
|
||||
font-family: "Cormorant Garamond", serif;
|
||||
}
|
||||
|
||||
.site-brand {
|
||||
font-size: 1.1rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
|
||||
.site-nav-toggle {
|
||||
display: none;
|
||||
border: 0;
|
||||
border-radius: var(--radius-sm);
|
||||
background: var(--accent);
|
||||
color: #fff;
|
||||
padding: 0.85rem 1rem;
|
||||
font: inherit;
|
||||
.site-nav {
|
||||
justify-self: center;
|
||||
}
|
||||
|
||||
.site-nav__menu {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
gap: 1.1rem;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.site-nav__menu a {
|
||||
color: var(--muted);
|
||||
font-weight: 500;
|
||||
font-size: 0.95rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.site-nav__menu a:hover,
|
||||
.site-nav__menu a:focus-visible {
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.site-nav-toggle,
|
||||
.site-print,
|
||||
.btn,
|
||||
.cv-chip,
|
||||
.skill-pill {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 44px;
|
||||
border-radius: var(--radius-sm);
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
.site-nav-toggle {
|
||||
display: none;
|
||||
border: 0;
|
||||
padding: 0.75rem 1rem;
|
||||
background: var(--deep);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.site-print {
|
||||
border: 1px solid rgba(19, 32, 45, 0.12);
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
color: var(--text);
|
||||
padding: 0.7rem 1rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.hero {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1.55fr) minmax(300px, 0.95fr);
|
||||
grid-template-columns: minmax(0, 1.6fr) minmax(320px, 0.9fr);
|
||||
gap: 1.5rem;
|
||||
padding: 2rem 0 1.5rem;
|
||||
padding: 1.8rem 0;
|
||||
}
|
||||
|
||||
.hero__copy,
|
||||
.profile-card,
|
||||
.content-card,
|
||||
.side-card {
|
||||
border: 1px solid rgba(31, 29, 26, 0.08);
|
||||
border: 1px solid rgba(19, 32, 45, 0.08);
|
||||
background: var(--surface);
|
||||
backdrop-filter: blur(14px);
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
|
||||
.hero__copy {
|
||||
padding: 2rem;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
padding: 2.1rem;
|
||||
border-radius: 40px;
|
||||
}
|
||||
|
||||
.hero__copy::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
right: -80px;
|
||||
bottom: -80px;
|
||||
width: 260px;
|
||||
height: 260px;
|
||||
border-radius: 50%;
|
||||
background: radial-gradient(circle, rgba(154, 123, 79, 0.14), transparent 68%);
|
||||
}
|
||||
|
||||
.eyebrow {
|
||||
margin: 0 0 1rem;
|
||||
font-size: 0.82rem;
|
||||
margin: 0 0 0.9rem;
|
||||
color: var(--accent-strong);
|
||||
font-size: 0.8rem;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.16em;
|
||||
text-transform: uppercase;
|
||||
color: var(--accent-dark);
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
margin: 0;
|
||||
font-size: clamp(2.6rem, 5vw, 5.5rem);
|
||||
line-height: 0.95;
|
||||
font-size: clamp(3.1rem, 6vw, 5.5rem);
|
||||
line-height: 0.92;
|
||||
letter-spacing: -0.03em;
|
||||
}
|
||||
|
||||
.hero__role {
|
||||
margin: 1rem 0 0;
|
||||
font-size: clamp(1.2rem, 2vw, 1.6rem);
|
||||
color: var(--accent-dark);
|
||||
color: var(--deep);
|
||||
font-size: clamp(1.2rem, 2vw, 1.55rem);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.hero__intro,
|
||||
.entry-content,
|
||||
.side-card p {
|
||||
.side-card p,
|
||||
.timeline__item p,
|
||||
.demo-panel li,
|
||||
.profile-card__label,
|
||||
.profile-card__highlights span,
|
||||
.metric-card span,
|
||||
.achievement-card span {
|
||||
color: var(--muted);
|
||||
line-height: 1.7;
|
||||
font-size: 1rem;
|
||||
line-height: 1.75;
|
||||
}
|
||||
|
||||
.hero__intro {
|
||||
max-width: 58ch;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.hero__metrics,
|
||||
.hero__actions,
|
||||
.chip-grid,
|
||||
.skill-cloud {
|
||||
.skill-cloud,
|
||||
.contact-stack {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.8rem;
|
||||
gap: 0.85rem;
|
||||
}
|
||||
|
||||
.hero__metrics {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.hero__metrics--wide .metric-card {
|
||||
flex: 1 1 180px;
|
||||
}
|
||||
|
||||
.metric-card {
|
||||
min-width: 170px;
|
||||
padding: 1rem 1.05rem;
|
||||
border-radius: 22px;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
border: 1px solid rgba(19, 32, 45, 0.08);
|
||||
}
|
||||
|
||||
.hero__metrics--wide {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.metric-card strong,
|
||||
.achievement-card strong {
|
||||
display: block;
|
||||
color: var(--deep);
|
||||
font-size: 1.5rem;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.hero__actions {
|
||||
@@ -184,59 +280,121 @@ h3 {
|
||||
.btn,
|
||||
.cv-chip,
|
||||
.skill-pill {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 44px;
|
||||
padding: 0.75rem 1.05rem;
|
||||
border-radius: var(--radius-sm);
|
||||
}
|
||||
|
||||
.btn {
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn--primary {
|
||||
background: var(--accent);
|
||||
background: var(--deep);
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.btn--secondary {
|
||||
border: 1px solid rgba(19, 32, 45, 0.12);
|
||||
background: rgba(255, 255, 255, 0.6);
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.cv-chip,
|
||||
.skill-pill {
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
border: 1px solid rgba(31, 29, 26, 0.08);
|
||||
color: var(--text);
|
||||
border: 1px solid rgba(19, 32, 45, 0.08);
|
||||
background: rgba(255, 255, 255, 0.78);
|
||||
}
|
||||
|
||||
.profile-card {
|
||||
border-radius: 30px;
|
||||
padding: 1.5rem;
|
||||
height: 100%;
|
||||
padding: 1.45rem;
|
||||
border-radius: 30px;
|
||||
}
|
||||
|
||||
.profile-card__media {
|
||||
margin-bottom: 1.2rem;
|
||||
border-radius: 24px;
|
||||
overflow: hidden;
|
||||
background:
|
||||
radial-gradient(circle at top left, rgba(154, 123, 79, 0.2), transparent 40%),
|
||||
linear-gradient(180deg, #f9f5ef 0%, #ede4d7 100%);
|
||||
}
|
||||
|
||||
.profile-card__label {
|
||||
margin: 0 0 0.5rem;
|
||||
color: var(--muted);
|
||||
font-size: 0.95rem;
|
||||
margin: 0 0 0.45rem;
|
||||
font-size: 0.92rem;
|
||||
}
|
||||
|
||||
.profile-card h2,
|
||||
.side-card h2,
|
||||
.entry-title {
|
||||
.entry-title,
|
||||
.demo-section h2 {
|
||||
margin: 0 0 1rem;
|
||||
font-size: clamp(1.5rem, 2vw, 2rem);
|
||||
font-size: clamp(1.9rem, 3vw, 2.45rem);
|
||||
line-height: 1.04;
|
||||
}
|
||||
|
||||
.profile-card__highlights {
|
||||
display: grid;
|
||||
gap: 0.8rem;
|
||||
margin-top: 1rem;
|
||||
padding-top: 1rem;
|
||||
border-top: 1px solid rgba(19, 32, 45, 0.08);
|
||||
}
|
||||
|
||||
.profile-card__highlights strong {
|
||||
display: block;
|
||||
margin-top: 0.15rem;
|
||||
}
|
||||
|
||||
.profile-card__contact {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.65rem;
|
||||
}
|
||||
|
||||
.profile-card--executive .profile-card__media--portrait {
|
||||
aspect-ratio: 4 / 4.35;
|
||||
}
|
||||
|
||||
.profile-card--executive .profile-card__media--portrait img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.content-wrap {
|
||||
display: grid;
|
||||
padding: 0 0 2rem;
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.content-wrap--front {
|
||||
grid-template-columns: minmax(0, 1.5fr) minmax(280px, 0.8fr);
|
||||
grid-template-columns: minmax(0, 1.48fr) minmax(290px, 0.82fr);
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.content-card {
|
||||
border-radius: 32px;
|
||||
padding: 2rem;
|
||||
border-radius: var(--radius-xl);
|
||||
}
|
||||
|
||||
.content-card--resume {
|
||||
padding: 2.2rem;
|
||||
}
|
||||
|
||||
.resume-section + .resume-section {
|
||||
margin-top: 2.6rem;
|
||||
}
|
||||
|
||||
.section-head {
|
||||
display: grid;
|
||||
gap: 0.35rem;
|
||||
margin-bottom: 1.15rem;
|
||||
}
|
||||
|
||||
.lead-copy {
|
||||
font-size: 1.08rem;
|
||||
}
|
||||
|
||||
.entry-content > *:first-child {
|
||||
@@ -245,23 +403,213 @@ h3 {
|
||||
|
||||
.entry-content h2,
|
||||
.entry-content h3 {
|
||||
margin-top: 1.8rem;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.entry-content .wp-block-group,
|
||||
.entry-content .wp-block-columns,
|
||||
.entry-content .wp-block-cover,
|
||||
.entry-content .wp-block-media-text {
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
margin-top: 1.6rem;
|
||||
margin-bottom: 0.8rem;
|
||||
}
|
||||
|
||||
.entry-content .wp-block-group.cv-section {
|
||||
padding: 1.5rem;
|
||||
border-radius: 22px;
|
||||
background: rgba(255, 255, 255, 0.58);
|
||||
border: 1px solid rgba(19, 32, 45, 0.08);
|
||||
}
|
||||
|
||||
.demo-section + .demo-section,
|
||||
.demo-section + .demo-grid,
|
||||
.demo-grid + .demo-section {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.achievement-grid,
|
||||
.demo-grid {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.achievement-grid {
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.achievement-card,
|
||||
.timeline__item,
|
||||
.demo-panel {
|
||||
padding: 1.25rem;
|
||||
border: 1px solid rgba(19, 32, 45, 0.08);
|
||||
border-radius: 24px;
|
||||
background: rgba(255, 255, 255, 0.52);
|
||||
border: 1px solid rgba(31, 29, 26, 0.08);
|
||||
background: rgba(255, 255, 255, 0.68);
|
||||
}
|
||||
|
||||
.achievement-card {
|
||||
background: linear-gradient(180deg, rgba(19, 32, 45, 0.96) 0%, rgba(24, 39, 55, 0.96) 100%);
|
||||
}
|
||||
|
||||
.achievement-grid--executive {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.achievement-card strong,
|
||||
.achievement-card span {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.achievement-card--stat {
|
||||
min-height: 172px;
|
||||
}
|
||||
|
||||
.impact-grid,
|
||||
.credentials-grid {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.impact-grid {
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.impact-card,
|
||||
.credential-card,
|
||||
.cert-item {
|
||||
padding: 1.25rem;
|
||||
border: 1px solid rgba(19, 32, 45, 0.08);
|
||||
border-radius: 22px;
|
||||
background: rgba(255, 255, 255, 0.74);
|
||||
}
|
||||
|
||||
.impact-card h3,
|
||||
.credential-card h3,
|
||||
.cert-item h3,
|
||||
.competency-block h3 {
|
||||
margin: 0 0 0.55rem;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.credentials-grid {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.credential-card__year,
|
||||
.cert-item__year {
|
||||
display: inline-flex;
|
||||
margin-bottom: 0.9rem;
|
||||
padding: 0.3rem 0.7rem;
|
||||
border-radius: var(--radius-sm);
|
||||
background: var(--accent-soft);
|
||||
color: var(--accent-strong);
|
||||
font-size: 0.8rem;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.credential-card__detail,
|
||||
.side-card__meta,
|
||||
.timeline__meta,
|
||||
.cert-item p {
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.timeline__meta {
|
||||
margin-top: -0.15rem;
|
||||
margin-bottom: 0.75rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.timeline__bullets {
|
||||
margin: 0.9rem 0 0;
|
||||
padding-left: 1rem;
|
||||
color: var(--muted);
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.timeline__bullets li + li {
|
||||
margin-top: 0.45rem;
|
||||
}
|
||||
|
||||
.cert-list {
|
||||
display: grid;
|
||||
gap: 0.9rem;
|
||||
}
|
||||
|
||||
.cert-item {
|
||||
display: grid;
|
||||
grid-template-columns: 92px 1fr;
|
||||
gap: 1rem;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.cert-item__year {
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.timeline {
|
||||
position: relative;
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.timeline::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0.5rem;
|
||||
bottom: 0.5rem;
|
||||
left: 0.75rem;
|
||||
width: 1px;
|
||||
background: rgba(154, 123, 79, 0.4);
|
||||
}
|
||||
|
||||
.timeline__item {
|
||||
position: relative;
|
||||
padding-left: 2.25rem;
|
||||
}
|
||||
|
||||
.timeline__item::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 1.2rem;
|
||||
left: 0.35rem;
|
||||
width: 0.8rem;
|
||||
height: 0.8rem;
|
||||
border-radius: 50%;
|
||||
background: var(--accent);
|
||||
box-shadow: 0 0 0 6px rgba(154, 123, 79, 0.18);
|
||||
}
|
||||
|
||||
.timeline__year {
|
||||
display: inline-flex;
|
||||
margin-bottom: 0.75rem;
|
||||
padding: 0.36rem 0.78rem;
|
||||
border-radius: var(--radius-sm);
|
||||
background: var(--accent-soft);
|
||||
color: var(--accent-strong);
|
||||
font-size: 0.82rem;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.04em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.timeline__item h3 {
|
||||
margin: 0 0 0.45rem;
|
||||
font-size: 1.35rem;
|
||||
}
|
||||
|
||||
.timeline__item--rich {
|
||||
padding-right: 1.2rem;
|
||||
}
|
||||
|
||||
.demo-grid {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.demo-panel ul {
|
||||
margin: 0;
|
||||
padding-left: 1.05rem;
|
||||
}
|
||||
|
||||
.demo-panel--accent {
|
||||
background: linear-gradient(180deg, rgba(236, 226, 209, 0.75), rgba(255, 255, 255, 0.72));
|
||||
}
|
||||
|
||||
.side-stack {
|
||||
@@ -270,42 +618,157 @@ h3 {
|
||||
align-content: start;
|
||||
}
|
||||
|
||||
.side-stack--resume {
|
||||
position: sticky;
|
||||
top: 1.5rem;
|
||||
align-self: start;
|
||||
}
|
||||
|
||||
.side-card {
|
||||
padding: 1.5rem;
|
||||
border-radius: 26px;
|
||||
padding: 1.45rem;
|
||||
border-radius: 28px;
|
||||
}
|
||||
|
||||
.side-card--business-card {
|
||||
background: linear-gradient(180deg, rgba(19, 32, 45, 0.98) 0%, rgba(20, 31, 43, 0.98) 100%);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.side-card--business-card .eyebrow,
|
||||
.side-card--business-card p,
|
||||
.side-card--business-card h2 {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.competency-block + .competency-block {
|
||||
margin-top: 1.25rem;
|
||||
}
|
||||
|
||||
.skill-cloud {
|
||||
gap: 0.75rem;
|
||||
}
|
||||
|
||||
.skill-pill {
|
||||
color: var(--text);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
padding: 0 0 2.5rem;
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.site-footer__inner {
|
||||
padding: 1rem 0;
|
||||
padding: 0.8rem 0;
|
||||
color: var(--muted);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (max-width: 920px) {
|
||||
.hero,
|
||||
.content-wrap--front {
|
||||
grid-template-columns: 1fr;
|
||||
.info-list {
|
||||
display: grid;
|
||||
gap: 0.95rem;
|
||||
margin: 0 0 1.2rem;
|
||||
}
|
||||
|
||||
.info-list div {
|
||||
display: grid;
|
||||
gap: 0.2rem;
|
||||
}
|
||||
|
||||
.info-list dt {
|
||||
color: var(--accent-strong);
|
||||
font-size: 0.82rem;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.info-list dd {
|
||||
margin: 0;
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.business-card {
|
||||
padding: 1rem;
|
||||
border-radius: 22px;
|
||||
background:
|
||||
radial-gradient(circle at top left, rgba(154, 123, 79, 0.35), transparent 34%),
|
||||
linear-gradient(160deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.04));
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
|
||||
.business-card__top {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.business-card__name {
|
||||
margin: 0;
|
||||
font-family: "Cormorant Garamond", serif;
|
||||
font-size: 1.55rem;
|
||||
font-weight: 700;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.business-card__role {
|
||||
margin: 0.45rem 0 0;
|
||||
color: rgba(255, 255, 255, 0.82);
|
||||
font-size: 0.94rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.business-card__body {
|
||||
display: grid;
|
||||
grid-template-columns: 110px 1fr;
|
||||
gap: 1rem;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.business-card__qr {
|
||||
padding: 0.55rem;
|
||||
border-radius: 18px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.business-card__qr img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.business-card__info {
|
||||
display: grid;
|
||||
gap: 0.35rem;
|
||||
}
|
||||
|
||||
.business-card__info p,
|
||||
.business-card__info a {
|
||||
margin: 0;
|
||||
color: rgba(255, 255, 255, 0.88);
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
@media (max-width: 980px) {
|
||||
.site-header__inner {
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
|
||||
.site-nav-toggle {
|
||||
display: inline-flex;
|
||||
justify-self: end;
|
||||
}
|
||||
|
||||
.site-print {
|
||||
order: 4;
|
||||
grid-column: 1 / -1;
|
||||
justify-self: start;
|
||||
}
|
||||
|
||||
.site-nav {
|
||||
position: absolute;
|
||||
top: calc(100% + 0.75rem);
|
||||
right: 1rem;
|
||||
left: 1rem;
|
||||
grid-column: 1 / -1;
|
||||
display: none;
|
||||
padding: 1rem;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 20px;
|
||||
background: rgba(255, 253, 248, 0.96);
|
||||
box-shadow: var(--shadow);
|
||||
padding: 0.95rem;
|
||||
border-radius: 18px;
|
||||
border: 1px solid rgba(19, 32, 45, 0.08);
|
||||
background: rgba(255, 255, 255, 0.92);
|
||||
}
|
||||
|
||||
.site-nav.is-open {
|
||||
@@ -313,29 +776,96 @@ h3 {
|
||||
}
|
||||
|
||||
.site-nav__menu {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.hero,
|
||||
.content-wrap--front {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.achievement-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.hero__metrics--wide {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.impact-grid,
|
||||
.credentials-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.side-stack--resume {
|
||||
position: static;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.site-header__inner,
|
||||
.hero__copy,
|
||||
.profile-card,
|
||||
.content-card,
|
||||
.side-card {
|
||||
border-radius: 24px;
|
||||
}
|
||||
|
||||
.site-header__inner,
|
||||
.hero__copy,
|
||||
.profile-card,
|
||||
.content-card,
|
||||
.side-card {
|
||||
padding: 1.2rem;
|
||||
border-radius: 22px;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
font-size: 2.5rem;
|
||||
font-size: 2.75rem;
|
||||
}
|
||||
|
||||
.metric-card {
|
||||
min-width: unset;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.hero__metrics--wide {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.demo-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.cert-item {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.business-card__body {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.site-header,
|
||||
.site-footer,
|
||||
.site-bg,
|
||||
.hero__actions,
|
||||
.site-print,
|
||||
.site-nav-toggle {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.hero,
|
||||
.content-wrap--front {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.hero__copy,
|
||||
.profile-card,
|
||||
.content-card,
|
||||
.side-card,
|
||||
.timeline__item,
|
||||
.demo-panel,
|
||||
.achievement-card {
|
||||
box-shadow: none;
|
||||
background: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 535 B |
@@ -0,0 +1,10 @@
|
||||
<svg width="640" height="760" viewBox="0 0 640 760" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="640" height="760" rx="48" fill="#F7EFE4"/>
|
||||
<circle cx="320" cy="238" r="112" fill="#E6B596"/>
|
||||
<path d="M182 612C182 515.35 260.35 437 357 437H283C379.65 437 458 515.35 458 612V640H182V612Z" fill="#D4582B"/>
|
||||
<path d="M221 230C221 175.324 265.324 131 320 131C374.676 131 419 175.324 419 230V284C419 338.676 374.676 383 320 383C265.324 383 221 338.676 221 284V230Z" fill="#1F1D1A"/>
|
||||
<path d="M244 245C244 202.474 278.474 168 321 168C363.526 168 398 202.474 398 245V283C398 325.526 363.526 360 321 360C278.474 360 244 325.526 244 283V245Z" fill="#F5CBB2"/>
|
||||
<rect x="116" y="488" width="408" height="28" rx="14" fill="#F2DDCC"/>
|
||||
<rect x="116" y="536" width="332" height="24" rx="12" fill="#F2DDCC"/>
|
||||
<rect x="116" y="578" width="280" height="24" rx="12" fill="#F2DDCC"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 902 B |
@@ -1,6 +1,7 @@
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const toggle = document.querySelector(".site-nav-toggle");
|
||||
const nav = document.querySelector(".site-nav");
|
||||
const printButtons = document.querySelectorAll("[data-cvolio-print]");
|
||||
|
||||
if (toggle && nav) {
|
||||
toggle.addEventListener("click", () => {
|
||||
@@ -9,4 +10,10 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
nav.classList.toggle("is-open", !expanded);
|
||||
});
|
||||
}
|
||||
|
||||
printButtons.forEach((button) => {
|
||||
button.addEventListener("click", () => {
|
||||
window.print();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -4,64 +4,235 @@ declare(strict_types=1);
|
||||
|
||||
get_header();
|
||||
|
||||
$hero_name = get_theme_mod('cvolio_hero_name', get_bloginfo('name'));
|
||||
$hero_role = get_theme_mod('cvolio_hero_role', __('Profesional creativo y estratega digital', 'cvolio'));
|
||||
$hero_intro = get_theme_mod('cvolio_hero_intro', __('Presenta tu experiencia, logros, proyectos y propuesta de valor con un formato claro, elegante y listo para cualquier dispositivo.', 'cvolio'));
|
||||
$hero_location = get_theme_mod('cvolio_contact_location', 'Guayaquil, Ecuador');
|
||||
$hero_email = get_theme_mod('cvolio_contact_email', 'hola@ejemplo.com');
|
||||
$hero_phone = get_theme_mod('cvolio_contact_phone', '+593 999 999 999');
|
||||
$hero_cta_label = get_theme_mod('cvolio_hero_cta_label', __('Ver experiencia', 'cvolio'));
|
||||
$hero_cta_url = get_theme_mod('cvolio_hero_cta_url', '#perfil');
|
||||
$skills = array_filter(array_map('trim', explode(',', (string) get_theme_mod('cvolio_skills_list', 'UX Strategy, Liderazgo, Frontend, WordPress, SEO, Analitica'))));
|
||||
$linkedin = get_theme_mod('cvolio_social_linkedin', '');
|
||||
$github = get_theme_mod('cvolio_social_github', '');
|
||||
$portfolio = get_theme_mod('cvolio_social_portfolio', '');
|
||||
$cv = function_exists('pflores_get_cv_data') ? pflores_get_cv_data() : cvolio_cv_data();
|
||||
$hero = $cv['hero'];
|
||||
$metrics = $cv['metrics'];
|
||||
$highlights = $cv['highlights'];
|
||||
$summary = $cv['summary'];
|
||||
$impact = $cv['impact'];
|
||||
$experience = $cv['experience'];
|
||||
$education = $cv['education'];
|
||||
$certifications = $cv['certifications'];
|
||||
$competencies = $cv['competencies'];
|
||||
$volunteer = $cv['volunteer'];
|
||||
$additional = $cv['additional'];
|
||||
$qrImage = get_template_directory_uri() . '/assets/images/patricia-flores-qr.png';
|
||||
$publicUrl = 'https://pflores.linkedcorp.net';
|
||||
|
||||
$heroName = $hero['name'];
|
||||
$heroRole = $hero['role'];
|
||||
$heroIntro = $hero['intro'];
|
||||
$heroLocation = $hero['location'];
|
||||
$heroEmail = $hero['email'];
|
||||
$heroPhone = $hero['phone'];
|
||||
$heroCtaLabel = 'Ver trayectoria';
|
||||
$heroCtaUrl = '#experiencia';
|
||||
$linkedin = $hero['linkedin'];
|
||||
// Compatibilidad CVolio: skills como array plano para pills
|
||||
$skillsFlat = [];
|
||||
foreach ($competencies as $groupItems) {
|
||||
foreach ((array) $groupItems as $item) {
|
||||
$skillsFlat[] = is_array($item) ? ($item['name'] ?? '') : (string) $item;
|
||||
}
|
||||
}
|
||||
$skills = array_filter($skillsFlat);
|
||||
$acfPhoto = $cv['photo'] ?? '';
|
||||
$profileImage = $acfPhoto ?: get_template_directory_uri() . '/assets/images/patricia-flores-profile.jpeg';
|
||||
$cvFile = get_template_directory_uri() . '/assets/docs/CV_Patricia_Flores_Sanchez_ES_FINAL.docx';
|
||||
?>
|
||||
|
||||
<section class="hero">
|
||||
<section class="hero hero--executive">
|
||||
<div class="hero__copy">
|
||||
<p class="eyebrow"><?php esc_html_e('Hoja de vida digital', 'cvolio'); ?></p>
|
||||
<h1><?php echo esc_html($hero_name); ?></h1>
|
||||
<p class="hero__role"><?php echo esc_html($hero_role); ?></p>
|
||||
<p class="hero__intro"><?php echo esc_html($hero_intro); ?></p>
|
||||
<p class="eyebrow"><?php echo esc_html($hero['eyebrow']); ?></p>
|
||||
<h1><?php echo esc_html($heroName); ?></h1>
|
||||
<p class="hero__role"><?php echo esc_html($heroRole); ?></p>
|
||||
<p class="hero__intro"><?php echo esc_html($heroIntro); ?></p>
|
||||
|
||||
<div class="hero__metrics hero__metrics--wide">
|
||||
<?php foreach ($metrics as $metric) : ?>
|
||||
<article class="metric-card">
|
||||
<strong><?php echo esc_html($metric['value']); ?></strong>
|
||||
<span><?php echo esc_html($metric['label']); ?></span>
|
||||
</article>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<div class="hero__actions">
|
||||
<a class="btn btn--primary" href="<?php echo esc_url($hero_cta_url); ?>">
|
||||
<?php echo esc_html($hero_cta_label); ?>
|
||||
<a class="btn btn--primary" href="<?php echo esc_url($heroCtaUrl); ?>">
|
||||
<?php echo esc_html($heroCtaLabel); ?>
|
||||
</a>
|
||||
<?php echo wp_kses_post(cvolio_render_contact_link('email', $hero_email)); ?>
|
||||
<a class="btn btn--secondary" href="<?php echo esc_url(home_url('/?cv_pdf=1')); ?>">
|
||||
<?php esc_html_e('Descargar CV PDF', 'cvolio'); ?>
|
||||
</a>
|
||||
<button class="btn btn--ghost" type="button" data-cvolio-print>
|
||||
<?php esc_html_e('Versión imprimible', 'cvolio'); ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<aside class="hero__panel">
|
||||
<div class="profile-card">
|
||||
<p class="profile-card__label"><?php esc_html_e('Disponible para', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Proyectos, consultoria y liderazgo de equipos', 'cvolio'); ?></h2>
|
||||
<div class="chip-grid">
|
||||
<?php echo wp_kses_post(cvolio_render_contact_link('phone', $hero_phone)); ?>
|
||||
<span class="cv-chip"><?php echo esc_html($hero_location); ?></span>
|
||||
<?php if ($linkedin) : ?><a class="cv-chip" href="<?php echo esc_url($linkedin); ?>" target="_blank" rel="noreferrer">LinkedIn</a><?php endif; ?>
|
||||
<?php if ($github) : ?><a class="cv-chip" href="<?php echo esc_url($github); ?>" target="_blank" rel="noreferrer">GitHub</a><?php endif; ?>
|
||||
<?php if ($portfolio) : ?><a class="cv-chip" href="<?php echo esc_url($portfolio); ?>" target="_blank" rel="noreferrer">Portfolio</a><?php endif; ?>
|
||||
<div class="profile-card profile-card--executive">
|
||||
<div class="profile-card__media profile-card__media--portrait">
|
||||
<img src="<?php echo esc_url($profileImage); ?>" alt="<?php echo esc_attr($heroName); ?>">
|
||||
</div>
|
||||
|
||||
<div class="profile-card__contact">
|
||||
<?php echo wp_kses_post(cvolio_render_contact_link('email', $heroEmail)); ?>
|
||||
<?php echo wp_kses_post(cvolio_render_contact_link('phone', $heroPhone)); ?>
|
||||
<span class="cv-chip"><?php echo esc_html($heroLocation); ?></span>
|
||||
<?php if ($linkedin) : ?>
|
||||
<a class="cv-chip" href="<?php echo esc_url($linkedin); ?>" target="_blank" rel="noreferrer">LinkedIn</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="profile-card__highlights">
|
||||
<div>
|
||||
<span><?php esc_html_e('Enfoque', 'cvolio'); ?></span>
|
||||
<strong><?php echo esc_html($hero['focus']); ?></strong>
|
||||
</div>
|
||||
<div>
|
||||
<span><?php esc_html_e('Disponibilidad', 'cvolio'); ?></span>
|
||||
<strong><?php echo esc_html($hero['availability']); ?></strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section id="perfil" class="content-wrap content-wrap--front">
|
||||
<div class="content-card">
|
||||
<section class="content-wrap content-wrap--front">
|
||||
<div class="content-card content-card--resume">
|
||||
<section id="resumen" class="resume-section">
|
||||
<div class="section-head">
|
||||
<p class="eyebrow"><?php esc_html_e('Perfil profesional', 'cvolio'); ?></p>
|
||||
<h2><?php echo esc_html($summary['title']); ?></h2>
|
||||
</div>
|
||||
<p class="lead-copy"><?php echo esc_html($summary['body']); ?></p>
|
||||
</section>
|
||||
|
||||
<section id="impacto" class="resume-section">
|
||||
<div class="section-head">
|
||||
<p class="eyebrow"><?php esc_html_e('Impacto ejecutivo', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Resultados concretos con alcance nacional', 'cvolio'); ?></h2>
|
||||
</div>
|
||||
|
||||
<div class="achievement-grid achievement-grid--executive">
|
||||
<?php foreach ($highlights as $highlight) : ?>
|
||||
<article class="achievement-card achievement-card--stat">
|
||||
<strong><?php echo esc_html($highlight['value']); ?></strong>
|
||||
<span><?php echo esc_html($highlight['label']); ?></span>
|
||||
</article>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<div class="impact-grid">
|
||||
<?php foreach ($impact as $item) : ?>
|
||||
<article class="impact-card">
|
||||
<h3><?php echo esc_html($item['title']); ?></h3>
|
||||
<p><?php echo esc_html($item['body']); ?></p>
|
||||
</article>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="experiencia" class="resume-section">
|
||||
<div class="section-head">
|
||||
<p class="eyebrow"><?php esc_html_e('Experiencia profesional', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Trayectoria sólida en banca, operaciones y microfinanzas', 'cvolio'); ?></h2>
|
||||
</div>
|
||||
|
||||
<div class="timeline timeline--executive">
|
||||
<?php foreach ($experience as $item) : ?>
|
||||
<article class="timeline__item timeline__item--rich">
|
||||
<span class="timeline__year"><?php echo esc_html($item['period']); ?></span>
|
||||
<div class="timeline__content">
|
||||
<h3><?php echo esc_html($item['title']); ?></h3>
|
||||
<p class="timeline__meta"><?php echo esc_html($item['company'] . ' | ' . $item['location']); ?></p>
|
||||
<p><?php echo esc_html($item['lead']); ?></p>
|
||||
<ul class="timeline__bullets">
|
||||
<?php foreach ($item['bullets'] as $bullet) : ?>
|
||||
<li><?php echo esc_html($bullet); ?></li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
</article>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="formacion" class="resume-section">
|
||||
<div class="section-head">
|
||||
<p class="eyebrow"><?php esc_html_e('Formación académica', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Base técnica y formación ejecutiva de alto nivel', 'cvolio'); ?></h2>
|
||||
</div>
|
||||
|
||||
<div class="credentials-grid">
|
||||
<?php foreach ($education as $item) : ?>
|
||||
<article class="credential-card">
|
||||
<span class="credential-card__year"><?php echo esc_html($item['year']); ?></span>
|
||||
<h3><?php echo esc_html($item['title']); ?></h3>
|
||||
<p><?php echo esc_html($item['institution']); ?></p>
|
||||
<?php if ($item['detail'] !== '') : ?>
|
||||
<p class="credential-card__detail"><?php echo esc_html($item['detail']); ?></p>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="certificaciones" class="resume-section">
|
||||
<div class="section-head">
|
||||
<p class="eyebrow"><?php esc_html_e('Certificaciones relevantes', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Actualización continua en gerencia, procesos y analítica', 'cvolio'); ?></h2>
|
||||
</div>
|
||||
|
||||
<div class="cert-list">
|
||||
<?php foreach ($certifications as $item) : ?>
|
||||
<article class="cert-item">
|
||||
<span class="cert-item__year"><?php echo esc_html($item['year']); ?></span>
|
||||
<div>
|
||||
<h3><?php echo esc_html($item['title']); ?></h3>
|
||||
<p><?php echo esc_html($item['issuer']); ?></p>
|
||||
</div>
|
||||
</article>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<?php while (have_posts()) : the_post(); ?>
|
||||
<article <?php post_class('front-article'); ?>>
|
||||
<div class="entry-content">
|
||||
<?php the_content(); ?>
|
||||
</div>
|
||||
</article>
|
||||
<?php if (trim((string) get_the_content()) !== '') : ?>
|
||||
<section class="resume-section resume-section--custom">
|
||||
<div class="section-head">
|
||||
<p class="eyebrow"><?php esc_html_e('Contenido adicional', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Bloques editables desde WordPress', 'cvolio'); ?></h2>
|
||||
</div>
|
||||
<div class="entry-content">
|
||||
<?php the_content(); ?>
|
||||
</div>
|
||||
</section>
|
||||
<?php endif; ?>
|
||||
<?php endwhile; ?>
|
||||
</div>
|
||||
|
||||
<aside class="side-stack">
|
||||
<aside class="side-stack side-stack--resume">
|
||||
<section class="side-card side-card--competencies">
|
||||
<p class="eyebrow"><?php esc_html_e('Competencias clave', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Capacidades ejecutivas y técnicas', 'cvolio'); ?></h2>
|
||||
|
||||
<?php foreach ($competencies as $group => $items) : ?>
|
||||
<div class="competency-block">
|
||||
<h3><?php echo esc_html($group); ?></h3>
|
||||
<div class="skill-cloud">
|
||||
<?php foreach ($items as $item) : ?>
|
||||
<span class="skill-pill"><?php echo esc_html(is_array($item) ? ($item['name'] ?? '') : $item); ?></span>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</section>
|
||||
|
||||
<section class="side-card">
|
||||
<p class="eyebrow"><?php esc_html_e('Fortalezas', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Habilidades clave', 'cvolio'); ?></h2>
|
||||
<p class="eyebrow"><?php esc_html_e('Liderazgo', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Atributos diferenciales', 'cvolio'); ?></h2>
|
||||
<div class="skill-cloud">
|
||||
<?php foreach ($skills as $skill) : ?>
|
||||
<span class="skill-pill"><?php echo esc_html($skill); ?></span>
|
||||
@@ -70,9 +241,50 @@ $portfolio = get_theme_mod('cvolio_social_portfolio', '');
|
||||
</section>
|
||||
|
||||
<section class="side-card">
|
||||
<p class="eyebrow"><?php esc_html_e('Consejo de uso', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Edita esta portada con bloques', 'cvolio'); ?></h2>
|
||||
<p><?php esc_html_e('Puedes crear secciones de experiencia, estudios, casos de exito, certificados o servicios usando Gutenberg y los patrones del tema.', 'cvolio'); ?></p>
|
||||
<p class="eyebrow"><?php esc_html_e('Voluntariado', 'cvolio'); ?></p>
|
||||
<h2><?php echo esc_html($volunteer['title']); ?></h2>
|
||||
<p class="side-card__meta"><?php echo esc_html($volunteer['year']); ?></p>
|
||||
<p><?php echo esc_html($volunteer['body']); ?></p>
|
||||
</section>
|
||||
|
||||
<section id="contacto" class="side-card side-card--contact">
|
||||
<p class="eyebrow"><?php esc_html_e('Información adicional', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Datos clave del perfil', 'cvolio'); ?></h2>
|
||||
<dl class="info-list">
|
||||
<?php foreach ($additional as $label => $value) : ?>
|
||||
<div>
|
||||
<dt><?php echo esc_html($label); ?></dt>
|
||||
<dd><?php echo esc_html($value); ?></dd>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</dl>
|
||||
<div class="contact-stack">
|
||||
<?php echo wp_kses_post(cvolio_render_contact_link('email', $heroEmail)); ?>
|
||||
<?php echo wp_kses_post(cvolio_render_contact_link('phone', $heroPhone)); ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="side-card side-card--business-card">
|
||||
<p class="eyebrow"><?php esc_html_e('Tarjeta de presentación', 'cvolio'); ?></p>
|
||||
<h2><?php esc_html_e('Acceso rápido al perfil web', 'cvolio'); ?></h2>
|
||||
|
||||
<article class="business-card">
|
||||
<div class="business-card__top">
|
||||
<p class="business-card__name"><?php echo esc_html($heroName); ?></p>
|
||||
<p class="business-card__role"><?php echo esc_html($heroRole); ?></p>
|
||||
</div>
|
||||
<div class="business-card__body">
|
||||
<div class="business-card__qr">
|
||||
<img src="<?php echo esc_url($qrImage); ?>" alt="<?php esc_attr_e('Código QR hacia el perfil web', 'cvolio'); ?>">
|
||||
</div>
|
||||
<div class="business-card__info">
|
||||
<p><?php echo esc_html($heroLocation); ?></p>
|
||||
<p><?php echo esc_html($heroPhone); ?></p>
|
||||
<p><?php echo esc_html($heroEmail); ?></p>
|
||||
<a href="<?php echo esc_url($publicUrl); ?>" target="_blank" rel="noreferrer"><?php echo esc_html($publicUrl); ?></a>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</section>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
declare(strict_types=1);
|
||||
|
||||
require_once get_template_directory() . '/inc/customizer.php';
|
||||
require_once get_template_directory() . '/inc/cv-data.php';
|
||||
require_once get_template_directory() . '/inc/patterns.php';
|
||||
require_once get_template_directory() . '/inc/visits.php';
|
||||
|
||||
function cvolio_setup(): void
|
||||
{
|
||||
@@ -24,7 +26,7 @@ function cvolio_enqueue_assets(): void
|
||||
{
|
||||
wp_enqueue_style(
|
||||
'cvolio-fonts',
|
||||
'https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&family=Fraunces:opsz,wght@9..144,600;9..144,700&display=swap',
|
||||
'https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Cormorant+Garamond:wght@500;600;700&display=swap',
|
||||
[],
|
||||
null
|
||||
);
|
||||
@@ -58,6 +60,60 @@ function cvolio_body_classes(array $classes): array
|
||||
}
|
||||
add_filter('body_class', 'cvolio_body_classes');
|
||||
|
||||
function cvolio_redirect_default_sample_page(): void
|
||||
{
|
||||
if (! is_page()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$samplePage = get_queried_object();
|
||||
if (! $samplePage instanceof WP_Post) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($samplePage->post_name !== 'pagina-ejemplo') {
|
||||
return;
|
||||
}
|
||||
|
||||
wp_safe_redirect(home_url('/'), 301);
|
||||
exit;
|
||||
}
|
||||
add_action('template_redirect', 'cvolio_redirect_default_sample_page', 1);
|
||||
|
||||
function cvolio_render_primary_menu(): string
|
||||
{
|
||||
if (has_nav_menu('primary')) {
|
||||
return trim((string) wp_nav_menu([
|
||||
'theme_location' => 'primary',
|
||||
'container' => false,
|
||||
'fallback_cb' => false,
|
||||
'menu_class' => 'site-nav__menu',
|
||||
'echo' => false,
|
||||
]));
|
||||
}
|
||||
|
||||
$items = [
|
||||
'#resumen' => __('Resumen', 'cvolio'),
|
||||
'#impacto' => __('Impacto', 'cvolio'),
|
||||
'#experiencia' => __('Experiencia', 'cvolio'),
|
||||
'#formacion' => __('Formación', 'cvolio'),
|
||||
'#certificaciones' => __('Certificaciones', 'cvolio'),
|
||||
'#contacto' => __('Contacto', 'cvolio'),
|
||||
];
|
||||
|
||||
$html = '<ul class="site-nav__menu">';
|
||||
foreach ($items as $href => $label) {
|
||||
$html .= sprintf(
|
||||
'<li><a href="%s">%s</a></li>',
|
||||
esc_url($href),
|
||||
esc_html($label)
|
||||
);
|
||||
}
|
||||
$html .= '</ul>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
function cvolio_render_contact_link(string $type, string $value): string
|
||||
{
|
||||
if ($value === '') {
|
||||
|
||||
@@ -23,15 +23,9 @@ $brand = get_theme_mod('cvolio_hero_name', get_bloginfo('name'));
|
||||
<span>Menu</span>
|
||||
</button>
|
||||
<nav id="site-nav" class="site-nav" aria-label="<?php esc_attr_e('Menu principal', 'cvolio'); ?>">
|
||||
<?php
|
||||
wp_nav_menu([
|
||||
'theme_location' => 'primary',
|
||||
'container' => false,
|
||||
'fallback_cb' => false,
|
||||
'menu_class' => 'site-nav__menu',
|
||||
]);
|
||||
?>
|
||||
<?php echo cvolio_render_primary_menu(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
|
||||
</nav>
|
||||
<a class="site-print" href="<?php echo esc_url(home_url('/?cv_pdf=1')); ?>" target="_blank"><?php esc_html_e('Descargar CV PDF', 'cvolio'); ?></a>
|
||||
</div>
|
||||
</header>
|
||||
<main class="site-main">
|
||||
|
||||
@@ -10,20 +10,31 @@ function cvolio_customize_register(WP_Customize_Manager $wp_customize): void
|
||||
]);
|
||||
|
||||
$fields = [
|
||||
'cvolio_hero_name' => ['label' => __('Nombre principal', 'cvolio'), 'default' => 'Patricia Flores'],
|
||||
'cvolio_hero_role' => ['label' => __('Rol o titular', 'cvolio'), 'default' => 'Directora de proyectos, estratega digital y lider de producto'],
|
||||
'cvolio_hero_intro' => ['label' => __('Introduccion', 'cvolio'), 'default' => 'Perfil profesional con enfoque humano, resultados medibles y una presentacion visual moderna.'],
|
||||
'cvolio_hero_cta_label' => ['label' => __('Texto del boton', 'cvolio'), 'default' => 'Ver experiencia'],
|
||||
'cvolio_hero_cta_url' => ['label' => __('Enlace del boton', 'cvolio'), 'default' => '#perfil'],
|
||||
'cvolio_contact_location' => ['label' => __('Ubicacion', 'cvolio'), 'default' => 'Guayaquil, Ecuador'],
|
||||
'cvolio_contact_email' => ['label' => __('Correo', 'cvolio'), 'default' => 'hola@ejemplo.com'],
|
||||
'cvolio_contact_phone' => ['label' => __('Telefono', 'cvolio'), 'default' => '+593 999 999 999'],
|
||||
'cvolio_skills_list' => ['label' => __('Habilidades separadas por coma', 'cvolio'), 'default' => 'Liderazgo, Comunicacion, WordPress, UX, SEO, Analitica'],
|
||||
'cvolio_social_linkedin' => ['label' => __('LinkedIn', 'cvolio'), 'default' => ''],
|
||||
'cvolio_hero_name' => ['label' => __('Nombre principal', 'cvolio'), 'default' => 'Patricia Soledad Flores Sánchez'],
|
||||
'cvolio_hero_role' => ['label' => __('Rol o titular', 'cvolio'), 'default' => 'Gerente / Jefa de Operaciones Financieras | Sector financiero y microfinanzas'],
|
||||
'cvolio_hero_intro' => ['label' => __('Introduccion', 'cvolio'), 'default' => 'Ejecutiva financiera con más de 22 años de trayectoria en banca y microfinanzas. Especialista en gestión operativa, transformación digital de procesos, control interno y liderazgo de equipos multidisciplinarios.'],
|
||||
'cvolio_hero_cta_label' => ['label' => __('Texto del boton', 'cvolio'), 'default' => 'Ver trayectoria'],
|
||||
'cvolio_hero_cta_url' => ['label' => __('Enlace del boton', 'cvolio'), 'default' => '#experiencia'],
|
||||
'cvolio_contact_location' => ['label' => __('Ubicacion', 'cvolio'), 'default' => 'Loja, Ecuador'],
|
||||
'cvolio_contact_email' => ['label' => __('Correo', 'cvolio'), 'default' => 'patricflorsanchez@gmail.com'],
|
||||
'cvolio_contact_phone' => ['label' => __('Telefono', 'cvolio'), 'default' => '+593 99 469 8405'],
|
||||
'cvolio_skills_list' => ['label' => __('Habilidades separadas por coma', 'cvolio'), 'default' => 'Liderazgo, Gestión de operaciones financieras, Control interno, Transformación digital, Microfinanzas, Gestión de cartera, SAP FI, Power BI'],
|
||||
'cvolio_social_linkedin' => ['label' => __('LinkedIn', 'cvolio'), 'default' => 'https://www.linkedin.com/in/patricia-soledad-flores-s%C3%A1nchez-43b84418/'],
|
||||
'cvolio_social_github' => ['label' => __('GitHub', 'cvolio'), 'default' => ''],
|
||||
'cvolio_social_portfolio' => ['label' => __('Portfolio', 'cvolio'), 'default' => ''],
|
||||
];
|
||||
|
||||
$wp_customize->add_setting('cvolio_profile_image', [
|
||||
'default' => '',
|
||||
'sanitize_callback' => 'esc_url_raw',
|
||||
]);
|
||||
|
||||
$wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'cvolio_profile_image', [
|
||||
'label' => __('Foto de perfil', 'cvolio'),
|
||||
'section' => 'cvolio_hero',
|
||||
'settings' => 'cvolio_profile_image',
|
||||
]));
|
||||
|
||||
foreach ($fields as $key => $field) {
|
||||
$wp_customize->add_setting($key, [
|
||||
'default' => $field['default'],
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
function cvolio_cv_data(): array
|
||||
{
|
||||
return [
|
||||
'hero' => [
|
||||
'eyebrow' => 'Currículum ejecutivo',
|
||||
'name' => 'Patricia Soledad Flores Sánchez',
|
||||
'role' => 'Gerente / Jefa de Operaciones Financieras | Sector financiero y microfinanzas',
|
||||
'intro' => 'Ejecutiva financiera con más de 22 años de trayectoria en banca y microfinanzas. Máster en Dirección y Planificación Financiera, reconocido por la SENECYT en Ecuador, con especialización en gestión operativa, transformación digital de procesos, control interno y liderazgo de equipos multidisciplinarios.',
|
||||
'location' => 'Loja, Ecuador',
|
||||
'email' => 'patricflorsanchez@gmail.com',
|
||||
'phone' => '+593 99 469 8405',
|
||||
'linkedin' => 'https://www.linkedin.com/in/patricia-soledad-flores-s%C3%A1nchez-43b84418/',
|
||||
'availability' => 'Inmediata | Presencial / Híbrida / Remota',
|
||||
'focus' => 'Operaciones financieras, control interno y transformación digital',
|
||||
],
|
||||
'metrics' => [
|
||||
['value' => '22+', 'label' => 'años de experiencia en banca y microfinanzas'],
|
||||
['value' => '26', 'label' => 'agencias bajo liderazgo operativo nacional'],
|
||||
['value' => '48', 'label' => 'personas a cargo en la estructura operativa'],
|
||||
['value' => 'USD 5 M', 'label' => 'en operaciones mensuales de microcrédito'],
|
||||
['value' => '28.000', 'label' => 'clientes coordinados en recaudación por canales internos y externos'],
|
||||
],
|
||||
'highlights' => [
|
||||
['value' => '9/10', 'label' => 'calificación de gestión con resultado excelente en cuatro trimestres consecutivos'],
|
||||
['value' => '74 %', 'label' => 'reducción de requerimientos de soporte desde Dirección por descentralización de procesos'],
|
||||
['value' => '1,68 días', 'label' => 'tiempo de desembolso logrado en Q3 2025, mejor resultado del año'],
|
||||
['value' => '75 %', 'label' => 'reducción del índice de rotación del área entre 2022 y 2026'],
|
||||
],
|
||||
'summary' => [
|
||||
'title' => 'Perfil estratégico con enfoque en eficiencia, control y ejecución sostenible',
|
||||
'body' => 'Actualmente lidera la operatividad de 26 agencias a nivel nacional y coordina aproximadamente 1.500 operaciones de microcrédito mensuales, por un monto cercano a USD 5 millones. También articula la recaudación de cerca de 28.000 clientes por canales internos y externos, integrando visión operativa, criterio financiero, disciplina de control y liderazgo sostenido del desempeño.',
|
||||
],
|
||||
'impact' => [
|
||||
[
|
||||
'title' => 'Transformación digital',
|
||||
'body' => 'Lideró desembolsos por transferencia bancaria, integración de APIs bancarias y digitalización de expedientes y pagarés en 13 agencias.',
|
||||
],
|
||||
[
|
||||
'title' => 'Automatización crítica',
|
||||
'body' => 'Automatizó el seguro de desgravamen, desde el cálculo de prima hasta la liquidación contable, reduciendo tiempos de 17 a 10 días.',
|
||||
],
|
||||
[
|
||||
'title' => 'Supervisión nacional',
|
||||
'body' => 'Implementó una matriz de supervisión y certificación por agencia, elevando el índice de cumplimiento operativo del 65 % al 88 %.',
|
||||
],
|
||||
],
|
||||
'experience' => [
|
||||
[
|
||||
'period' => 'Abr. 2022 – Presente',
|
||||
'title' => 'Jefa de Operaciones',
|
||||
'company' => 'Fundación FACES Microfinanzas',
|
||||
'location' => 'Loja, Ecuador',
|
||||
'lead' => 'Responsable del desempeño operativo nacional, cumplimiento del POA, control interno, digitalización de procesos y gestión de equipos.',
|
||||
'bullets' => [
|
||||
'Cumplimiento del POA: 98 % (Q2 2025), 96 % (Q3 2025), 100 % (Q4 2025) y 105 % (Q1 2026).',
|
||||
'La transformación digital logró que los desembolsos por transferencia representen el 47,80 % del monto total en Q1 2026.',
|
||||
'Redujo los requerimientos de soporte desde Dirección en un 74 %, de 1.489 a 382, mediante la descentralización de procesos hacia las agencias.',
|
||||
'Automatizó el proceso del seguro de desgravamen con cálculo de prima, conciliación mensual, liquidación de siniestros y asientos contables automatizados.',
|
||||
'Elevó el índice de cumplimiento operativo nacional del 65 % al 88 % con la matriz de supervisión y certificación por agencia.',
|
||||
'Redujo el tiempo de atención del seguro de desgravamen de 17 a 10 días.',
|
||||
'Redujo los tiempos de desembolso a 1,68 días en Q3 2025, mejor resultado del año frente a la meta institucional máxima de 2 días.',
|
||||
'La efectividad de recuperación de mora alcanzó 90,60 % en Q1 2026, con USD 3,06 millones recuperados sobre USD 3,37 millones en mora.',
|
||||
'Redujo el índice de rotación del área del 41,46 % al 10,24 % entre diciembre de 2022 y marzo de 2026 mediante mejoras salariales, remuneración variable, evaluación trimestral y un plan de carrera con certificación de 60 horas para asistentes de caja.',
|
||||
'Participa en comités estratégicos, auditorías internas y externas, y en representación institucional ante organismos financieros internacionales de desarrollo.',
|
||||
],
|
||||
],
|
||||
[
|
||||
'period' => 'Feb. 2021 – Mar. 2022',
|
||||
'title' => 'Supervisora de Operaciones',
|
||||
'company' => 'Fundación FACES Microfinanzas',
|
||||
'location' => 'Loja, Ecuador',
|
||||
'lead' => 'Supervisó operaciones de 18 agencias a nivel nacional y regularizó procesos críticos inexistentes o incompletos.',
|
||||
'bullets' => [
|
||||
'Reconstruyó desde cero las bases de cálculo del seguro de desgravamen y regularizó pagos pendientes desde enero de 2021.',
|
||||
'Elaboró el instructivo de constitución de garantías hipotecarias, proceso que no existía previamente en la institución.',
|
||||
'Inició el proyecto de automatización de pagos por depósitos y transferencias.',
|
||||
],
|
||||
],
|
||||
[
|
||||
'period' => '2019 – 2021',
|
||||
'title' => 'Actualización y formación profesional',
|
||||
'company' => 'Formación independiente',
|
||||
'location' => 'Ecuador',
|
||||
'lead' => 'Etapa enfocada en fortalecimiento técnico y actualización profesional tras su salida de Mutualista Pichincha.',
|
||||
'bullets' => [
|
||||
'SAP FI (30 h).',
|
||||
'Excel Empresarial (24 h).',
|
||||
'Prevención de Lavado de Activos — UAFE (5 h).',
|
||||
],
|
||||
],
|
||||
[
|
||||
'period' => 'Ago. 2004 – May. 2019',
|
||||
'title' => 'Oficial Operativa Regional / Jefa Operativa',
|
||||
'company' => 'Mutualista Pichincha',
|
||||
'location' => 'Loja, Ecuador',
|
||||
'lead' => 'Trayectoria ascendente de 15 años desde Cajera hasta Jefa Operativa Regional.',
|
||||
'bullets' => [
|
||||
'Reconocida a nivel nacional por excelencia en control operativo.',
|
||||
'La agencia se mantuvo consistentemente por encima del 80 % en gestión de excepciones de crédito hipotecario.',
|
||||
'Administró proyecto inmobiliario institucional en Loja.',
|
||||
'Gestionó alertas ALA/FT con 100 % de cumplimiento en comités trimestrales y auditorías internas sin observaciones significativas de forma sostenida.',
|
||||
],
|
||||
],
|
||||
[
|
||||
'period' => 'Ene. 2002 – Nov. 2003',
|
||||
'title' => 'Cajera',
|
||||
'company' => 'Cooperativa de Ahorro y Crédito El Porvenir',
|
||||
'location' => 'Loja, Ecuador',
|
||||
'lead' => 'Inicio de carrera en el frente operativo financiero con disciplina de caja y apoyo contable.',
|
||||
'bullets' => [
|
||||
'Gestión de caja sin faltantes ni sobrantes.',
|
||||
'Contrato renovado de forma anticipada a los tres meses.',
|
||||
'Apoyo al área de Contabilidad y reemplazo temporal de la contadora durante vacaciones.',
|
||||
],
|
||||
],
|
||||
],
|
||||
'education' => [
|
||||
[
|
||||
'year' => '2021',
|
||||
'title' => 'Máster Universitario en Dirección y Planificación Financiera',
|
||||
'institution' => 'Universidad Europea Miguel de Cervantes — Valladolid, España',
|
||||
'detail' => 'Título reconocido por la SENECYT — Ecuador, febrero de 2023 | Reg. 2021/394270.',
|
||||
],
|
||||
[
|
||||
'year' => '2007',
|
||||
'title' => 'Ingeniera en Administración en Banca y Finanzas',
|
||||
'institution' => 'Universidad Técnica Particular de Loja (UTPL)',
|
||||
'detail' => '',
|
||||
],
|
||||
],
|
||||
'certifications' => [
|
||||
['year' => '2026', 'title' => 'Mujeres que Lideran: Alta Gerencia', 'issuer' => 'Foro UNIR — Universidad Internacional de La Rioja'],
|
||||
['year' => '2025', 'title' => 'Programa Internacional de Habilidades Gerenciales (48 h)', 'issuer' => 'IDEASGROUP — Ecuador / México'],
|
||||
['year' => '2025', 'title' => 'Transforma tu Trabajo con Inteligencia Artificial (12 h)', 'issuer' => 'Red de Instituciones Financieras de Desarrollo'],
|
||||
['year' => '2025', 'title' => 'Excel: Básico a Dashboard (40 h)', 'issuer' => 'DMARURI Training & Consulting'],
|
||||
['year' => '2024', 'title' => 'Administración por Procesos — BPM (64 h)', 'issuer' => 'Escuela Politécnica Nacional — CEC'],
|
||||
['year' => '2023', 'title' => 'Formación de Formadores (80 h)', 'issuer' => 'Ministerio del Trabajo del Ecuador | Certificación vigente hasta 2028'],
|
||||
['year' => '2023', 'title' => 'Power BI (40 h) | Indicadores Clave de Desempeño — KPI (12 h)', 'issuer' => 'Liderazgo Capacitación & Eventos'],
|
||||
['year' => '2020', 'title' => 'Gestión Financiera ERP SAP FI — Key User (30 h)', 'issuer' => 'Socio SAP certificado'],
|
||||
['year' => '2020', 'title' => 'Prevención de Lavado de Activos y Financiamiento de Delitos', 'issuer' => 'UAFE — Ecuador'],
|
||||
['year' => '2013', 'title' => 'Tributación Integral (36 h)', 'issuer' => 'Universidad Técnica Particular de Loja'],
|
||||
],
|
||||
'competencies' => [
|
||||
'Finanzas y Operaciones' => [
|
||||
'Gestión de operaciones financieras',
|
||||
'Conciliación bancaria',
|
||||
'Originación de crédito',
|
||||
'Gestión de cartera',
|
||||
'Control interno',
|
||||
'Tesorería operativa',
|
||||
'Microfinanzas',
|
||||
'ALA/FT',
|
||||
],
|
||||
'Tecnología y Procesos' => [
|
||||
'Transformación digital',
|
||||
'BPM',
|
||||
'Integración de APIs / Web Services',
|
||||
'SAP FI',
|
||||
'Excel avanzado y dashboards',
|
||||
'Power BI',
|
||||
'IA aplicada',
|
||||
'Core financiero',
|
||||
],
|
||||
'Liderazgo' => [
|
||||
'Equipos de hasta 48 personas',
|
||||
'Remuneración variable',
|
||||
'Gestión del cambio',
|
||||
'Formación de formadores',
|
||||
'Diversidad, equidad e inclusión',
|
||||
],
|
||||
],
|
||||
'volunteer' => [
|
||||
'title' => 'Voluntaria — Hogar San Camilo de Lellis',
|
||||
'year' => '2025',
|
||||
'body' => 'Hogar de niñas con discapacidad | Loja, Ecuador. Alineado a la visión y misión de responsabilidad social de la Fundación FACES Microfinanzas.',
|
||||
],
|
||||
'additional' => [
|
||||
'Idiomas' => 'Español nativo | Inglés básico en formación activa',
|
||||
'Disponibilidad' => 'Inmediata | Presencial / Híbrida / Remota',
|
||||
'C.I.' => '1103591648',
|
||||
'Fecha de nacimiento' => '3 de agosto de 1980',
|
||||
'Web profesional' => 'pflres.linkedcorp.net',
|
||||
],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
function cvolio_should_track_visit(): bool
|
||||
{
|
||||
if (is_admin() || wp_doing_ajax() || wp_doing_cron()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (! isset($_SERVER['REQUEST_METHOD']) || $_SERVER['REQUEST_METHOD'] !== 'GET') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (is_user_logged_in() && current_user_can('manage_options')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return is_front_page() || is_home() || is_singular();
|
||||
}
|
||||
|
||||
function cvolio_track_visit(): void
|
||||
{
|
||||
if (! cvolio_should_track_visit()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$requestUri = isset($_SERVER['REQUEST_URI']) ? sanitize_text_field(wp_unslash($_SERVER['REQUEST_URI'])) : '';
|
||||
$visitorHash = md5($requestUri . '|' . cvolio_get_client_ip() . '|' . gmdate('Y-m-d-H'));
|
||||
$transientKey = 'cvolio_visit_' . $visitorHash;
|
||||
|
||||
if (get_transient($transientKey)) {
|
||||
return;
|
||||
}
|
||||
|
||||
set_transient($transientKey, '1', HOUR_IN_SECONDS);
|
||||
|
||||
$total = (int) get_option('cvolio_total_visits', 0);
|
||||
update_option('cvolio_total_visits', $total + 1, false);
|
||||
|
||||
if (is_front_page()) {
|
||||
$frontPage = (int) get_option('page_on_front');
|
||||
if ($frontPage > 0) {
|
||||
$views = (int) get_post_meta($frontPage, '_cvolio_views', true);
|
||||
update_post_meta($frontPage, '_cvolio_views', $views + 1);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$postId = get_queried_object_id();
|
||||
if ($postId > 0) {
|
||||
$views = (int) get_post_meta($postId, '_cvolio_views', true);
|
||||
update_post_meta($postId, '_cvolio_views', $views + 1);
|
||||
}
|
||||
}
|
||||
add_action('template_redirect', 'cvolio_track_visit');
|
||||
|
||||
function cvolio_get_client_ip(): string
|
||||
{
|
||||
$keys = [
|
||||
'HTTP_X_FORWARDED_FOR',
|
||||
'HTTP_CLIENT_IP',
|
||||
'REMOTE_ADDR',
|
||||
];
|
||||
|
||||
foreach ($keys as $key) {
|
||||
if (! empty($_SERVER[$key])) {
|
||||
$value = explode(',', (string) $_SERVER[$key]);
|
||||
return trim($value[0]);
|
||||
}
|
||||
}
|
||||
|
||||
return '0.0.0.0';
|
||||
}
|
||||
|
||||
function cvolio_register_visits_dashboard_widget(): void
|
||||
{
|
||||
wp_add_dashboard_widget(
|
||||
'cvolio_visits_widget',
|
||||
__('CVolio: Visitas', 'cvolio'),
|
||||
'cvolio_render_visits_dashboard_widget'
|
||||
);
|
||||
}
|
||||
add_action('wp_dashboard_setup', 'cvolio_register_visits_dashboard_widget');
|
||||
|
||||
function cvolio_render_visits_dashboard_widget(): void
|
||||
{
|
||||
$total = (int) get_option('cvolio_total_visits', 0);
|
||||
$frontPage = (int) get_option('page_on_front');
|
||||
$frontViews = $frontPage > 0 ? (int) get_post_meta($frontPage, '_cvolio_views', true) : 0;
|
||||
?>
|
||||
<div class="cvolio-visits-widget">
|
||||
<p><strong><?php esc_html_e('Visitas totales registradas:', 'cvolio'); ?></strong> <?php echo esc_html((string) $total); ?></p>
|
||||
<p><strong><?php esc_html_e('Visitas a la portada:', 'cvolio'); ?></strong> <?php echo esc_html((string) $frontViews); ?></p>
|
||||
<p><?php esc_html_e('El contador evita duplicados del mismo visitante en la misma URL durante una hora.', 'cvolio'); ?></p>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
function cvolio_add_views_column(array $columns): array
|
||||
{
|
||||
$columns['cvolio_views'] = __('Visitas', 'cvolio');
|
||||
return $columns;
|
||||
}
|
||||
add_filter('manage_pages_columns', 'cvolio_add_views_column');
|
||||
add_filter('manage_posts_columns', 'cvolio_add_views_column');
|
||||
|
||||
function cvolio_render_views_column(string $column, int $postId): void
|
||||
{
|
||||
if ($column !== 'cvolio_views') {
|
||||
return;
|
||||
}
|
||||
|
||||
echo esc_html((string) ((int) get_post_meta($postId, '_cvolio_views', true)));
|
||||
}
|
||||
add_action('manage_pages_custom_column', 'cvolio_render_views_column', 10, 2);
|
||||
add_action('manage_posts_custom_column', 'cvolio_render_views_column', 10, 2);
|
||||
Reference in New Issue
Block a user