templates/application/whileresume/website/cv-public/choice.html.twig line 1

Open in your IDE?
  1. {% extends 'application/whileresume/website/cv-public/base.html.twig' %}
  2. {% block title %}{{ 'generate2.choice.page_title'|trans({}, 'whr-public') }} ยท WhileResume{% endblock %}
  3. {% block extra_css %}
  4. .choice-hero { text-align: center; margin-bottom: 56px; }
  5. .choice-hero .badge { margin-inline: auto; display: inline-flex; }
  6. .choice-hero .stitle { max-width: 680px; margin: 0 auto 14px; }
  7. .choice-hero .sdesc { max-width: 580px; margin-inline: auto; }
  8. .choice-grid {
  9. display: grid;
  10. grid-template-columns: 1fr 1fr;
  11. gap: 20px;
  12. margin-bottom: 40px;
  13. }
  14. .choice-card {
  15. position: relative;
  16. display: flex;
  17. flex-direction: column;
  18. padding: 32px 28px 28px;
  19. border-radius: var(--r-xl);
  20. background: var(--white);
  21. border: 2px solid var(--ink-10);
  22. text-decoration: none;
  23. color: inherit;
  24. cursor: pointer;
  25. transition: all 0.35s var(--ease);
  26. overflow: hidden;
  27. }
  28. .choice-card:hover {
  29. transform: translateY(-4px);
  30. border-color: var(--violet);
  31. box-shadow: 0 20px 48px rgba(139,111,192,0.18);
  32. }
  33. .choice-card.primary {
  34. background: linear-gradient(135deg, var(--violet-ultra), var(--white));
  35. border-color: var(--violet);
  36. box-shadow: 0 12px 40px var(--violet-glow);
  37. }
  38. .choice-card.primary::before {
  39. content: '';
  40. position: absolute;
  41. top: 0; left: 0; right: 0;
  42. height: 4px;
  43. background: linear-gradient(90deg, var(--violet), var(--violet-deep), var(--violet));
  44. }
  45. .choice-card.primary:hover {
  46. transform: translateY(-6px);
  47. box-shadow: 0 24px 60px rgba(139,111,192,0.28);
  48. }
  49. .choice-badge-recommended {
  50. position: absolute;
  51. top: 16px; right: 16px;
  52. background: var(--violet-deep);
  53. color: white;
  54. font-size: 0.66rem;
  55. font-weight: 700;
  56. text-transform: uppercase;
  57. letter-spacing: 0.08em;
  58. padding: 5px 11px;
  59. border-radius: var(--r-full);
  60. }
  61. .choice-ico {
  62. width: 64px; height: 64px;
  63. border-radius: 18px;
  64. background: var(--violet-soft);
  65. color: var(--violet-deep);
  66. display: flex;
  67. align-items: center;
  68. justify-content: center;
  69. margin-bottom: 24px;
  70. transition: transform 0.3s var(--ease-spring);
  71. }
  72. .choice-card:hover .choice-ico { transform: scale(1.08) rotate(-4deg); }
  73. .choice-card.primary .choice-ico {
  74. background: linear-gradient(135deg, var(--violet), var(--violet-deep));
  75. color: white;
  76. }
  77. .choice-card.secondary .choice-ico {
  78. background: var(--ocean-soft);
  79. color: var(--ocean);
  80. }
  81. .choice-title {
  82. font-family: var(--font-display);
  83. font-size: 1.5rem;
  84. font-weight: 500;
  85. letter-spacing: -0.02em;
  86. margin-bottom: 10px;
  87. }
  88. .choice-title em { font-style: italic; color: var(--violet-dark); }
  89. .choice-desc {
  90. font-size: 0.94rem;
  91. color: var(--ink-60);
  92. line-height: 1.6;
  93. margin-bottom: 20px;
  94. min-height: 56px;
  95. }
  96. .choice-features {
  97. list-style: none;
  98. padding: 0;
  99. margin: 0 0 24px;
  100. display: flex;
  101. flex-direction: column;
  102. gap: 8px;
  103. }
  104. .choice-features li {
  105. display: flex;
  106. align-items: center;
  107. gap: 10px;
  108. font-size: 0.85rem;
  109. color: var(--ink-80);
  110. }
  111. .choice-features li svg {
  112. color: var(--emerald);
  113. flex-shrink: 0;
  114. }
  115. .choice-cta {
  116. display: inline-flex;
  117. align-items: center;
  118. gap: 8px;
  119. padding: 13px 22px;
  120. border-radius: var(--r-full);
  121. font-size: 0.9rem;
  122. font-weight: 600;
  123. margin-top: auto;
  124. transition: all 0.25s var(--ease);
  125. }
  126. .choice-card.primary .choice-cta {
  127. background: var(--violet-deep);
  128. color: white;
  129. }
  130. .choice-card.primary:hover .choice-cta { background: var(--violet-dark); }
  131. .choice-card.secondary .choice-cta {
  132. background: var(--white);
  133. color: var(--ink-80);
  134. border: 1.5px solid var(--ink-10);
  135. }
  136. .choice-card.secondary:hover .choice-cta { border-color: var(--ink-20); }
  137. .choice-help {
  138. text-align: center;
  139. color: var(--ink-40);
  140. font-size: 0.85rem;
  141. }
  142. .choice-help a { color: var(--violet-dark); text-decoration: underline; text-underline-offset: 3px; }
  143. @media (max-width: 760px) {
  144. .choice-grid { grid-template-columns: 1fr; }
  145. }
  146. {% endblock %}
  147. {% block body %}
  148. <div class="choice-hero fade-up">
  149. <div class="badge"><span class="badge-num">1</span> {{ 'generate2.choice.badge'|trans({}, 'whr-public') }}</div>
  150. <h1 class="stitle">{{ 'generate2.choice.title_part1'|trans({}, 'whr-public') }}<br>{{ 'generate2.choice.title_part2'|trans({}, 'whr-public') }} <em>{{ 'generate2.common.cv'|trans({}, 'whr-public') }}</em> ?</h1>
  151. <p class="sdesc">{{ 'generate2.choice.subtitle'|trans({}, 'whr-public') }}</p>
  152. </div>
  153. <a href="{% if app.request.locale == "en" %}{{ path('cv_public_theme', { slug: public_slug }) }}?mode=scratch{% else %}{{ path('locale_cv_public_theme', { slug: public_slug,'_locale':app.request.locale }) }}?mode=scratch{% endif %}" class="choice-card primary fade-up d1">
  154. <span class="choice-badge-recommended">{{ 'generate2.choice.recommended'|trans({}, 'whr-public') }}</span>
  155. <div class="choice-ico">
  156. <svg width="30" height="30" fill="none" stroke="currentColor" stroke-width="1.8" viewBox="0 0 24 24">
  157. <path d="M12 20h9"/>
  158. <path d="M16.5 3.5a2.12 2.12 0 013 3L7 19l-4 1 1-4L16.5 3.5z"/>
  159. </svg>
  160. </div>
  161. <h2 class="choice-title">{{ 'generate2.choice.scratch.title_part1'|trans({}, 'whr-public') }} <em>{{ 'generate2.choice.scratch.title_part2'|trans({}, 'whr-public') }}</em></h2>
  162. <p class="choice-desc">{{ 'generate2.choice.scratch.desc'|trans({}, 'whr-public') }}</p>
  163. <ul class="choice-features">
  164. <li>
  165. <svg width="16" height="16" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24"><path d="M20 6L9 17l-5-5"/></svg>
  166. {{ 'generate2.choice.scratch.feat_1'|trans({}, 'whr-public') }}
  167. </li>
  168. <li>
  169. <svg width="16" height="16" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24"><path d="M20 6L9 17l-5-5"/></svg>
  170. {{ 'generate2.choice.scratch.feat_2'|trans({}, 'whr-public') }}
  171. </li>
  172. <li>
  173. <svg width="16" height="16" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24"><path d="M20 6L9 17l-5-5"/></svg>
  174. {{ 'generate2.choice.scratch.feat_3'|trans({}, 'whr-public') }}
  175. </li>
  176. </ul>
  177. <span class="choice-cta">
  178. {{ 'generate2.choice.scratch.cta'|trans({}, 'whr-public') }}
  179. <svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24">
  180. <path d="M5 12h14M12 5l7 7-7 7"/>
  181. </svg>
  182. </span>
  183. </a>
  184. {% endblock %}
  185. {% block body_js %}
  186. <script>
  187. window.cvLoader.hide();
  188. </script>
  189. {% endblock %}