profile-pane 3.1.5 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/README.md +16 -0
  2. package/lib/04567ff683933c35c465.png +0 -0
  3. package/lib/10163fd9b5a0e00d63a0.png +0 -0
  4. package/lib/1234dcb2eec2e45f252b.png +0 -0
  5. package/lib/20899934157df4db56cb.png +0 -0
  6. package/lib/33760bf79f097f449da5.png +0 -0
  7. package/lib/578d2b6ed32e7624164e.png +0 -0
  8. package/lib/5f62a5b2b7e99b9640c7.png +0 -0
  9. package/lib/6525766ecd288ec60129.png +0 -0
  10. package/lib/7800be6f6c4b5b0f4f20.png +0 -0
  11. package/lib/976473cf5fe24d657d4b.png +0 -0
  12. package/lib/ChatWithMe.d.ts +2 -1
  13. package/lib/ChatWithMe.d.ts.map +1 -1
  14. package/lib/ChatWithMe.js +3 -3
  15. package/lib/ProfileView.d.ts +1 -1
  16. package/lib/ProfileView.d.ts.map +1 -1
  17. package/lib/ProfileView.js +71 -131
  18. package/lib/ProfileViewModelPresenter.d.ts +23 -0
  19. package/lib/ProfileViewModelPresenter.d.ts.map +1 -0
  20. package/lib/ProfileViewModelPresenter.js +37 -0
  21. package/lib/QRCodeCard.d.ts +3 -1
  22. package/lib/QRCodeCard.d.ts.map +1 -1
  23. package/lib/QRCodeCard.js +86 -66
  24. package/lib/addMeToYourFriends.d.ts +3 -3
  25. package/lib/addMeToYourFriends.d.ts.map +1 -1
  26. package/lib/addMeToYourFriends.js +14 -30
  27. package/lib/bda84f59e7216675a208.png +0 -0
  28. package/lib/buttonsHelper.js +1 -1
  29. package/lib/cd68e8f3990ba8b2139e.png +0 -0
  30. package/lib/e7074a7e2cb69e51cfd3.png +0 -0
  31. package/lib/editProfilePane/EditCVCard.d.ts +1 -0
  32. package/lib/editProfilePane/EditCVCard.d.ts.map +1 -1
  33. package/lib/editProfilePane/EditCVCard.js +2 -1
  34. package/lib/editProfilePane/EditCommunitiesCard.d.ts +1 -1
  35. package/lib/editProfilePane/EditCommunitiesCard.d.ts.map +1 -1
  36. package/lib/editProfilePane/EditCommunitiesCard.js +2 -1
  37. package/lib/editProfilePane/EditContactsCard.d.ts +1 -0
  38. package/lib/editProfilePane/EditContactsCard.d.ts.map +1 -1
  39. package/lib/editProfilePane/EditContactsCard.js +2 -0
  40. package/lib/editProfilePane/EditFriendsCard.d.ts +1 -1
  41. package/lib/editProfilePane/EditFriendsCard.d.ts.map +1 -1
  42. package/lib/editProfilePane/EditFriendsCard.js +2 -1
  43. package/lib/editProfilePane/EditOtherPreferences.d.ts +1 -0
  44. package/lib/editProfilePane/EditOtherPreferences.d.ts.map +1 -1
  45. package/lib/editProfilePane/EditOtherPreferences.js +1 -0
  46. package/lib/editProfilePane/EditProfileView.d.ts +1 -1
  47. package/lib/editProfilePane/EditProfileView.d.ts.map +1 -1
  48. package/lib/editProfilePane/EditProfileView.js +1 -1
  49. package/lib/editProfilePane/EditSocialCard.d.ts +1 -0
  50. package/lib/editProfilePane/EditSocialCard.d.ts.map +1 -1
  51. package/lib/editProfilePane/EditSocialCard.js +2 -1
  52. package/lib/editProfilePane/editProfilePresenter.d.ts +1 -0
  53. package/lib/editProfilePane/editProfilePresenter.d.ts.map +1 -1
  54. package/lib/editProfilePane/editProfilePresenter.js +2 -0
  55. package/lib/f3772696fb7ee53c23d8.png +0 -0
  56. package/lib/icons-svg/contactIcons.d.ts +3 -0
  57. package/lib/icons-svg/contactIcons.d.ts.map +1 -0
  58. package/lib/icons-svg/contactIcons.js +32 -0
  59. package/lib/icons-svg/profileIcons.d.ts +22 -0
  60. package/lib/icons-svg/profileIcons.d.ts.map +1 -0
  61. package/lib/icons-svg/profileIcons.js +309 -0
  62. package/lib/index.d.ts +1 -3
  63. package/lib/index.d.ts.map +1 -1
  64. package/lib/index.js +42 -19
  65. package/lib/profile-pane.js +15629 -5670
  66. package/lib/profile-pane.js.map +1 -1
  67. package/lib/profile-pane.min.js +2171 -230
  68. package/lib/profile-pane.min.js.map +1 -1
  69. package/lib/rdfFormsHelper.d.ts +1 -0
  70. package/lib/rdfFormsHelper.d.ts.map +1 -1
  71. package/lib/rdfFormsHelper.js +2 -0
  72. package/lib/sections/bio/BioEditDialog.d.ts +6 -0
  73. package/lib/sections/bio/BioEditDialog.d.ts.map +1 -0
  74. package/lib/sections/bio/BioEditDialog.js +119 -0
  75. package/lib/sections/bio/BioSection.d.ts +7 -0
  76. package/lib/sections/bio/BioSection.d.ts.map +1 -0
  77. package/lib/sections/bio/BioSection.js +131 -0
  78. package/lib/sections/bio/mutations.d.ts +4 -0
  79. package/lib/sections/bio/mutations.d.ts.map +1 -0
  80. package/lib/sections/bio/mutations.js +43 -0
  81. package/lib/sections/bio/selectors.d.ts +4 -0
  82. package/lib/sections/bio/selectors.d.ts.map +1 -0
  83. package/lib/sections/bio/selectors.js +15 -0
  84. package/lib/sections/bio/types.d.ts +15 -0
  85. package/lib/sections/bio/types.d.ts.map +1 -0
  86. package/lib/sections/bio/types.js +5 -0
  87. package/lib/sections/contactInfo/ContactInfoEditDialog.d.ts +7 -0
  88. package/lib/sections/contactInfo/ContactInfoEditDialog.d.ts.map +1 -0
  89. package/lib/sections/contactInfo/ContactInfoEditDialog.js +658 -0
  90. package/lib/sections/contactInfo/ContactInfoSection.d.ts +5 -0
  91. package/lib/sections/contactInfo/ContactInfoSection.d.ts.map +1 -0
  92. package/lib/sections/contactInfo/ContactInfoSection.js +229 -0
  93. package/lib/sections/contactInfo/mutations.d.ts +4 -0
  94. package/lib/sections/contactInfo/mutations.d.ts.map +1 -0
  95. package/lib/sections/contactInfo/mutations.js +150 -0
  96. package/lib/sections/contactInfo/selectors.d.ts +4 -0
  97. package/lib/sections/contactInfo/selectors.d.ts.map +1 -0
  98. package/lib/sections/contactInfo/selectors.js +104 -0
  99. package/lib/sections/contactInfo/types.d.ts +44 -0
  100. package/lib/sections/contactInfo/types.d.ts.map +1 -0
  101. package/lib/sections/contactInfo/types.js +5 -0
  102. package/lib/sections/education/EducationEditDialog.d.ts +7 -0
  103. package/lib/sections/education/EducationEditDialog.d.ts.map +1 -0
  104. package/lib/sections/education/EducationEditDialog.js +459 -0
  105. package/lib/sections/education/EducationSection.d.ts +7 -0
  106. package/lib/sections/education/EducationSection.d.ts.map +1 -0
  107. package/lib/sections/education/EducationSection.js +126 -0
  108. package/lib/sections/education/mutations.d.ts +4 -0
  109. package/lib/sections/education/mutations.d.ts.map +1 -0
  110. package/lib/sections/education/mutations.js +60 -0
  111. package/lib/sections/education/selectors.d.ts +4 -0
  112. package/lib/sections/education/selectors.d.ts.map +1 -0
  113. package/lib/sections/education/selectors.js +64 -0
  114. package/lib/sections/education/types.d.ts +20 -0
  115. package/lib/sections/education/types.d.ts.map +1 -0
  116. package/lib/sections/education/types.js +5 -0
  117. package/lib/sections/heading/HeadingEditDialog.d.ts +6 -0
  118. package/lib/sections/heading/HeadingEditDialog.d.ts.map +1 -0
  119. package/lib/sections/heading/HeadingEditDialog.js +742 -0
  120. package/lib/sections/heading/HeadingSection.d.ts +9 -0
  121. package/lib/sections/heading/HeadingSection.d.ts.map +1 -0
  122. package/lib/sections/heading/HeadingSection.js +97 -0
  123. package/lib/sections/heading/camera.d.ts +19 -0
  124. package/lib/sections/heading/camera.d.ts.map +1 -0
  125. package/lib/sections/heading/camera.js +199 -0
  126. package/lib/sections/heading/dateHelpers.d.ts +4 -0
  127. package/lib/sections/heading/dateHelpers.d.ts.map +1 -0
  128. package/lib/sections/heading/dateHelpers.js +48 -0
  129. package/lib/sections/heading/imageHelpers.d.ts +4 -0
  130. package/lib/sections/heading/imageHelpers.d.ts.map +1 -0
  131. package/lib/sections/heading/imageHelpers.js +81 -0
  132. package/lib/sections/heading/mutations.d.ts +4 -0
  133. package/lib/sections/heading/mutations.d.ts.map +1 -0
  134. package/lib/sections/heading/mutations.js +190 -0
  135. package/lib/sections/heading/selectors.d.ts +5 -0
  136. package/lib/sections/heading/selectors.d.ts.map +1 -0
  137. package/lib/sections/heading/selectors.js +157 -0
  138. package/lib/sections/heading/types.d.ts +36 -0
  139. package/lib/sections/heading/types.d.ts.map +1 -0
  140. package/lib/sections/heading/types.js +5 -0
  141. package/lib/sections/languages/LanguageEditDialog.d.ts +7 -0
  142. package/lib/sections/languages/LanguageEditDialog.d.ts.map +1 -0
  143. package/lib/sections/languages/LanguageEditDialog.js +457 -0
  144. package/lib/sections/languages/LanguageSection.d.ts +5 -0
  145. package/lib/sections/languages/LanguageSection.d.ts.map +1 -0
  146. package/lib/sections/languages/LanguageSection.js +137 -0
  147. package/lib/sections/languages/mutations.d.ts +6 -0
  148. package/lib/sections/languages/mutations.d.ts.map +1 -0
  149. package/lib/sections/languages/mutations.js +296 -0
  150. package/lib/sections/languages/selectors.d.ts +5 -0
  151. package/lib/sections/languages/selectors.d.ts.map +1 -0
  152. package/lib/sections/languages/selectors.js +146 -0
  153. package/lib/sections/languages/types.d.ts +15 -0
  154. package/lib/sections/languages/types.d.ts.map +1 -0
  155. package/lib/sections/languages/types.js +5 -0
  156. package/lib/sections/projects/ProjectEditDialog.d.ts +7 -0
  157. package/lib/sections/projects/ProjectEditDialog.d.ts.map +1 -0
  158. package/lib/sections/projects/ProjectEditDialog.js +182 -0
  159. package/lib/sections/projects/ProjectSection.d.ts +6 -0
  160. package/lib/sections/projects/ProjectSection.d.ts.map +1 -0
  161. package/lib/sections/projects/ProjectSection.js +220 -0
  162. package/lib/sections/projects/mutations.d.ts +4 -0
  163. package/lib/sections/projects/mutations.d.ts.map +1 -0
  164. package/lib/sections/projects/mutations.js +188 -0
  165. package/lib/sections/projects/selectors.d.ts +5 -0
  166. package/lib/sections/projects/selectors.d.ts.map +1 -0
  167. package/lib/sections/projects/selectors.js +163 -0
  168. package/lib/sections/projects/types.d.ts +28 -0
  169. package/lib/sections/projects/types.d.ts.map +1 -0
  170. package/lib/sections/projects/types.js +8 -0
  171. package/lib/sections/resume/ResumeEditDialog.d.ts +7 -0
  172. package/lib/sections/resume/ResumeEditDialog.d.ts.map +1 -0
  173. package/lib/sections/resume/ResumeEditDialog.js +629 -0
  174. package/lib/sections/resume/ResumeSection.d.ts +7 -0
  175. package/lib/sections/resume/ResumeSection.d.ts.map +1 -0
  176. package/lib/sections/resume/ResumeSection.js +160 -0
  177. package/lib/sections/resume/mutations.d.ts +6 -0
  178. package/lib/sections/resume/mutations.d.ts.map +1 -0
  179. package/lib/sections/resume/mutations.js +172 -0
  180. package/lib/sections/resume/selectors.d.ts +4 -0
  181. package/lib/sections/resume/selectors.d.ts.map +1 -0
  182. package/lib/sections/resume/selectors.js +142 -0
  183. package/lib/sections/resume/types.d.ts +33 -0
  184. package/lib/sections/resume/types.d.ts.map +1 -0
  185. package/lib/sections/resume/types.js +8 -0
  186. package/lib/sections/shared/collapsibleSection.d.ts +2 -0
  187. package/lib/sections/shared/collapsibleSection.d.ts.map +1 -0
  188. package/lib/sections/shared/collapsibleSection.js +24 -0
  189. package/lib/sections/shared/contactTypeUtils.d.ts +7 -0
  190. package/lib/sections/shared/contactTypeUtils.d.ts.map +1 -0
  191. package/lib/sections/shared/contactTypeUtils.js +48 -0
  192. package/lib/sections/shared/idNodeFactory.d.ts +3 -0
  193. package/lib/sections/shared/idNodeFactory.d.ts.map +1 -0
  194. package/lib/sections/shared/idNodeFactory.js +14 -0
  195. package/lib/sections/shared/phoneCountries.d.ts +20 -0
  196. package/lib/sections/shared/phoneCountries.d.ts.map +1 -0
  197. package/lib/sections/shared/phoneCountries.js +1080 -0
  198. package/lib/sections/shared/rdfList.d.ts +3 -0
  199. package/lib/sections/shared/rdfList.d.ts.map +1 -0
  200. package/lib/sections/shared/rdfList.js +34 -0
  201. package/lib/sections/shared/rdfMutationHelpers.d.ts +12 -0
  202. package/lib/sections/shared/rdfMutationHelpers.d.ts.map +1 -0
  203. package/lib/sections/shared/rdfMutationHelpers.js +82 -0
  204. package/lib/sections/shared/rowState.d.ts +21 -0
  205. package/lib/sections/shared/rowState.d.ts.map +1 -0
  206. package/lib/sections/shared/rowState.js +52 -0
  207. package/lib/sections/shared/sanitizeUtils.d.ts +5 -0
  208. package/lib/sections/shared/sanitizeUtils.d.ts.map +1 -0
  209. package/lib/sections/shared/sanitizeUtils.js +22 -0
  210. package/lib/sections/shared/sectionCardHelpers.d.ts +11 -0
  211. package/lib/sections/shared/sectionCardHelpers.d.ts.map +1 -0
  212. package/lib/sections/shared/sectionCardHelpers.js +105 -0
  213. package/lib/sections/shared/types.d.ts +7 -0
  214. package/lib/sections/shared/types.d.ts.map +1 -0
  215. package/lib/sections/shared/types.js +5 -0
  216. package/lib/sections/skills/SkillsEditDialog.d.ts +7 -0
  217. package/lib/sections/skills/SkillsEditDialog.d.ts.map +1 -0
  218. package/lib/sections/skills/SkillsEditDialog.js +340 -0
  219. package/lib/sections/skills/SkillsSection.d.ts +5 -0
  220. package/lib/sections/skills/SkillsSection.d.ts.map +1 -0
  221. package/lib/sections/skills/SkillsSection.js +169 -0
  222. package/lib/sections/skills/mutations.d.ts +6 -0
  223. package/lib/sections/skills/mutations.d.ts.map +1 -0
  224. package/lib/sections/skills/mutations.js +110 -0
  225. package/lib/sections/skills/selectors.d.ts +6 -0
  226. package/lib/sections/skills/selectors.d.ts.map +1 -0
  227. package/lib/sections/skills/selectors.js +37 -0
  228. package/lib/sections/skills/types.d.ts +14 -0
  229. package/lib/sections/skills/types.d.ts.map +1 -0
  230. package/lib/sections/skills/types.js +5 -0
  231. package/lib/sections/social/SocialEditDialog.d.ts +7 -0
  232. package/lib/sections/social/SocialEditDialog.d.ts.map +1 -0
  233. package/lib/sections/social/SocialEditDialog.js +362 -0
  234. package/lib/sections/social/SocialSection.d.ts +8 -0
  235. package/lib/sections/social/SocialSection.d.ts.map +1 -0
  236. package/lib/sections/social/SocialSection.js +201 -0
  237. package/lib/sections/social/constants.d.ts +3 -0
  238. package/lib/sections/social/constants.d.ts.map +1 -0
  239. package/lib/sections/social/constants.js +16 -0
  240. package/lib/sections/social/helpers.d.ts +15 -0
  241. package/lib/sections/social/helpers.d.ts.map +1 -0
  242. package/lib/sections/social/helpers.js +316 -0
  243. package/lib/sections/social/mutations.d.ts +4 -0
  244. package/lib/sections/social/mutations.d.ts.map +1 -0
  245. package/lib/sections/social/mutations.js +298 -0
  246. package/lib/sections/social/selectors.d.ts +4 -0
  247. package/lib/sections/social/selectors.d.ts.map +1 -0
  248. package/lib/sections/social/selectors.js +43 -0
  249. package/lib/sections/social/types.d.ts +19 -0
  250. package/lib/sections/social/types.d.ts.map +1 -0
  251. package/lib/sections/social/types.js +5 -0
  252. package/lib/styles/BioSection.css +77 -0
  253. package/lib/styles/CVCard.css +107 -2
  254. package/lib/styles/ContactInfoEditDialog.css +153 -0
  255. package/lib/styles/EditDialogs.css +1028 -0
  256. package/lib/styles/EducationCard.css +103 -0
  257. package/lib/styles/HeadingSection.css +309 -0
  258. package/lib/styles/ProfileCard.css +10 -42
  259. package/lib/styles/ProfileView.css +53 -8
  260. package/lib/styles/ProjectsCard.css +206 -0
  261. package/lib/styles/QRCodeCard.css +29 -10
  262. package/lib/styles/SocialCard.css +41 -13
  263. package/lib/styles/dialog.css +209 -0
  264. package/lib/styles/utilities.css +638 -256
  265. package/lib/textUtils.d.ts +6 -0
  266. package/lib/textUtils.d.ts.map +1 -0
  267. package/lib/textUtils.js +44 -0
  268. package/lib/texts.d.ts +45 -4
  269. package/lib/texts.d.ts.map +1 -1
  270. package/lib/texts.js +46 -5
  271. package/lib/types.d.ts +2 -0
  272. package/lib/types.d.ts.map +1 -0
  273. package/lib/types.js +5 -0
  274. package/lib/ui/dialog.d.ts +29 -0
  275. package/lib/ui/dialog.d.ts.map +1 -0
  276. package/lib/ui/dialog.js +269 -0
  277. package/lib/ui/errors.d.ts +2 -0
  278. package/lib/ui/errors.d.ts.map +1 -0
  279. package/lib/ui/errors.js +10 -0
  280. package/package.json +6 -4
  281. package/lib/CVCard.d.ts +0 -4
  282. package/lib/CVCard.d.ts.map +0 -1
  283. package/lib/CVCard.js +0 -114
  284. package/lib/CVPresenter.d.ts +0 -25
  285. package/lib/CVPresenter.d.ts.map +0 -1
  286. package/lib/CVPresenter.js +0 -119
  287. package/lib/FriendList.d.ts +0 -6
  288. package/lib/FriendList.d.ts.map +0 -1
  289. package/lib/FriendList.js +0 -27
  290. package/lib/ProfileCard.d.ts +0 -6
  291. package/lib/ProfileCard.d.ts.map +0 -1
  292. package/lib/ProfileCard.js +0 -62
  293. package/lib/SocialCard.d.ts +0 -5
  294. package/lib/SocialCard.d.ts.map +0 -1
  295. package/lib/SocialCard.js +0 -51
  296. package/lib/SocialPresenter.d.ts +0 -11
  297. package/lib/SocialPresenter.d.ts.map +0 -1
  298. package/lib/SocialPresenter.js +0 -117
  299. package/lib/StuffCard.d.ts +0 -10
  300. package/lib/StuffCard.d.ts.map +0 -1
  301. package/lib/StuffCard.js +0 -52
  302. package/lib/StuffPresenter.d.ts +0 -14
  303. package/lib/StuffPresenter.d.ts.map +0 -1
  304. package/lib/StuffPresenter.js +0 -53
  305. package/lib/presenter.d.ts +0 -14
  306. package/lib/presenter.d.ts.map +0 -1
  307. package/lib/presenter.js +0 -68
  308. package/lib/styles/FriendList.css +0 -12
  309. package/lib/styles/StuffCard.css +0 -23
  310. package/lib/styles/editProfile.css +0 -62
  311. package/lib/styles/profileRDFFormsEnforced.css +0 -431
