From 59d4e89bf6a884122400a4ffdec9b73696384f4d Mon Sep 17 00:00:00 2001 From: kkkky123 Date: Tue, 16 Jun 2026 18:00:08 +0800 Subject: [PATCH] docs: add career page --- docs/docusaurus.config.js | 11 +- docs/i18n/zh-Hans/code.json | 5 +- .../docusaurus-theme-classic/footer.json | 4 + .../docusaurus-theme-classic/navbar.json | 4 + docs/src/components/HomePage/index.js | 7 +- docs/src/pages/careers/index.js | 377 ++++++++++++++++ docs/src/pages/careers/index.module.css | 402 ++++++++++++++++++ 7 files changed, 807 insertions(+), 3 deletions(-) create mode 100644 docs/src/pages/careers/index.js create mode 100644 docs/src/pages/careers/index.module.css diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index b57114a0ae..0419112d51 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -199,6 +199,11 @@ const config = { type: 'docsVersionDropdown', position: "right", }, + { + to: '/careers', + label: 'Join Us', + position: 'right', + }, { type: 'localeDropdown', position: 'right', @@ -234,6 +239,10 @@ const config = { { title: 'More', items: [ + { + label: 'Join Us', + to: '/careers', + }, { label: 'GitHub', href: 'https://github.com/alibaba/ROCK', @@ -250,4 +259,4 @@ const config = { }), }; -export default config; \ No newline at end of file +export default config; diff --git a/docs/i18n/zh-Hans/code.json b/docs/i18n/zh-Hans/code.json index 03099ac158..e8c0236431 100644 --- a/docs/i18n/zh-Hans/code.json +++ b/docs/i18n/zh-Hans/code.json @@ -463,10 +463,13 @@ "Follow us on X": { "message": "关注我们的 X 账号" }, + "Join Us": { + "message": "加入我们" + }, "Home": { "message": "首页" }, "Docs": { "message": "文档" } -} \ No newline at end of file +} diff --git a/docs/i18n/zh-Hans/docusaurus-theme-classic/footer.json b/docs/i18n/zh-Hans/docusaurus-theme-classic/footer.json index 50fa8e2150..8e1b13008b 100644 --- a/docs/i18n/zh-Hans/docusaurus-theme-classic/footer.json +++ b/docs/i18n/zh-Hans/docusaurus-theme-classic/footer.json @@ -19,6 +19,10 @@ "message": "GitHub", "description": "The label of footer link with label=GitHub linking to https://github.com/alibaba/ROCK" }, + "link.item.label.Join Us": { + "message": "加入我们", + "description": "The label of footer link with label=Join Us linking to /careers" + }, "copyright": { "message": "Copyright © 2025 Alibaba.", "description": "The footer copyright" diff --git a/docs/i18n/zh-Hans/docusaurus-theme-classic/navbar.json b/docs/i18n/zh-Hans/docusaurus-theme-classic/navbar.json index 8ace027fe7..c69933467d 100644 --- a/docs/i18n/zh-Hans/docusaurus-theme-classic/navbar.json +++ b/docs/i18n/zh-Hans/docusaurus-theme-classic/navbar.json @@ -11,6 +11,10 @@ "message": "文档", "description": "Navbar item with label Docs" }, + "item.label.Join Us": { + "message": "加入我们", + "description": "Navbar item with label Join Us" + }, "item.label.DeepWiki": { "message": "DeepWiki", "description": "Navbar item with label DeepWiki" diff --git a/docs/src/components/HomePage/index.js b/docs/src/components/HomePage/index.js index 780e24f950..6efc694cf8 100644 --- a/docs/src/components/HomePage/index.js +++ b/docs/src/components/HomePage/index.js @@ -1,6 +1,6 @@ import React, { useState, useEffect, useRef } from 'react'; import { Button, Image, Modal, ConfigProvider, theme } from 'antd'; -import { GithubOutlined, WechatOutlined, XOutlined } from '@ant-design/icons'; +import { GithubOutlined, UsergroupAddOutlined, WechatOutlined, XOutlined } from '@ant-design/icons'; import clsx from 'clsx'; import dayjs from 'dayjs'; import CountUp from 'react-countup'; @@ -441,6 +441,11 @@ export default ({ currentLocale }) => { Follow us on X + diff --git a/docs/src/pages/careers/index.js b/docs/src/pages/careers/index.js new file mode 100644 index 0000000000..34c7953763 --- /dev/null +++ b/docs/src/pages/careers/index.js @@ -0,0 +1,377 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; + +import styles from './index.module.css'; + +const currentRoleLinks = { + '智能引擎-大模型训练基础架构研发工程师/高级专家-AI Infra': + 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=1038409&shareCode=tGPVe1DNf9wWpBko553DpI2T4ahZiLrF_NJ7Z_hxUZA%3D', + '智能引擎-PostTrain框架研发工程师-AI Infra': + 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=7000016304&shareCode=tGPVe1DNf9wWpBko553DpJi3TFsCjh4syQbtlZp2ujn1yKstq7Sb04s0EC1mY7nf', + '智能引擎-大模型平台研发工程师-强化学习环境': + 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=100006780014&shareCode=tGPVe1DNf9wWpBko553DpJ3MpTthGYz2ZWV1vShHgx5LHcAG3PQ6rOPZqoRgRIHS', + '智能引擎-多模态大模型推理系统工程师/专家': + 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=100008580001&shareCode=tGPVe1DNf9wWpBko553DpPENMYSNUyq0L83cQSorzKz4ErFkTMgXh2GL08llVATX', + '智能引擎-高级引擎研发工程师': + 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=100008580002&shareCode=tGPVe1DNf9wWpBko553DpPENMYSNUyq0L83cQSorzKz%2F_VZfQZv3vM5M5gH1pG4K', + '智能引擎算法平台-训练系统优化高级工程师/专家': + 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=100008380018&shareCode=tGPVe1DNf9wWpBko553DpKiiMXauM8eAqNmmf_E5AzytA5zLiSVCl54eJZ4QmnGA', + '智能引擎-机器学习系统工程师': + 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=100008460012&shareCode=tGPVe1DNf9wWpBko553DpNTPm%2Fiu5lvdKCHPRUEo1fUXrexro24t6i77UdIPkYZ2', + '智能引擎-大模型平台研发工程师-Agent Infra': + 'https://talent-holding.alibaba.com/off-campus/position-detail?lang=zh&positionId=100018640014&spm=a1z8x.8270853.0.0.454b6c5ck9LKl0', +}; + +const roles = [ + { + title: '智能引擎-大模型训练基础架构研发工程师/高级专家-AI Infra', + location: '北京 · 杭州', + }, + { + title: '智能引擎-PostTrain框架研发工程师-AI Infra', + location: '北京 · 杭州', + }, + { + title: '智能引擎-大模型平台研发工程师-强化学习环境', + location: '北京 · 杭州', + }, + { + title: '智能引擎-多模态大模型推理系统工程师/专家', + location: '北京 · 杭州', + }, + { + title: '智能引擎-高级搜索平台研发工程师', + location: '杭州', + href: 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=100014500002', + }, + { + title: '智能引擎-高级引擎研发工程师', + location: '杭州', + }, + { + title: '智能引擎-数据库管控开发工程师', + location: '杭州', + href: 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=100010320009', + }, + { + title: '智能引擎-项目管理专家-AI项目', + location: '杭州', + href: 'https://talent-holding.alibaba.com/off-campus/position-detail?positionId=100011360005', + }, + { + title: '智能引擎算法平台-训练系统优化高级工程师/专家', + location: '北京 · 杭州', + }, + { + title: '智能引擎-机器学习系统工程师', + location: '北京 · 杭州', + }, + { + title: '智能引擎-大模型平台研发工程师-Agent Infra', + location: '北京 · 杭州', + }, +].map((role) => ({ + ...role, + href: role.href || currentRoleLinks[role.title], +})); + +const highlights = [ + { + zhTitle: '大规模 Agent 训练环境', + enTitle: 'Large-scale Agent Training Environments', + zhDesc: + '面向后训练、评测和数据生产场景,构建大规模智能体训练环境框架 ROCK,支撑强化学习环境的开发、部署和管理。', + enDesc: + 'Build ROCK, a large-scale agent training environment framework for post-training, evaluation, and data production, covering reinforcement learning environment development, deployment, and management.', + }, + { + zhTitle: '大模型基础工程平台', + enTitle: 'Large Model Engineering Platform', + zhDesc: + '构建阿里集团大语言模型和多模态模型的基础工程平台,支撑 HappyHorse、HappyOyster 系列模型的训练、评测、预测和应用开发链路。', + enDesc: + 'Build foundational engineering platforms for Alibaba Group LLMs and multimodal models, supporting training, evaluation, prediction, and application development for the HappyHorse and HappyOyster model families.', + }, + { + zhTitle: '多模态理解与生成推理', + enTitle: 'Multimodal Understanding and Generation Inference', + zhDesc: + '围绕 VL、Omni、DiT、Diffusion Model 和 AR 架构,建设从底层算子到推理服务调度的全栈优化体系,在精度、性能和成本之间取得最佳平衡。', + enDesc: + 'Optimize the full stack for VL, Omni, DiT, Diffusion Model, and AR architectures, from low-level kernels to inference service scheduling, balancing model quality, performance, and cost.', + }, + { + zhTitle: 'HappyHorse 推理工程落地', + enTitle: 'HappyHorse Inference Engineering', + zhDesc: + '负责行业顶尖多模态理解和生成模型在 AI 创新应用场景的推理落地,覆盖推理架构设计、全链路服务编排和性能极致优化。', + enDesc: + 'Deliver production inference for leading multimodal understanding and generation models in AI applications, spanning inference architecture, end-to-end service orchestration, and performance optimization.', + }, +]; + +const papers = [ + { + title: 'KDD 2026 UniRank: End-to-End Domain-Specific Reranking of Hybrid text-image Candidates', + href: 'https://arxiv.org/abs/2603.29897', + }, + { + title: 'ICML 2026 Factored Causal Representation Learning for Robust Reward Modeling in RLHF', + href: 'https://arxiv.org/abs/2601.21350', + }, +]; + +const projects = [ + { + name: 'Megatron-LLaMA', + tags: ['LLM', 'PyTorch'], + href: 'https://github.com/alibaba/Megatron-LLaMA', + zhDesc: '基于 Megatron 的大语言模型开源训练框架,支持高效分布式 LLM 训练。', + enDesc: 'An open-source LLM training framework based on Megatron, supporting efficient distributed training.', + }, + { + name: 'X-DeepLearning (XDL)', + tags: ['Sparse', 'RecSys'], + href: 'https://github.com/alibaba/x-deeplearning', + zhDesc: '阿里巴巴开源的稀疏模型训练框架,支持大规模推荐和广告场景。', + enDesc: "Alibaba's open-source sparse model training framework for large-scale recommendation and advertising.", + }, + { + name: 'ROLL', + tags: ['RL', 'Distributed'], + href: 'https://github.com/alibaba/ROLL', + zhDesc: '强化学习开源训练框架,支持大规模 RL Post-Training 的高效分布式执行。', + enDesc: 'An open-source RL training framework for efficient distributed RL post-training at scale.', + }, + { + name: 'ROCK', + tags: ['RL Env', 'Agent'], + href: 'https://github.com/alibaba/ROCK', + zhDesc: '开源的强化学习环境开发框架,旨在简化强化学习环境的开发、部署和管理流程。', + enDesc: + 'An open-source reinforcement learning environment development framework that simplifies environment development, deployment, and management.', + }, + { + name: 'Euler', + tags: ['GNN', 'Graph'], + href: 'https://github.com/alibaba/euler', + zhDesc: '阿里巴巴开源的分布式图学习引擎,支持大规模图神经网络训练。', + enDesc: "Alibaba's open-source distributed graph learning engine for large-scale GNN training.", + }, + { + name: 'RecIS', + tags: ['RecSys', 'Training'], + href: 'https://github.com/alibaba/RecIS', + zhDesc: '预估大模型训练框架,面向推荐和广告场景的工业级大模型训练系统。', + enDesc: 'A large model training framework for recommendation and advertising at industrial scale.', + }, +]; + +const copy = { + zh: { + pageTitle: '加入 ROCK 与 AI Infra 团队', + pageDescription: '阿里控股智能引擎 AI Infra 团队招聘信息。', + eyebrow: 'Alibaba Intelligent Engine · AI Infra', + heroTitle: '加入 ROCK 与智能引擎 AI Infra 团队', + heroDesc: [ + '智能引擎部门隶属于阿里巴巴控股集团平台技术,主要负责阿里集团内部搜推广工程系统和 AI 相关工程系统的开发和能力建设,同时 AIGC 的蓬勃发展为智能引擎注入了新的活力:如何解决大模型的训推等性能和成本问题,如何优化大模型研发范式、应对大模型在线服务带来的新挑战,都是我们在 AI 时代下的新命题。', + '我们致力于为集团用户提供从数据开始,到训练、评测、预测、应用开发、解决方案的完整工程体系。团队和 Happy 家族模型算法团队密切协同,共同研发多模态生成大模型,承担阿里集团多模态生成模型研发的重任。', + '我们拥有浓厚的技术氛围,本着开源共享的精神贡献了 ROLL、Megatron-LLaMA、XDL、Euler 等众多优秀的开源产品,坚持以开放的姿态与行业共享成果、共赢共进。', + ], + introTitle: '我们是谁', + introDesc: + '搜索&管控平台负责构建阿里集团大语言模型和多模态模型的基础工程平台,团队致力于为大语言模型提供大规模 Agent 训练环境,也为 HappyHorse、HappyOyster 系列模型提供极致的推理服务能力。', + highlightsTitle: '方向亮点', + rolesTitle: '开放岗位', + rolesDesc: '点击岗位名称或投递按钮进入阿里人才页面。', + apply: '投递', + locationLabel: '地点', + papersTitle: '关键成果精选', + papersDesc: + '我们是阿里 HappyHorse 推理工程团队,负责行业顶尖的多模态理解和生成模型在 AI 创新应用场景的推理落地,涵盖从推理架构设计、全链路服务编排到性能极致优化的全栈技术挑战。', + openSourceTitle: '开源训练框架与系统', + openSourceEyebrow: 'Open Source', + joinTitle: '如何加入', + joinSteps: [ + '选择上方岗位,进入阿里控股招聘页面登录后投递。', + '也可以一键投递到邮箱 lxm02049624@alibaba-inc.com,并添加 HR 微信咨询:19952378952。', + '联系发布岗位信息的阿里同学帮忙内推。', + ], + }, + en: { + pageTitle: 'Join ROCK and the AI Infra Team', + pageDescription: 'Open roles for Alibaba Intelligent Engine AI Infra team.', + eyebrow: 'Alibaba Intelligent Engine · AI Infra', + heroTitle: 'Join ROCK and the Intelligent Engine AI Infra Team', + heroDesc: [ + "The Intelligent Engine department belongs to Alibaba Holding Group's Platform Technology organization. It builds internal search, recommendation, advertising, and AI engineering systems. The rapid growth of AIGC brings new challenges: improving large-model training and inference performance and cost, reshaping model development workflows, and addressing new demands from online model services.", + 'We provide a complete engineering system for group users, spanning data, training, evaluation, prediction, application development, and solutions. Working closely with the Happy family model teams, we co-develop multimodal generative large models and take on core responsibilities for Alibaba Group multimodal generation model development.', + 'We value a strong technical culture and open sharing. The team has contributed open-source projects including ROLL, Megatron-LLaMA, XDL, and Euler, and continues to share outcomes with the broader community.', + ], + introTitle: 'Who We Are', + introDesc: + 'The Search & Governance Platform builds foundational engineering platforms for Alibaba Group LLMs and multimodal models. The team provides large-scale agent training environments for LLMs and high-performance inference services for the HappyHorse and HappyOyster model families.', + highlightsTitle: 'Focus Areas', + rolesTitle: 'Open Roles', + rolesDesc: + 'Select a role or apply button to open the Alibaba Talent page.', + apply: 'Apply', + locationLabel: 'Location', + papersTitle: 'Selected Results', + papersDesc: + 'As the Alibaba HappyHorse inference engineering team, we bring leading multimodal understanding and generation models into AI applications, covering inference architecture design, end-to-end service orchestration, and deep performance optimization.', + openSourceTitle: 'Open Source Frameworks and Systems', + openSourceEyebrow: 'Open Source', + joinTitle: 'How to Join', + joinSteps: [ + 'Choose a role above and submit your application through Alibaba Talent.', + 'You can also send your resume to lxm02049624@alibaba-inc.com and contact HR on WeChat: 19952378952.', + 'Ask an Alibaba colleague who shared the role to refer you internally.', + ], + }, +}; + +function ExternalRoleLink({ role, children, className }) { + return ( + + {children} + + ); +} + +export default function Careers() { + const { i18n } = useDocusaurusContext(); + const isChinese = i18n.currentLocale !== 'en'; + const text = isChinese ? copy.zh : copy.en; + const scrollToRoles = () => { + document.getElementById('open-roles')?.scrollIntoView({ behavior: 'smooth', block: 'start' }); + }; + + return ( + +
+
+
+
+
{text.eyebrow}
+

{text.heroTitle}

+
+ {text.heroDesc.map((paragraph) => ( +

{paragraph}

+ ))} +
+
+ +
+
+
+
+ +
+
+
+

{text.introTitle}

+

{text.highlightsTitle}

+
+

{text.introDesc}

+
+ {highlights.map((item) => ( +
+

{isChinese ? item.zhTitle : item.enTitle}

+

{isChinese ? item.zhDesc : item.enDesc}

+
+ ))} +
+
+ +
+
+

Selected Results

+

{text.papersTitle}

+
+

{text.papersDesc}

+
+ {papers.map((paper) => ( + + ))} +
+
+ +
+
+

{text.openSourceEyebrow}

+

{text.openSourceTitle}

+
+
+ {projects.map((project) => ( +
+

{project.name}

+

{isChinese ? project.zhDesc : project.enDesc}

+
+
+ {project.tags.map((tag) => ( + + {tag} + + ))} +
+ + GitHub + +
+
+ ))} +
+
+ +
+
+

Open Roles

+

{text.rolesTitle}

+
+

{text.rolesDesc}

+
+ {roles.map((role) => ( +
+
+ + {role.title} + +
+ + {text.locationLabel}: {role.location} + +
+
+ + {text.apply} + +
+ ))} +
+
+ +
+
+

Application

+

{text.joinTitle}

+
+
    + {text.joinSteps.map((step) => ( +
  1. {step}
  2. + ))} +
+
+
+
+
+ ); +} diff --git a/docs/src/pages/careers/index.module.css b/docs/src/pages/careers/index.module.css new file mode 100644 index 0000000000..b60a151994 --- /dev/null +++ b/docs/src/pages/careers/index.module.css @@ -0,0 +1,402 @@ +.page { + min-height: 100vh; + background: #000; + color: #fff; +} + +.hero { + background: + radial-gradient(70% 70% at 12% 0%, rgba(87, 93, 244, 0.3), transparent 62%), + linear-gradient(180deg, rgba(61, 93, 255, 0.14), transparent 72%), + #000; +} + +.heroContainer { + padding-top: 80px; + padding-bottom: 48px; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); +} + +.heroInner { + width: 100%; +} + +.eyebrow, +.sectionHeader p { + margin: 0; + color: #A2B1F2; + font-size: 13px; + font-weight: 700; + letter-spacing: 0.08em; + line-height: 1.5; + text-transform: uppercase; +} + +.hero h1 { + max-width: 940px; + margin: 14px 0 0; + color: #fff; + font-size: 48px; + font-weight: 700; + line-height: 1.16; +} + +.heroDesc { + width: 100%; + margin-top: 24px; +} + +.heroDesc p { + width: 100%; + margin: 0; + color: #9E9E9E; + font-size: 18px; + line-height: 1.78; +} + +.heroDesc p + p { + margin-top: 14px; +} + +.heroActions { + display: flex; + flex-wrap: wrap; + gap: 12px; + margin-top: 30px; +} + +.heroActions button { + cursor: pointer; + min-height: 44px; + padding: 10px 20px; + border: 5px solid #3c42a1; + border-radius: 20px; + background: #575DF4; + color: #fff; + font-weight: 700; +} + +.section { + padding: 56px 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); +} + +.sectionHeader h2 { + margin: 8px 0 0; + color: #fff; + font-size: 32px; + font-weight: 700; + line-height: 1.25; +} + +.lead { + width: 100%; + margin: 18px 0 0; + color: #9E9E9E; + font-size: 16px; + line-height: 1.76; +} + +.highlightGrid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + margin-top: 28px; +} + +.highlightCard, +.paperCard, +.projectCard { + position: relative; + padding: 22px; + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 24px; + background: linear-gradient(46deg, rgba(61, 93, 255, 0.17) 2%, rgba(61, 93, 255, 0.05) 48%); +} + +.highlightCard::before, +.paperCard::before, +.projectCard::before { + content: ''; + position: absolute; + inset: -1px; + border-radius: 25px; + padding: 1px; + background: radial-gradient(80% 80% at 100% 100%, #575DF4 0%, rgba(87, 93, 244, 0.45) 42%, rgba(87, 93, 244, 0.16) 70%, rgba(87, 93, 244, 0) 100%); + -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); + -webkit-mask-composite: xor; + mask-composite: exclude; + pointer-events: none; +} + +.highlightCard h3, +.paperCard h3, +.projectCard h3 { + position: relative; + margin: 0; + color: #fff; + font-size: 18px; + font-weight: 700; + line-height: 1.35; +} + +.highlightCard p, +.projectCard p { + position: relative; + margin: 12px 0 0; + color: #9E9E9E; + font-size: 15px; + line-height: 1.68; +} + +.projectGrid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + margin-top: 28px; +} + +.projectCard { + display: flex; + min-height: 198px; + flex-direction: column; +} + +.projectCard p { + flex: 1; +} + +.projectFooter { + display: flex; + align-items: center; + justify-content: space-between; + gap: 18px; + margin-top: 18px; +} + +.projectTags { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.projectTag { + display: inline-flex; + align-items: center; + min-height: 24px; + padding: 3px 8px; + border-radius: 4px; + background: rgba(87, 93, 244, 0.18); + color: #A2B1F2; + font-size: 12px; + font-weight: 700; + line-height: 1.3; +} + +.projectFooter a { + color: #fff; + font-size: 14px; + font-weight: 700; + text-decoration: none; + white-space: nowrap; +} + +.projectFooter a:hover { + color: #A2B1F2; + text-decoration: underline; + text-underline-offset: 4px; +} + +.roleList { + margin-top: 28px; + border-top: 1px solid rgba(255, 255, 255, 0.2); +} + +.roleRow { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 24px; + align-items: center; + padding: 20px 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); +} + +.roleMain { + min-width: 0; +} + +.roleTitle { + display: inline-block; + color: #fff; + font-size: 17px; + font-weight: 650; + line-height: 1.5; + text-decoration: none; +} + +.roleTitle:hover { + color: #A2B1F2; + text-decoration: underline; + text-underline-offset: 4px; +} + +.roleMeta { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-top: 8px; +} + +.roleMeta span { + display: inline-flex; + align-items: center; + min-height: 24px; + padding: 3px 8px; + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 4px; + color: #9E9E9E; + font-size: 12px; + line-height: 1.4; +} + +.roleAction { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 76px; + min-height: 36px; + padding: 7px 16px; + border: 1px solid rgba(255, 255, 255, 0.15); + border-radius: 20px; + color: #fff; + background: transparent; + font-size: 14px; + font-weight: 700; + line-height: 1.3; + text-decoration: none; + white-space: nowrap; +} + +.roleAction:hover { + border-color: #575DF4; + background: #575DF4; + color: #fff; + text-decoration: none; +} + +.rolesSection { + border-bottom: 0; +} + +.paperGrid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + margin-top: 28px; +} + +.paperCard { + display: flex; + min-height: 156px; + flex-direction: column; +} + +.paperCard h3 { + flex: 1; + font-size: 16px; + line-height: 1.48; +} + +.paperCard a { + position: relative; + display: inline-block; + max-width: 100%; + margin-top: 12px; + overflow-wrap: anywhere; + font-size: 14px; + line-height: 1.55; + color: #A2B1F2; +} + +.joinSection { + padding: 56px 0 80px; +} + +.joinList { + width: 100%; + margin: 18px 0 0; + padding-left: 22px; + color: #9E9E9E; +} + +.joinList li { + padding-left: 6px; + font-size: 16px; + line-height: 1.82; +} + +@media (max-width: 996px) { + .heroContainer { + padding-top: 64px; + padding-bottom: 40px; + } + + .hero h1 { + font-size: 38px; + } + + .highlightGrid { + grid-template-columns: 1fr; + } +} + +@media (max-width: 768px) { + .hero h1 { + font-size: 32px; + } + + .heroDesc p, + .lead { + font-size: 15px; + } + + .heroActions { + flex-direction: column; + align-items: stretch; + } + + .heroActions a, + .heroActions button { + white-space: normal; + } + + .section { + padding: 44px 0; + } + + .sectionHeader h2 { + font-size: 26px; + } + + .roleRow { + grid-template-columns: 1fr; + gap: 14px; + } + + .roleAction { + width: fit-content; + } + + .paperGrid { + grid-template-columns: 1fr; + } + + .projectGrid { + grid-template-columns: 1fr; + } + + .projectCard { + min-height: auto; + } +}