@@ -1,32 +1,31 @@
1
1
  /* Utility-first CSS classes for layout, spacing, and responsiveness */
2
-
2
+ /* These utilities are designed specfically for the profile pane */
3
+ /* Utilities that can be shared by all panes should be added to dev-globals.css
4
+ and to mashlib repo mash-utilities.css and then updated accross all pane
5
+ development environments */
3
6
  :root {
4
7
  --profile-image-size: 3em;
5
8
  }
6
9
 
7
- @media (max-width: 1000px) {
8
- .profile-grid,
9
- .profile-grid * {
10
- font-size: 2rem !important;
11
- }
10
+ .profile-pane-host {
11
+ display: block;
12
+ width: 100%;
13
+ min-width: 100%;
14
+ max-width: none;
15
+ box-sizing: border-box;
16
+ }
12
17
 
13
- .profile-grid .actionButton,
14
- .profile-grid .searchInput,
15
- .profile-grid .flatButton,
16
- .profile-grid .buttonSection button,
17
- .profile-grid .groupButtonsList button {
18
- min-height: calc(var(--min-touch-target) + 0.5em) !important;
19
- font-size: 2rem !important;
20
- padding: 1em 1em !important;
18
+ @media (max-width: 768px) {
19
+ .profile-grid {
20
+ font-size: clamp(0.9rem, 1.1vw + 0.65rem, 1rem);
21
21
  }
22
- }
23
22
 
24
- .actionButton {
25
- width: 100%;
26
- min-width: 180px;
27
- max-width: 320px;
28
- box-sizing: border-box;
29
- display: inline-block;
23
+ .profile-grid .profile__action-button,
24
+ .profile-grid .profile__actions button {
25
+ min-height: calc(var(--min-touch-target, 44px) + 0.5em) !important;
26
+ font-size: clamp(0.9rem, 2.1vw, 1rem) !important;
27
+ padding: 0.75em 0.9em !important;
28
+ }
30
29
  }
31
30
 
32
31
  /* ===========================================
@@ -35,324 +34,707 @@
35
34
 
36
35
  .profile-grid {
37
36
  display: grid;
38
- /* Allow the grid to shrink below 30em on small viewports to avoid overflow */
39
- grid-template-columns: repeat(auto-fit, minmax(min(100%, 30em), 1fr));
40
- gap: var(--spacing-lg);
41
- background: var(--color-background);
37
+ grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
38
+ gap: var(--spacing-xxs, 0.3125rem);
39
+ background: var(--color-background, #F8F9FB);
42
40
  }
43
41
 
44
- .profile-header,
45
- .profile-footer {
46
- grid-column: 1 / -1;
42
+ .profile-grid > * {
43
+ min-width: 0;
47
44
  }
48
45
 
49
- .center {
50
- justify-content: center;
51
- align-items: center;
46
+ .profile-pane-root {
47
+ width: 100%;
48
+ max-width: 100%;
49
+ min-width: 0;
50
+ display: block;
51
+ container-name: profile-pane;
52
+ container-type: inline-size;
52
53
  }
53
54
 
54
- .flex {
55
- display: flex;
55
+ /* Embedded rendering inside SolidOS outline table cells needs a single-column fallback.
56
+ The outline reserves space for icon/predicate columns, so the available content width
57
+ is effectively much narrower than the viewport. */
58
+ td.obj .profile-pane-root {
59
+ width: 100%;
60
+ max-width: 100%;
61
+ min-width: 0;
56
62
  }
57
- .grid {
58
- display: grid;
63
+
64
+ @container profile-pane (max-width: 768px) {
65
+ .profile-grid {
66
+ font-size: clamp(0.9rem, 1.1vw + 0.65rem, 1rem);
67
+ }
68
+
69
+ .profile-grid .profile__action-button,
70
+ .profile-grid .profile__actions button {
71
+ min-height: calc(var(--min-touch-target, 44px) + 0.5em) !important;
72
+ font-size: clamp(0.9rem, 2.1vw, 1rem) !important;
73
+ padding: 0.75em 0.9em !important;
74
+ }
59
75
  }
60
76
 
61
- /* Spacing utilities using CSS variables */
62
- .gap-xs { gap: var(--spacing-xs); }
63
- .gap-sm { gap: var(--spacing-sm); }
64
- .gap-md { gap: var(--spacing-md); }
65
- .gap-lg { gap: var(--spacing-lg); }
66
- .gap-xl { gap: var(--spacing-xl); }
77
+ @container profile-pane (max-width: 768px) {
78
+ .profile-grid {
79
+ grid-template-columns: 1fr;
80
+ gap: var(--spacing-xxs, 0.3125rem);
81
+ width: 100%;
82
+ max-width: 100%;
83
+ box-sizing: border-box;
84
+ margin: 0 auto;
85
+ padding-inline: var(--spacing-xxs, 0.3125rem);
86
+ overflow-x: clip;
87
+ }
88
+ }
89
+
90
+ @media (max-width: 768px) {
91
+ .profile-grid {
92
+ grid-template-columns: 1fr;
93
+ gap: var(--spacing-xxs, 0.3125rem);
94
+ width: 100%;
95
+ max-width: 100%;
96
+ box-sizing: border-box;
97
+ margin: 0 auto;
98
+ padding-inline: var(--spacing-xxs, 0.3125rem);
99
+ overflow-x: clip;
100
+ }
101
+ }
67
102
 
68
- .mt-xs { margin-top: var(--spacing-xs); }
69
- .mt-sm { margin-top: var(--spacing-sm); }
70
- .mt-md { margin-top: var(--spacing-md); }
71
- .mt-lg { margin-top: var(--spacing-lg); }
103
+ /* END GRID LAYOUT */
72
104
 
73
- .mb-xs { margin-bottom: var(--spacing-xs); }
74
- .mb-sm { margin-bottom: var(--spacing-sm); }
75
- .mb-md { margin-bottom: var(--spacing-md); }
76
- .mb-lg { margin-bottom: var(--spacing-lg); }
105
+ .profile__section {
106
+ width: 100%;
107
+ }
77
108
 
78
- .p-xs { padding: var(--spacing-xs); }
79
- .p-sm { padding: var(--spacing-sm); }
80
- .p-md { padding: var(--spacing-md); }
81
- .p-lg { padding: var(--spacing-lg); }
109
+ .profile__section--empty {
110
+ padding: var(--spacing-1xl, 2.5rem) var(--spacing-lg, 1.5625rem); /* 40px 25px */
111
+ width: 100%;
112
+ }
82
113
 
83
- .rounded { border-radius: var(--border-radius-full); }
84
- .rounded-sm { border-radius: var(--border-radius-base); }
114
+ .profile__section,
115
+ .profile__section--empty,
116
+ .profile__action-button--empty {
117
+ background: var(--color-card-bg, #fff);
118
+ }
85
119
 
86
- .shadow { box-shadow: var(--box-shadow); }
87
- .shadow-sm { box-shadow: var(--box-shadow-sm); }
120
+ /* Header row layout utility for profile section headers */
121
+ .profile__section-header {
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: space-between;
125
+ gap: var(--spacing-xs, 0.75rem);
126
+ width: 100%;
127
+ }
88
128
 
89
- .bg-primary {
90
- background: var(--color-primary);
91
- color: #fff;
129
+ .profile__section-header h2,
130
+ .profile__section-header h3,
131
+ .profile__section-header h4 {
132
+ margin: 0;
92
133
  }
93
- .bg-card {
94
- background: var(--color-card-bg);
134
+
135
+ .profile__action-button {
136
+ width: 100%;
137
+ min-width: 11.25rem; /* 180px */
138
+ max-width: 20rem; /* 320px */
139
+ box-sizing: border-box;
140
+ display: inline-block;
95
141
  }
96
142
 
97
- /* Accessibility utilities */
98
- .sr-only {
99
- position: absolute;
100
- width: 1px;
101
- height: 1px;
102
- padding: 0;
103
- margin: -1px;
104
- overflow: hidden;
105
- clip: rect(0, 0, 0, 0);
143
+ .profile__action-button--empty {
144
+ /*padding: 6px 8px; Note: these are the styles from new design
145
+ min-height: auto; however they don't meet accessibility guidelines
146
+ min-width: 0; for touch target size */
147
+ width: fit-content;
148
+ min-width: fit-content;
149
+ max-width: fit-content;
106
150
  white-space: nowrap;
107
- border: 0;
108
- }
109
-
110
- .min-touch-target {
111
- min-height: var(--min-touch-target);
112
- min-width: var(--min-touch-target);
113
- }
114
-
115
- /* Enhanced accessibility utilities */
116
- .visually-hidden {
117
- position: absolute !important;
118
- width: 1px !important;
119
- height: 1px !important;
120
- padding: 0 !important;
121
- margin: -1px !important;
122
- overflow: hidden !important;
123
- clip: rect(0, 0, 0, 0) !important;
124
- white-space: nowrap !important;
125
- border: 0 !important;
126
- }
127
-
128
- .visually-hidden.focusable:focus,
129
- .visually-hidden.focusable:active {
130
- position: static !important;
131
- width: auto !important;
132
- height: auto !important;
133
- padding: inherit !important;
134
- margin: inherit !important;
135
- overflow: visible !important;
136
- clip: auto !important;
137
- white-space: inherit !important;
138
- }
139
-
140
- /* Skip links utility */
141
- .skip-links {
142
- position: absolute;
143
- top: -100px;
144
- left: 0;
145
- z-index: 1000;
146
- }
147
-
148
- .skip-links a {
149
- position: absolute;
150
- left: 6px;
151
- top: 6px;
152
- padding: var(--spacing-sm);
153
- background: var(--color-primary);
154
- color: white;
155
- text-decoration: none;
156
- border-radius: var(--border-radius-base);
151
+ box-sizing: border-box;
152
+ border: var(--border-width-sm, 1px) solid var(--color-border-darker, #4A5565);
153
+ color: var(--slate-700, #314158);
154
+ font-size: var(--font-size-sm, 0.875rem); /* 14px */
155
+ font-weight: var(--font-weight-medium, 500);
156
+ line-height: var(--line-height-tight, 1.4);
157
+ }
158
+ .profile__empty-state-message {
159
+ color: #62748E;
160
+ text-align: center;
161
+ font-size: var(--font-size-xs, 0.813rem); /* 13px */
162
+ font-weight: var(--font-weight-normal, 400);
163
+ line-height: var(--line-height-tight, 1.4); /* 140% from design 18.2px */
164
+ }
165
+ .contact-info__icon-wrapper {
166
+ width: 36px;
167
+ height: 36px;
168
+ padding: 0 0.575rem; /* 9.2px - from design, but also ensures icons are centered in the circle */
169
+ flex-shrink: 0;
170
+ }
171
+
172
+ .contact-info__icon {
173
+ width: var(--icon-xxs, 1rem); /* 16px */
174
+ height: var(--icon-xxs, 1rem); /* 16px */
175
+ flex-shrink: 0;
176
+ stroke-width: 1.333px;
177
+ stroke: #90A1B9;
178
+ }
179
+
180
+ .contact-info__contact-point-value {
181
+ color: var(--slate-800, #1D293D);
182
+ font-size: var(--font-size-sm, 0.875rem); /* 14px */
183
+ font-weight: var(--font-weight-bold, 600);
184
+ white-space: normal !important;
185
+ overflow-wrap: anywhere;
186
+ word-break: break-word;
157
187
  }
158
188
 
159
- .skip-links a:focus {
160
- top: 6px;
189
+ .contact-info__contact-point-type {
190
+ color: var(--slate-500, #62748E);
191
+ font-size: var(--font-size-xxs, 0.75rem); /* 12px */
192
+ font-weight: var(--font-weight-md, 500);
161
193
  }
162
194
 
163
- .reduced-motion {
164
- animation: none !important;
165
- transition: none !important;
195
+ .contact-info__address {
196
+ color: var(--slate-800, #1D293D);
197
+ font-size: var(--font-size-sm, 0.875rem); /* 14px */
198
+ font-weight: var(--font-weight-bold, 600);
166
199
  }
167
200
 
168
- /* Focus management */
169
- .focus-ring {
170
- outline: 2px solid var(--color-primary);
171
- outline-offset: 2px;
201
+ .contact-info__list {
202
+ list-style: none;
203
+ margin: 0;
204
+ padding: 0 0 var(--spacing-2xs, 0.625rem) 0;
205
+ gap: var(--spacing-2xs, 0.625rem);
172
206
  }
173
207
 
174
- .no-focus-ring {
175
- outline: none;
208
+ .contact-info__list:last-of-type {
209
+ padding-bottom: 0;
176
210
  }
177
211
 
178
- .no-focus-ring:focus-visible {
179
- outline: none;
180
- box-shadow: none;
212
+ .contact-info__list + .contact-info__list {
213
+ margin-top: var(--spacing-2xs, 0.625rem);
181
214
  }
182
215
 
183
- /* ARIA live regions */
184
- .live-region {
185
- position: absolute;
186
- left: -10000px;
187
- width: 1px;
188
- height: 1px;
189
- overflow: hidden;
216
+ .contact-info__item {
217
+ margin-inline-start: 0;
190
218
  }
191
219
 
192
- /* Note: Use aria-live="polite" or aria-live="assertive" HTML attributes with .live-region */
220
+ .contact-info__empty-icon svg {
221
+ width: var(--icon-md, 2.5rem); /* 40px */
222
+ height: var(--icon-md, 2.5rem); /* 40px */
223
+ display: block;
224
+ }
193
225
 
194
- /* Text scaling utilities */
195
- .text-scale-friendly {
196
- line-height: 1.5;
197
- max-width: 70ch; /* Optimal reading length */
226
+ .contact-info__empty-icon svg path {
227
+ stroke-width: 0.25rem; /* 4px */
228
+ stroke: #E5E7EB;
198
229
  }
199
230
 
200
- /* Text accessibility utilities */
201
- .text-readable {
202
- line-height: var(--line-height-base);
203
- max-width: 65ch;
231
+ .contact-info__empty-message {
232
+ color: #9CA3AF;
233
+ text-align: center;
234
+ font-size: var(--font-size-xs, 0.813rem); /* 13px */
235
+ font-weight: var(--font-weight-normal, 400);
236
+ line-height: var(--line-height-tight, 1.4); /* design says 1.2 */
204
237
  }
205
238
 
206
- .text-lg {
207
- font-size: var(--font-size-lg);
208
- line-height: var(--line-height-base);
239
+ .contact-info__empty-icon-wrapper {
240
+ width: 3rem; /* 48px */
241
+ flex: 1 0 0;
242
+ }
243
+ .profile__empty-state-content {
244
+ gap: var(--spacing-2xs, 0.625rem); /* 10px */
209
245
  }
210
246
 
211
- .text-small {
212
- font-size: max(var(--font-size-sm), var(--min-font-size));
213
- line-height: var(--min-line-height);
247
+ .profile__empty-state-content > h2,
248
+ .profile__empty-state-content > p {
249
+ margin: 0;
214
250
  }
215
251
 
216
- .text-contrast-high {
217
- color: var(--color-text);
218
- font-weight: 600;
252
+ /* SAM - generated by ai below need to check design and change */
253
+ .profile__action-button--empty:hover {
254
+ background: var(--color-primary, #7C4DFF);
255
+ border-color: var(--color-primary, #7C4DFF);
256
+ color: white;
219
257
  }
220
258
 
221
- :focus-visible {
222
- outline: var(--focus-ring-width) solid var(--color-primary);
223
- outline-offset: 2px;
224
- box-shadow: 0 0 0 1px var(--color-background);
259
+ .profile__add-more-content {
260
+ gap: var(--spacing-xxs, 0.3125rem);
225
261
  }
226
262
 
227
- :focus:not(:focus-visible) {
228
- outline: none;
229
- box-shadow: none;
263
+ .profile__add-more-icon {
264
+ width: var(--icon-xxxs, 0.75rem); /* 12px */
265
+ height: var(--icon-xxxs, 0.75rem); /* 12px */
266
+ line-height: 0;
267
+ flex: 0 0 auto;
230
268
  }
231
269
 
232
- /* Prevent labels from appearing focusable to keyboard users. */
233
- label:focus,
234
- label:focus-visible {
235
- outline: none !important;
236
- box-shadow: none !important;
270
+ .profile__add-more-icon svg {
271
+ width: 100%;
272
+ height: 100%;
273
+ display: block;
237
274
  }
238
275
 
239
- /* Better focus for text elements */
240
- .focusable-text:focus {
241
- background-color: rgba(124, 77, 255, 0.1);
242
- outline: 2px solid var(--color-primary);
243
- outline-offset: 2px;
244
- border-radius: 2px;
276
+ .skills__list {
277
+ list-style: none;
278
+ margin: 0;
279
+ padding: 0;
280
+ align-items: flex-start;
281
+ gap: 0.5rem; /* 8px */
245
282
  }
246
283
 
247
- /* High contrast text */
248
- .high-contrast {
249
- color: var(--color-text);
250
- background: var(--color-background);
251
- border: 1px solid var(--color-border-pale);
284
+ .skills__item {
285
+ gap: 0.2rem;
252
286
  }
253
287
 
254
- /* ===========================================
255
- CONSOLIDATED COMPONENT PATTERNS
256
- =========================================== */
288
+ .skills__item-label {
289
+ color: var(--slate-900, #0F172B);
290
+ font-size: var(--font-size-sm, 0.875rem); /* 14px */
291
+ font-weight: var(--font-weight-md, 500);
292
+ line-height: 1.2;
293
+ }
257
294
 
258
- /* Primary Button - used by ChatWithMe, ProfileCard */
259
- .btn-primary {
260
- min-height: var(--min-touch-target);
261
- padding: var(--spacing-sm) var(--spacing-md);
262
- border: 1px solid var(--color-primary);
263
- border-radius: var(--border-radius-base);
264
- background: var(--color-primary);
265
- color: white;
266
- font-weight: 600;
295
+ .skills__remove-button {
296
+ border: none;
297
+ background: none;
267
298
  cursor: pointer;
268
- transition: all var(--animation-duration) ease;
299
+ padding: 0;
300
+ margin: 0;
301
+ line-height: 1;
269
302
  }
270
303
 
271
- .btn-primary:hover {
272
- background: color-mix(in srgb, var(--color-primary) 90%, black);
273
- box-shadow: 0 2px 4px rgba(124, 77, 255, 0.2);
304
+ .languages__list {
305
+ list-style: none;
306
+ margin: 0;
307
+ padding: 0;
274
308
  }
275
309
 
276
- .btn-primary:active {
277
- box-shadow: 0 1px 2px rgba(124, 77, 255, 0.2);
310
+ .languages__item-label {
311
+ color: var(--gray-900, #101828);
312
+ font-size: var(--font-size-md, 1rem); /* 16px */
313
+ font-weight: var(--font-weight-md, 500);
314
+ }
315
+
316
+ .languages__empty-icon {
317
+ width: var(--icon-xs, 1.5rem); /* 24px new design uses this */
318
+ height: var(--icon-xs, 1.5rem); /* 24px new design uses this */
319
+ flex-shrink: 0;
320
+ }
321
+ /* Add-me-to-friends button style shared across profile sections. */
322
+ .profile__btn-friends {
323
+ width: auto;
324
+ min-width: 0;
325
+ max-width: none;
326
+ padding: 0.375rem 0.75rem;
327
+ gap: var(--spacing-xxs, 0.3125rem);
328
+ border-radius: var(--border-radius-md, 0.5rem);
329
+ border: 1px solid var(--color-primary, #7C4DFF);
330
+ background: transparent;
331
+ color: var(--color-primary, #7C4DFF);
332
+ }
333
+
334
+ /* Text-style action button utility (used for section header/edit actions). */
335
+ .profile-action-text {
336
+ width: auto;
337
+ min-width: 0;
338
+ max-width: none;
339
+ padding: var(--spacing-xxs, 0.3125rem);
340
+ border: none;
341
+ background: none;
342
+ color: var(--color-primary, #7C4DFF);
343
+ cursor: pointer;
344
+ font-size: var(--font-size-sm, 0.875rem);
278
345
  }
279
346
 
280
- .btn-primary:disabled {
281
- opacity: 0.6;
282
- cursor: not-allowed;
283
- transform: none;
347
+ .profile-action-text:hover {
348
+ text-decoration: underline;
284
349
  }
285
350
 
286
- /* Action Button Focus - used by ChatWithMe, ProfileCard */
287
- .action-button-focus:focus,
288
- .action-button-focus:focus-visible {
289
- outline: 3px solid var(--color-primary) !important;
290
- outline-offset: 2px !important;
291
- box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px rgba(124, 77, 255, 0.25) !important;
292
- z-index: 1;
351
+ .profile-section-collapsible {
352
+ display: block;
293
353
  }
294
354
 
295
- /* List Reset - used by FriendList, SocialCard, nav */
296
- .list-reset {
297
- list-style: none;
298
- padding: 0;
299
- margin: 0;
355
+ .profile-section-collapsible__header {
356
+ margin-bottom: 0;
300
357
  }
301
358
 
302
- /* Zebra Striping - used by FriendList, StuffCard tables */
303
- .zebra-stripe tr:nth-child(even),
304
- .zebra-stripe > *:nth-child(even) {
305
- background-color: rgba(0, 0, 0, 0.02);
359
+ .profile-section-collapsible__actions {
360
+ gap: var(--spacing-xs, 0.75rem);
361
+ margin-top: -0.25rem;
306
362
  }
307
363
 
308
- /* Section Title - primary colored heading */
309
- .section-title {
310
- font-size: 1.25em;
311
- font-weight: 600;
312
- color: var(--color-primary);
313
- margin: 0;
364
+ .profile-section-collapsible__edit-button {
365
+ min-width: 0;
314
366
  }
315
367
 
316
- /* Text Overflow - used by ProfileCard, SocialCard */
317
- .text-truncate {
318
- white-space: nowrap;
319
- text-overflow: ellipsis;
320
- overflow: hidden;
368
+ .profile-section-collapsible__edit-icon {
369
+ display: none;
321
370
  }
322
371
 
323
- .text-wrap-anywhere {
324
- overflow-wrap: anywhere;
325
- word-break: break-word;
372
+ .profile-section-collapsible__actions > button.inline-flex-row {
373
+ display: none !important;
374
+ min-height: auto;
375
+ min-width: auto;
376
+ padding: var(--spacing-xxs, 0.3125rem);
377
+ border: none;
378
+ background: none;
379
+ color: var(--color-text, #1A1A1A);
380
+ cursor: pointer;
326
381
  }
327
382
 
328
- /* Loading Text - primary colored centered loading indicator */
329
- .loading-text {
330
- color: var(--color-primary);
331
- text-align: center;
332
- margin: var(--spacing-md) 0;
383
+ .profile-section-collapsible__chevron {
384
+ display: inline-block;
385
+ flex: 0 0 auto;
386
+ transition: transform var(--animation-duration, 0.2s) ease;
333
387
  }
334
388
 
335
- /* Centered Section - flex column with center alignment */
336
- .section-centered {
337
- display: flex;
338
- flex-direction: column;
339
- align-items: center;
389
+ .profile-section-collapsible__content {
390
+ margin-top: var(--spacing-2xs, 0.625rem);
391
+ width: 100%;
392
+ max-width: 100%;
393
+ min-width: 0;
394
+ box-sizing: border-box;
395
+ }
396
+
397
+ .profile-section-collapsible__content > :first-child {
398
+ margin-top: 0;
399
+ }
400
+
401
+ .profile-section-collapsible__content > :last-child {
402
+ margin-bottom: 0;
403
+ }
404
+
405
+ .bioCard,
406
+ .bioSection,
407
+ .socialCard,
408
+ .socialList,
409
+ .skills__list,
410
+ .languages__list,
411
+ .contact-info__list {
412
+ width: 100%;
413
+ max-width: 100%;
414
+ min-width: 0;
415
+ box-sizing: border-box;
416
+ }
417
+
418
+ @media (min-width: 769px) {
419
+ .profile-section-collapsible > .profile-section-collapsible__content {
420
+ display: block;
421
+ }
422
+
423
+ .profile-section-collapsible__edit-label svg,
424
+ .profile__action-icon svg {
425
+ width: 0.875rem;
426
+ height: 0.875rem;
427
+ }
428
+
429
+ .profile-section-collapsible__edit-label svg path,
430
+ .profile__action-icon svg path {
431
+ fill: var(--color-primary, #7C4DFF);
432
+ }
433
+
434
+ .profile-section-collapsible__edit-label {
435
+ display: inline;
436
+ transform: translateY(-0.125rem);
437
+ }
438
+
439
+ .profile__add-more-icon {
440
+ transform: translateY(-0.125rem);
441
+ }
442
+
443
+ .profile-section-collapsible__edit-icon {
444
+ display: none;
445
+ }
340
446
  }
341
447
 
342
- /* Card Section Background */
343
- .section-bg {
344
- background: var(--color-section-bg);
345
- border-radius: var(--border-radius-full);
346
- box-shadow: var(--box-shadow);
347
- padding: var(--spacing-md);
448
+ @media (max-width: 576px) {
449
+ .profile-grid .profile__section-header h2,
450
+ .profile-grid .profile__section-header h3,
451
+ .profile-grid .profile__section-header h4,
452
+ .profile-grid .profile__empty-state-content > h2,
453
+ .profile-grid .cvSection h3,
454
+ .profile-grid .profile__name,
455
+ .profile-grid .friends-pane__header-name {
456
+ font-family: inherit !important;
457
+ }
458
+
459
+ .profile-section-collapsible--inline-mobile-actions > .profile-section-collapsible__header {
460
+ display: flex;
461
+ align-items: center;
462
+ justify-content: space-between;
463
+ gap: 0.5rem;
464
+ }
465
+
466
+ .profile-section-collapsible--inline-mobile-actions > .profile-section-collapsible__header h2 {
467
+ margin: 0;
468
+ flex: 1 1 auto;
469
+ min-width: 0;
470
+ }
471
+
472
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__actions {
473
+ display: inline-flex;
474
+ flex-direction: row;
475
+ align-items: center;
476
+ gap: 0.25rem;
477
+ margin-top: 0;
478
+ flex: 0 0 auto;
479
+ }
480
+
481
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__edit-button {
482
+ display: inline-flex !important;
483
+ order: 1;
484
+ }
485
+
486
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__edit-button:active,
487
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__edit-button:focus,
488
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__edit-button:focus-visible {
489
+ border: none !important;
490
+ outline: none !important;
491
+ box-shadow: none !important;
492
+ background: transparent !important;
493
+ }
494
+
495
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__actions > button.inline-flex-row {
496
+ order: 2;
497
+ }
498
+
499
+ .profile__section-header h2,
500
+ .profile__section-header h3,
501
+ .profile__section-header h4 {
502
+ font-size: var(--font-size-lg, 1.125rem) !important;
503
+ line-height: 1.2 !important;
504
+ }
505
+
506
+ .profile-grid .profile__empty-state-content > h2,
507
+ .profile-grid .cvSection h3 {
508
+ font-size: var(--font-size-lg, 1.125rem) !important;
509
+ line-height: 1.2 !important;
510
+ }
511
+
512
+ .profile-grid .profile__name,
513
+ .profile-grid .friends-pane__header-name {
514
+ font-size: 1.5rem !important;
515
+ line-height: 1.15 !important;
516
+ }
517
+
518
+ .profile-grid .profile__pronouns,
519
+ .profile-grid .friends-pane__header-pronouns,
520
+ .profile-grid .friends-pane__friends-pronouns {
521
+ font-family: inherit !important;
522
+ font-size: 0.6875rem !important;
523
+ line-height: 1.1 !important;
524
+ }
525
+
526
+ .profile-section-collapsible[data-expanded="false"] .profile-section-collapsible__content {
527
+ display: none;
528
+ }
529
+
530
+ .profile-section-collapsible__actions.flex-column {
531
+ align-items: flex-end;
532
+ gap: 0.25rem;
533
+ }
534
+
535
+ /* Keep empty-section mobile header controls in the same order as regular sections: toggle first, add/edit below. */
536
+ .profile__section--empty .profile-section-collapsible__actions > button.inline-flex-row {
537
+ order: 1;
538
+ }
539
+
540
+ .profile__section--empty .profile-section-collapsible__actions > .profile-section-collapsible__edit-button {
541
+ order: 2;
542
+ }
543
+
544
+ .profile-section-collapsible[data-expanded="true"] .profile-section-collapsible__chevron {
545
+ transform: rotate(180deg);
546
+ }
547
+
548
+ .profile-section-collapsible__edit-label {
549
+ display: none !important;
550
+ }
551
+
552
+ .profile-section-collapsible__edit-icon {
553
+ display: inline;
554
+ }
555
+
556
+ /* Empty-state action buttons use icon-only mobile controls (plus sign). */
557
+ .profile__section--empty .profile-section-collapsible__edit-label {
558
+ display: none !important;
559
+ }
560
+
561
+ .profile__section--empty .profile-section-collapsible__edit-icon {
562
+ display: inline !important;
563
+ }
564
+
565
+ .profile-section-collapsible .profile-section-collapsible__edit-button {
566
+ display: none !important;
567
+ order: 2;
568
+ }
569
+
570
+ .profile-section-collapsible[data-expanded="true"] .profile-section-collapsible__edit-button {
571
+ display: inline-flex !important;
572
+ }
573
+ /* Reassert toggle button layout in collapsible action rows on mobile
574
+ so utility resets never hide/misalign the control. */
575
+ .profile-section-collapsible__actions > button.inline-flex-row {
576
+ display: inline-flex !important;
577
+ align-items: center;
578
+ justify-content: center;
579
+ }
580
+
581
+ .profile-section-collapsible__edit-icon--add svg path {
582
+ fill: #1E2939 !important;
583
+ stroke: #1E2939 !important;
584
+ }
585
+
586
+ .profile-section-collapsible__edit-icon--projects svg path {
587
+ stroke-width: 1.714px !important;
588
+ stroke: var(--gray-800, #1E2939) !important;
589
+ fill: none !important;
590
+ }
591
+
348
592
  }
349
593
 
594
+ @container profile-pane (max-width: 576px) {
595
+ .profile-grid .profile__section-header h2,
596
+ .profile-grid .profile__section-header h3,
597
+ .profile-grid .profile__section-header h4,
598
+ .profile-grid .profile__empty-state-content > h2,
599
+ .profile-grid .cvSection h3,
600
+ .profile-grid .profile__name,
601
+ .profile-grid .friends-pane__header-name {
602
+ font-family: inherit !important;
603
+ }
350
604
 
351
- /* Transparent button override (for solid-ui integration) */
352
- .btn-transparent {
353
- background-color: transparent;
605
+ .profile-section-collapsible--inline-mobile-actions > .profile-section-collapsible__header {
606
+ display: flex;
607
+ align-items: center;
608
+ justify-content: space-between;
609
+ gap: 0.5rem;
610
+ }
611
+
612
+ .profile-section-collapsible--inline-mobile-actions > .profile-section-collapsible__header h2 {
613
+ margin: 0;
614
+ flex: 1 1 auto;
615
+ min-width: 0;
616
+ }
617
+
618
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__actions {
619
+ display: inline-flex;
620
+ flex-direction: row;
621
+ align-items: center;
622
+ gap: 0.25rem;
623
+ margin-top: 0;
624
+ flex: 0 0 auto;
625
+ }
626
+
627
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__edit-button {
628
+ order: 1;
629
+ }
630
+
631
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__edit-button:active,
632
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__edit-button:focus,
633
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__edit-button:focus-visible {
634
+ border: none !important;
635
+ outline: none !important;
636
+ box-shadow: none !important;
637
+ background: transparent !important;
638
+ }
639
+
640
+ .profile-section-collapsible--inline-mobile-actions .profile-section-collapsible__actions > button.inline-flex-row {
641
+ order: 2;
642
+ }
643
+
644
+ .profile__section-header h2,
645
+ .profile__section-header h3,
646
+ .profile__section-header h4 {
647
+ font-size: var(--font-size-lg, 1.125rem) !important;
648
+ line-height: 1.2 !important;
649
+ }
650
+
651
+ .profile-grid .profile__empty-state-content > h2,
652
+ .profile-grid .cvSection h3 {
653
+ font-size: var(--font-size-lg, 1.125rem) !important;
654
+ line-height: 1.2 !important;
655
+ }
656
+
657
+ .profile-grid .profile__name,
658
+ .profile-grid .friends-pane__header-name {
659
+ font-size: 1.5rem !important;
660
+ line-height: 1.15 !important;
661
+ }
662
+
663
+ .profile-grid .profile__pronouns,
664
+ .profile-grid .friends-pane__header-pronouns,
665
+ .profile-grid .friends-pane__friends-pronouns {
666
+ font-family: inherit !important;
667
+ font-size: 0.6875rem !important;
668
+ line-height: 1.1 !important;
669
+ }
670
+
671
+ .profile-section-collapsible[data-expanded="false"] .profile-section-collapsible__content {
672
+ display: none;
673
+ }
674
+
675
+ .profile-section-collapsible__actions.flex-column {
676
+ align-items: flex-end;
677
+ gap: 0.25rem;
678
+ }
679
+
680
+ .profile__section--empty .profile-section-collapsible__actions > button.inline-flex-row {
681
+ order: 1;
682
+ }
683
+
684
+ .profile__section--empty .profile-section-collapsible__actions > .profile-section-collapsible__edit-button {
685
+ order: 2;
686
+ }
687
+
688
+ .profile-section-collapsible[data-expanded="true"] .profile-section-collapsible__chevron {
689
+ transform: rotate(180deg);
690
+ }
691
+
692
+ .profile-section-collapsible__edit-label {
693
+ display: none !important;
694
+ }
695
+
696
+ .profile-section-collapsible__edit-icon {
697
+ display: inline;
698
+ }
699
+
700
+ .profile__section--empty .profile-section-collapsible__edit-label {
701
+ display: none !important;
702
+ }
703
+
704
+ .profile__section--empty .profile-section-collapsible__edit-icon {
705
+ display: inline !important;
706
+ }
707
+
708
+ .profile-section-collapsible .profile-section-collapsible__edit-button {
709
+ display: none !important;
710
+ order: 2;
711
+ }
712
+
713
+ .profile-section-collapsible[data-expanded="true"] .profile-section-collapsible__edit-button {
714
+ display: inline-flex !important;
715
+ }
716
+
717
+ .profile-section-collapsible__actions > button.inline-flex-row {
718
+ display: inline-flex !important;
719
+ align-items: center;
720
+ justify-content: center;
721
+ }
722
+
723
+ .profile-section-collapsible__edit-icon--add svg path {
724
+ fill: #1E2939 !important;
725
+ stroke: #1E2939 !important;
726
+ }
727
+
728
+ .profile-section-collapsible__edit-icon--projects svg path {
729
+ stroke-width: 1.714px !important;
730
+ stroke: var(--gray-800, #1E2939) !important;
731
+ fill: none !important;
732
+ }
354
733
  }
355
734
 
356
- .btn-transparent:hover {
357
- background-color: transparent;
735
+ /* Zebra Striping - used by FriendList, StuffCard tables */
736
+ .zebra-stripe tr:nth-child(even),
737
+ .zebra-stripe > *:nth-child(even) {
738
+ background-color: rgba(0, 0, 0, 0.02);
358
739
  }
740
+