diff --git a/.env b/.env new file mode 100644 index 0000000..b7a35db --- /dev/null +++ b/.env @@ -0,0 +1,7 @@ +HOME_SHEET=https://docs.google.com/spreadsheets/d/1CPDVN579fjmiVVpo1qVcCeDRUN1BEw_P8n_X12rXVBY/export?format=tsv&gid=1315929787 +PEOPLE_SHEET=https://docs.google.com/spreadsheets/d/1CPDVN579fjmiVVpo1qVcCeDRUN1BEw_P8n_X12rXVBY/export?format=tsv&gid=0 +RESEARCH_SHEET=https://docs.google.com/spreadsheets/d/1CPDVN579fjmiVVpo1qVcCeDRUN1BEw_P8n_X12rXVBY/export?format=tsv&gid=394622197 +PUBLICATIONS_SHEET=https://docs.google.com/spreadsheets/d/1CPDVN579fjmiVVpo1qVcCeDRUN1BEw_P8n_X12rXVBY/export?format=tsv&gid=698372256 +VIDEOS_SHEET=https://docs.google.com/spreadsheets/d/1CPDVN579fjmiVVpo1qVcCeDRUN1BEw_P8n_X12rXVBY/export?format=tsv&gid=889428793 +NEWS_SHEET=https://docs.google.com/spreadsheets/d/1CPDVN579fjmiVVpo1qVcCeDRUN1BEw_P8n_X12rXVBY/export?format=tsv&gid=1018366792 +GDRIVE_UA=aria-gdrive-downloader/1.0 \ No newline at end of file diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 0000000..667aff3 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,57 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ['main'] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets the GITHUB_TOKEN permissions to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: 'pages' + cancel-in-progress: true + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Load environment variables from .env file + run: cat .env >> $GITHUB_ENV + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: 'npm' + - name: Install dependencies + run: npm ci + - name: Fetch data + run: npm run fetch-sheet + - name: Download images + run: npm run download-images + - name: Build + run: npm run build + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + # Upload dist folder + path: './dist' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..54f07af --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 2740991..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/lab-website-host.iml b/.idea/lab-website-host.iml deleted file mode 100644 index d0876a7..0000000 --- a/.idea/lab-website-host.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 9de2865..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index d4f3c79..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/404.html b/404.html deleted file mode 100644 index 086a5c9..0000000 --- a/404.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -permalink: /404.html -layout: default ---- - - - -
-

404

- -

Page not found :(

-

The requested page could not be found.

-
diff --git a/CNAME b/CNAME deleted file mode 100644 index f54a0bb..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -aria-lab.cs.utah.edu \ No newline at end of file diff --git a/Gemfile b/Gemfile deleted file mode 100644 index f01211b..0000000 --- a/Gemfile +++ /dev/null @@ -1,33 +0,0 @@ -source "https://rubygems.org" -# Hello! This is where you manage which Jekyll version is used to run. -# When you want to use a different version, change it below, save the -# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: -# -# bundle exec jekyll serve -# -# This will help ensure the proper Jekyll version is running. -# Happy Jekylling! -gem "jekyll", "~> 4.3.3" -# This is the default theme for new Jekyll sites. You may change this to anything you like. -gem "minima", "~> 2.5" -# If you want to use GitHub Pages, remove the "gem "jekyll"" above and -# uncomment the line below. To upgrade, run `bundle update github-pages`. -# gem "github-pages", group: :jekyll_plugins -# If you have any plugins, put them here! -group :jekyll_plugins do - gem "jekyll-feed", "~> 0.12" -end - -# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem -# and associated library. -platforms :mingw, :x64_mingw, :mswin, :jruby do - gem "tzinfo", ">= 1", "< 3" - gem "tzinfo-data" -end - -# Performance-booster for watching directories on Windows -gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] - -# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem -# do not have a Java counterpart. -gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby] diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 83a599b..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,100 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) - colorator (1.1.0) - concurrent-ruby (1.3.3) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) - eventmachine (1.2.7) - ffi (1.17.0) - ffi (1.17.0-arm64-darwin) - ffi (1.17.0-x86_64-darwin) - forwardable-extended (2.6.0) - google-protobuf (3.25.3) - google-protobuf (3.25.3-arm64-darwin) - google-protobuf (3.25.3-x86_64-darwin) - google-protobuf (3.25.3-x86_64-linux) - http_parser.rb (0.8.0) - i18n (1.14.5) - concurrent-ruby (~> 1.0) - jekyll (4.3.3) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 1.0) - jekyll-sass-converter (>= 2.0, < 4.0) - jekyll-watch (~> 2.0) - kramdown (~> 2.3, >= 2.3.1) - kramdown-parser-gfm (~> 1.0) - liquid (~> 4.0) - mercenary (>= 0.3.6, < 0.5) - pathutil (~> 0.9) - rouge (>= 3.0, < 5.0) - safe_yaml (~> 1.0) - terminal-table (>= 1.8, < 4.0) - webrick (~> 1.7) - jekyll-feed (0.17.0) - jekyll (>= 3.7, < 5.0) - jekyll-sass-converter (3.0.0) - sass-embedded (~> 1.54) - jekyll-seo-tag (2.8.0) - jekyll (>= 3.8, < 5.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - kramdown (2.4.0) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.4) - listen (3.9.0) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.4.0) - minima (2.5.1) - jekyll (>= 3.5, < 5.0) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (6.0.0) - rake (13.2.1) - rb-fsevent (0.11.2) - rb-inotify (0.11.1) - ffi (~> 1.0) - rexml (3.3.1) - strscan - rouge (4.3.0) - safe_yaml (1.0.5) - sass-embedded (1.69.5) - google-protobuf (~> 3.23) - rake (>= 13.0.0) - sass-embedded (1.69.5-arm64-darwin) - google-protobuf (~> 3.23) - sass-embedded (1.69.5-x86_64-darwin) - google-protobuf (~> 3.23) - strscan (3.1.0) - terminal-table (3.0.2) - unicode-display_width (>= 1.1.1, < 3) - unicode-display_width (2.5.0) - webrick (1.8.1) - -PLATFORMS - arm64-darwin - ruby - x86_64-darwin - x86_64-linux - -DEPENDENCIES - http_parser.rb (~> 0.6.0) - jekyll (~> 4.3.3) - jekyll-feed (~> 0.12) - minima (~> 2.5) - tzinfo (>= 1, < 3) - tzinfo-data - wdm (~> 0.1.1) - -BUNDLED WITH - 2.5.14 diff --git a/People/Lab Website Information - {Akansha Kalra}/.~lock.Lab Website Information-Akansha.docx# b/People/Lab Website Information - {Akansha Kalra}/.~lock.Lab Website Information-Akansha.docx# deleted file mode 100644 index d4a9724..0000000 --- a/People/Lab Website Information - {Akansha Kalra}/.~lock.Lab Website Information-Akansha.docx# +++ /dev/null @@ -1 +0,0 @@ -,atharv,brown-research-lab-g,19.12.2024 17:24,file:///home/atharv/.config/libreoffice/4; \ No newline at end of file diff --git a/People/Lab Website Information - {Akansha Kalra}/Lab Website Information-Akansha.docx b/People/Lab Website Information - {Akansha Kalra}/Lab Website Information-Akansha.docx deleted file mode 100644 index a68501d..0000000 Binary files a/People/Lab Website Information - {Akansha Kalra}/Lab Website Information-Akansha.docx and /dev/null differ diff --git a/People/Lab Website Information - {Ali Larian}/Lab Website Information - {Ali Larian}.docx b/People/Lab Website Information - {Ali Larian}/Lab Website Information - {Ali Larian}.docx deleted file mode 100644 index b2b7653..0000000 Binary files a/People/Lab Website Information - {Ali Larian}/Lab Website Information - {Ali Larian}.docx and /dev/null differ diff --git a/People/Lab Website Information - {Anda Xie}/Lab Website Information - Anda Xie.docx b/People/Lab Website Information - {Anda Xie}/Lab Website Information - Anda Xie.docx deleted file mode 100644 index 90af993..0000000 Binary files a/People/Lab Website Information - {Anda Xie}/Lab Website Information - Anda Xie.docx and /dev/null differ diff --git a/People/Lab Website Information - {Parth Bhandari}/Lab Website Information - Parth Bhandari.docx b/People/Lab Website Information - {Parth Bhandari}/Lab Website Information - Parth Bhandari.docx deleted file mode 100644 index ec8b112..0000000 Binary files a/People/Lab Website Information - {Parth Bhandari}/Lab Website Information - Parth Bhandari.docx and /dev/null differ diff --git a/People/Lab Website Information - {Seongil Heo}/Lab Website Information - Seongil Heo.docx b/People/Lab Website Information - {Seongil Heo}/Lab Website Information - Seongil Heo.docx deleted file mode 100644 index 7a6cfe5..0000000 Binary files a/People/Lab Website Information - {Seongil Heo}/Lab Website Information - Seongil Heo.docx and /dev/null differ diff --git a/People/Lab Website Information - {Varun Raveendra}/Lab Website Information - Varun Raveendra.docx b/People/Lab Website Information - {Varun Raveendra}/Lab Website Information - Varun Raveendra.docx deleted file mode 100644 index 43980d0..0000000 Binary files a/People/Lab Website Information - {Varun Raveendra}/Lab Website Information - Varun Raveendra.docx and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill0-24.jpg b/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill0-24.jpg deleted file mode 100644 index 146bd99..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill0-24.jpg and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill1-25.jpg b/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill1-25.jpg deleted file mode 100644 index 909297c..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill1-25.jpg and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill2-26.jpg b/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill2-26.jpg deleted file mode 100644 index 317440f..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill2-26.jpg and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill3-27.jpg b/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill3-27.jpg deleted file mode 100644 index 454e84f..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill3-27.jpg and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill4-28.jpg b/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill4-28.jpg deleted file mode 100644 index 2376655..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill4-28.jpg and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill5-29.jpg b/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill5-29.jpg deleted file mode 100644 index c151f1a..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill5-29.jpg and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/bullet_gbutton_gray-30.png b/People/Lab Website Information - {Zifan Wu}/Data/bullet_gbutton_gray-30.png deleted file mode 100644 index 242d214..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/bullet_gbutton_gray-30.png and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/image1-31.png b/People/Lab Website Information - {Zifan Wu}/Data/image1-31.png deleted file mode 100644 index 6c858ec..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/image1-31.png and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/image1-small-32.png b/People/Lab Website Information - {Zifan Wu}/Data/image1-small-32.png deleted file mode 100644 index 7ebb420..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/image1-small-32.png and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/image2-33.png b/People/Lab Website Information - {Zifan Wu}/Data/image2-33.png deleted file mode 100644 index 6460a9b..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/image2-33.png and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Data/image2-small-34.png b/People/Lab Website Information - {Zifan Wu}/Data/image2-small-34.png deleted file mode 100644 index 607c7e0..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Data/image2-small-34.png and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Index/AnnotationAuthorStorage.iwa b/People/Lab Website Information - {Zifan Wu}/Index/AnnotationAuthorStorage.iwa deleted file mode 100644 index 8293b87..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Index/AnnotationAuthorStorage.iwa and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Index/CalculationEngine.iwa b/People/Lab Website Information - {Zifan Wu}/Index/CalculationEngine.iwa deleted file mode 100644 index c3797c3..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Index/CalculationEngine.iwa and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Index/Document.iwa b/People/Lab Website Information - {Zifan Wu}/Index/Document.iwa deleted file mode 100644 index 1f08b65..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Index/Document.iwa and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Index/DocumentMetadata.iwa b/People/Lab Website Information - {Zifan Wu}/Index/DocumentMetadata.iwa deleted file mode 100644 index 7e3940b..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Index/DocumentMetadata.iwa and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Index/DocumentStylesheet.iwa b/People/Lab Website Information - {Zifan Wu}/Index/DocumentStylesheet.iwa deleted file mode 100644 index daa3cad..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Index/DocumentStylesheet.iwa and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Index/Metadata.iwa b/People/Lab Website Information - {Zifan Wu}/Index/Metadata.iwa deleted file mode 100644 index 3e0d6a9..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Index/Metadata.iwa and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Index/ViewState.iwa b/People/Lab Website Information - {Zifan Wu}/Index/ViewState.iwa deleted file mode 100644 index f7e7418..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Index/ViewState.iwa and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/Metadata/BuildVersionHistory.plist b/People/Lab Website Information - {Zifan Wu}/Metadata/BuildVersionHistory.plist deleted file mode 100644 index e134666..0000000 --- a/People/Lab Website Information - {Zifan Wu}/Metadata/BuildVersionHistory.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - docx - M14.1-7040.0.73-4 - - diff --git a/People/Lab Website Information - {Zifan Wu}/Metadata/DocumentIdentifier b/People/Lab Website Information - {Zifan Wu}/Metadata/DocumentIdentifier deleted file mode 100644 index 2a1b683..0000000 --- a/People/Lab Website Information - {Zifan Wu}/Metadata/DocumentIdentifier +++ /dev/null @@ -1 +0,0 @@ -8827AD53-D902-4FC4-A411-542454C1F77A \ No newline at end of file diff --git a/People/Lab Website Information - {Zifan Wu}/Metadata/Properties.plist b/People/Lab Website Information - {Zifan Wu}/Metadata/Properties.plist deleted file mode 100644 index 26d1cbc..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/Metadata/Properties.plist and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/preview-micro.jpg b/People/Lab Website Information - {Zifan Wu}/preview-micro.jpg deleted file mode 100644 index b48ef61..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/preview-micro.jpg and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/preview-web.jpg b/People/Lab Website Information - {Zifan Wu}/preview-web.jpg deleted file mode 100644 index 87e9518..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/preview-web.jpg and /dev/null differ diff --git a/People/Lab Website Information - {Zifan Wu}/preview.jpg b/People/Lab Website Information - {Zifan Wu}/preview.jpg deleted file mode 100644 index fe16c62..0000000 Binary files a/People/Lab Website Information - {Zifan Wu}/preview.jpg and /dev/null differ diff --git a/People/Lab Website Information - {Zohre Karimi}/Lab Website Information - Zohre Karimi.docx b/People/Lab Website Information - {Zohre Karimi}/Lab Website Information - Zohre Karimi.docx deleted file mode 100644 index c7672a0..0000000 Binary files a/People/Lab Website Information - {Zohre Karimi}/Lab Website Information - Zohre Karimi.docx and /dev/null differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..08230d6 --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +# ARIA Lab Website + +Official website of the **ARIA (Align Robust Interactive Autonomy) Lab** +A static frontend web app built using Vite. +- Live Site: https://aria-lab.cs.utah.edu/ + +## Management Guide + +- **Data**: Update the Google Sheet to refresh site data (Google Sheet is configured in `.env`). +- **Deploy**: On each commit, the site is automatically redeployed; alternatively, re-run all jobs for the latest deployment in the Actions tab. + +For more detailed information, please ask to [Seongil Heo](https://github.com/SeongilHeo). + +## Tech Stack + +- **Frontend**: [React](https://react.dev/), [Vite](https://vitejs.dev/), [TailwindCSS](https://tailwindcss.com/) +- **CI/CD**: GitHub Actions (Static build & GitHub Pages deployment) +- **Data Source**: Google Spreadsheet → JSON transformation script + +## Project Structure + +``` +├── .github/workflows/ # GitHub Actions CI/CD workflows +├── README.md # Project documentation +├── index.css # TailwindCSS global styles +├── index.html # HTML entry point for Vite +├── package-lock.json # Auto-generated lockfile for npm dependencies +├── package.json # Project metadata and dependencies +├── vite.config.js # Vite build and server configuration +├── public/ # Static assets served directly +│ ├── 404.html # Custom 404 page for GitHub Pages +│ ├── manifest.json # PWA manifest +│ ├── robots.txt # Web crawler rules +│ └── images # Image folders +│ ├── placeholder.png # Default placeholder image +│ ├── banner/ # Banner images +│ ├── people/ # Member profile images +│ ├── publications/ # Publication figures +│ └── videos/ # Video preview thumbnails +├── scripts # Utility scripts +│ ├── download-images.js # Script to download images from URLs in JSON data +│ └── fetch-sheet.js # Script to fetch and convert Google Sheet to JSON +└── src/ # Source code + ├── App.jsx # App wrapper component + ├── main.jsx # App entry point for rendering + ├── components/ # Reusable UI components + ├── data/ # Preprocessed JSON data files + ├── icons/ # Custom SVG icons + ├── layout/ # Shared layout elements (Header, Footer, etc.) + ├── pages/ # Route-specific page components + └── routes/ # App route definitions +``` + +## Features + +- Responsive layout +- Google Spreadsheet data integration (`npm run fetch-sheet && download-image`) +- GitHub Pages auto-deployment +- Environment variable configuration via `.env` +- Client-side routing with React Router +- Custom 404 handling on GitHub Pages (static-hosting limitation) + +## GitHub Actions Deployment + +The `.github/workflows/deploy.yaml` workflow performs: + +- Reads `.env` upon push to `main` +- Runs `npm run fetch-sheet` to convert spreadsheet to JSON +- Runs `npm run download-images` to download images from Google Drive +- Builds static site via `npm run build` +- Deploys to GitHub Pages + +> Based on [Vite’s static deployment guide](https://vite.dev/guide/static-deploy.html) + +## License + +This project is licensed under the MIT License. diff --git a/_config.yml b/_config.yml deleted file mode 100644 index a5818e7..0000000 --- a/_config.yml +++ /dev/null @@ -1,62 +0,0 @@ -# Welcome to Jekyll! -# -# This config file is meant for settings that affect your whole blog, values -# which you are expected to set up once and rarely edit after that. If you find -# yourself editing this file very often, consider using Jekyll's data files -# feature for the data you need to update frequently. -# -# For technical reasons, this file is *NOT* reloaded automatically when you use -# 'bundle exec jekyll serve'. If you change this file, please restart the server process. -# -# If you need help with YAML syntax, here are some quick references for you: -# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml -# https://learnxinyminutes.com/docs/yaml/ -# -# Site settings -# These are used to personalize your new site. If you look in the HTML files, -# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. -# You can create any custom variable you would like, and they will be accessible -# in the templates via {{ site.myvariable }}. - -title: Align Robust Interactive Autonomy Lab -email: your-email@example.com -description: >- # this means to ignore newlines until "baseurl:" - ARIA Lab at the University of Utah! -baseurl: "" # the subpath of your site, e.g. /blog -url: "" # the base hostname & protocol for your site, e.g. http://example.com -twitter_username: jekyllrb -github_username: jekyll - -# Build settings -theme: minima -markdown: kramdown -highlighter: rogue -plugins: - - jekyll-feed - -header_pages: - - index.md - - people.md - - research.md - - publications.md - - videos.md - -# Exclude from processing. -# The following items will not be processed, by default. -# Any item listed under the `exclude:` key here will be automatically added to -# the internal "default list". -# -# Excluded items can be processed by explicitly listing the directories or -# their entries' file path in the `include:` list. -# -# exclude: -# - .sass-cache/ -# - .jekyll-cache/ -# - gemfiles/ -# - Gemfile -# - Gemfile.lock -# - node_modules/ -# - vendor/bundle/ -# - vendor/cache/ -# - vendor/gems/ -# - vendor/ruby/ diff --git a/_includes/_footer.html b/_includes/_footer.html deleted file mode 100644 index a547ef6..0000000 --- a/_includes/_footer.html +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/_includes/_header.html b/_includes/_header.html deleted file mode 100644 index 5e80fc3..0000000 --- a/_includes/_header.html +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 6408596..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - {{ page.title }} | {{ site.title }} - - - - - - {% include _header.html %} -
- {{ content }} -
- {% include _footer.html %} - - diff --git a/_posts/2024-06-27-welcome-to-jekyll.markdown b/_posts/2024-06-27-welcome-to-jekyll.markdown deleted file mode 100644 index 449f1dc..0000000 --- a/_posts/2024-06-27-welcome-to-jekyll.markdown +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: post -title: "Welcome to Jekyll!" -date: 2024-06-27 06:26:58 -0600 -categories: jekyll update ---- -You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. - -Jekyll requires blog post files to be named according to the following format: - -`YEAR-MONTH-DAY-title.MARKUP` - -Where `YEAR` is a four-digit number, `MONTH` and `DAY` are both two-digit numbers, and `MARKUP` is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works. - -Jekyll also offers powerful support for code snippets: - -{% highlight ruby %} -def print_hi(name) - puts "Hi, #{name}" -end -print_hi('Tom') -#=> prints 'Hi, Tom' to STDOUT. -{% endhighlight %} - -Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk]. - -[jekyll-docs]: https://jekyllrb.com/docs/home -[jekyll-gh]: https://github.com/jekyll/jekyll -[jekyll-talk]: https://talk.jekyllrb.com/ diff --git a/_site/404.html b/_site/404.html deleted file mode 100644 index ad55bf3..0000000 --- a/_site/404.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - | Align Robust Interactive Autonomy Lab - - - - - - - -
- - -
-

404

- -

Page not found :(

-

The requested page could not be found.

-
- -
- - - diff --git a/_site/People/Lab Website Information - {Eric Brewer}/Eric Brewer.jpg b/_site/People/Lab Website Information - {Eric Brewer}/Eric Brewer.jpg deleted file mode 100644 index 2028e54..0000000 Binary files a/_site/People/Lab Website Information - {Eric Brewer}/Eric Brewer.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill0-24.jpg b/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill0-24.jpg deleted file mode 100644 index 146bd99..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill0-24.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill1-25.jpg b/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill1-25.jpg deleted file mode 100644 index 909297c..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill1-25.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill2-26.jpg b/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill2-26.jpg deleted file mode 100644 index 317440f..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill2-26.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill3-27.jpg b/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill3-27.jpg deleted file mode 100644 index 454e84f..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill3-27.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill4-28.jpg b/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill4-28.jpg deleted file mode 100644 index 2376655..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill4-28.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill5-29.jpg b/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill5-29.jpg deleted file mode 100644 index c151f1a..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/PresetImageFill5-29.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/bullet_gbutton_gray-30.png b/_site/People/Lab Website Information - {Zifan Wu}/Data/bullet_gbutton_gray-30.png deleted file mode 100644 index 242d214..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/bullet_gbutton_gray-30.png and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/image1-31.png b/_site/People/Lab Website Information - {Zifan Wu}/Data/image1-31.png deleted file mode 100644 index 6c858ec..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/image1-31.png and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/image1-small-32.png b/_site/People/Lab Website Information - {Zifan Wu}/Data/image1-small-32.png deleted file mode 100644 index 7ebb420..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/image1-small-32.png and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/image2-33.png b/_site/People/Lab Website Information - {Zifan Wu}/Data/image2-33.png deleted file mode 100644 index 6460a9b..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/image2-33.png and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Data/image2-small-34.png b/_site/People/Lab Website Information - {Zifan Wu}/Data/image2-small-34.png deleted file mode 100644 index 607c7e0..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Data/image2-small-34.png and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Index/AnnotationAuthorStorage.iwa b/_site/People/Lab Website Information - {Zifan Wu}/Index/AnnotationAuthorStorage.iwa deleted file mode 100644 index 8293b87..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Index/AnnotationAuthorStorage.iwa and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Index/CalculationEngine.iwa b/_site/People/Lab Website Information - {Zifan Wu}/Index/CalculationEngine.iwa deleted file mode 100644 index c3797c3..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Index/CalculationEngine.iwa and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Index/Document.iwa b/_site/People/Lab Website Information - {Zifan Wu}/Index/Document.iwa deleted file mode 100644 index 1f08b65..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Index/Document.iwa and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Index/DocumentMetadata.iwa b/_site/People/Lab Website Information - {Zifan Wu}/Index/DocumentMetadata.iwa deleted file mode 100644 index 7e3940b..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Index/DocumentMetadata.iwa and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Index/DocumentStylesheet.iwa b/_site/People/Lab Website Information - {Zifan Wu}/Index/DocumentStylesheet.iwa deleted file mode 100644 index daa3cad..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Index/DocumentStylesheet.iwa and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Index/Metadata.iwa b/_site/People/Lab Website Information - {Zifan Wu}/Index/Metadata.iwa deleted file mode 100644 index 3e0d6a9..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Index/Metadata.iwa and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Index/ViewState.iwa b/_site/People/Lab Website Information - {Zifan Wu}/Index/ViewState.iwa deleted file mode 100644 index f7e7418..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Index/ViewState.iwa and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Metadata/BuildVersionHistory.plist b/_site/People/Lab Website Information - {Zifan Wu}/Metadata/BuildVersionHistory.plist deleted file mode 100644 index e134666..0000000 --- a/_site/People/Lab Website Information - {Zifan Wu}/Metadata/BuildVersionHistory.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - docx - M14.1-7040.0.73-4 - - diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Metadata/DocumentIdentifier b/_site/People/Lab Website Information - {Zifan Wu}/Metadata/DocumentIdentifier deleted file mode 100644 index 2a1b683..0000000 --- a/_site/People/Lab Website Information - {Zifan Wu}/Metadata/DocumentIdentifier +++ /dev/null @@ -1 +0,0 @@ -8827AD53-D902-4FC4-A411-542454C1F77A \ No newline at end of file diff --git a/_site/People/Lab Website Information - {Zifan Wu}/Metadata/Properties.plist b/_site/People/Lab Website Information - {Zifan Wu}/Metadata/Properties.plist deleted file mode 100644 index 26d1cbc..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/Metadata/Properties.plist and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/preview-micro.jpg b/_site/People/Lab Website Information - {Zifan Wu}/preview-micro.jpg deleted file mode 100644 index b48ef61..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/preview-micro.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/preview-web.jpg b/_site/People/Lab Website Information - {Zifan Wu}/preview-web.jpg deleted file mode 100644 index 87e9518..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/preview-web.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zifan Wu}/preview.jpg b/_site/People/Lab Website Information - {Zifan Wu}/preview.jpg deleted file mode 100644 index fe16c62..0000000 Binary files a/_site/People/Lab Website Information - {Zifan Wu}/preview.jpg and /dev/null differ diff --git a/_site/People/Lab Website Information - {Zohre Karimi}/Lab Website Information - Zohre Karimi.docx b/_site/People/Lab Website Information - {Zohre Karimi}/Lab Website Information - Zohre Karimi.docx deleted file mode 100644 index c7672a0..0000000 Binary files a/_site/People/Lab Website Information - {Zohre Karimi}/Lab Website Information - Zohre Karimi.docx and /dev/null differ diff --git a/_site/about/index.html b/_site/about/index.html deleted file mode 100644 index c805a99..0000000 --- a/_site/about/index.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - About | Align Robust Interactive Autonomy Lab - - - - - - - -
-
- -
-

About

-
- -
-

This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at jekyllrb.com

- -

You can find the source code for Minima at GitHub: -jekyll / -minima

- -

You can find the source code for Jekyll at GitHub: -jekyll / -jekyll

- - -
- -
- -
- - - diff --git a/_site/assets/css/main.css b/_site/assets/css/main.css deleted file mode 100644 index dafbf09..0000000 --- a/_site/assets/css/main.css +++ /dev/null @@ -1,883 +0,0 @@ -/* General reset */ -* { - margin: 0; - padding: 0; -} - -/* Body styling */ -body { - font-family: 'Arial', sans-serif; - font-size: 20px; - padding-top: 70px; /* Adjust based on header height */ -} - -/* Header styling */ -header.site-header { - width: 100%; - z-index: 1000; - background-color: #DCDCDC; - border-bottom: 4px solid #b22222; /* Separator line */ -} - -header .inner { - width: 100%; - display: flex; - justify-content: space-between; - align-items: center; - padding: 10px 20px; -} - -/* Navbar styling */ -.navbar { - display: flex; - align-items: center; - width: 100%; - justify-content: space-between; -} - -.navbar .left-text { - color: black; - font-size: 26px; /* Increase font size */ - font-weight: bold; - margin-right: 20px; -} - -/* Centering the nav-list */ -.nav-list { - display: flex; - list-style: none; - margin: 0 auto; -} - -.nav-list li { - margin: 0 15px; -} - -.nav-list li a { - display: block; - text-decoration: none; - color: black; - font-size: 20px; /* Increase font size */ - font-weight: bold; /* Make text bold */ - text-align: center; - padding: 14px 14px; - transition: color 0.3s ease-in-out; -} - -.nav-list li a:hover { - color: #b22222; /* Change the color on hover */ -} - -/* External link image styling */ -.external-link { - display: flex; - align-items: center; -} - -.external-link-image { - height: 50px; /* Adjust as necessary */ - margin-left: 20px; -} - -/* Banner styling */ -.banner { - position: relative; - width: 100%; - height: auto; - max-height: 500px; - overflow: hidden; -} - -.banner img { - width: 100%; - height: auto; -} - -.banner-caption { - position: absolute; - bottom: 10px; - left: 20px; - color: white; - background-color: rgba(0, 0, 0, 0.5); - padding: 10px; - font-size: 24px; - border-radius: 5px; -} - -/* People section styling */ -.people-section { - padding: 20px; - background-color: #f9f9f9; -} - -.people-section h1, -.people-section h2 { - font-family: 'Georgia', serif; - margin-bottom: 20px; -} - -.person { - display: flex; - align-items: flex-start; - margin-bottom: 40px; -} - -.person-photo { - width: 150px; - height: 150px; - border-radius: 10px; - margin-right: 20px; -} - -.person-info { - flex: 1; -} - -.person-info h3 { - font-family: 'Georgia', serif; - color: #b22222; - margin-bottom: 10px; -} - -.person-info p { - margin-bottom: 10px; -} - -.person-links a { - display: inline-block; - margin-right: 10px; - color: #b22222; - font-size: 20px; -} - -.person-links a:hover { - color: #111; -} - -/* Publications section styling */ -.publications-section { - padding: 20px; - background-color: #f9f9f9; -} - -.publications-section h1, -.publications-section h2 { - font-family: 'Georgia', serif; - margin-bottom: 20px; -} - -.publication { - display: flex; - margin-bottom: 40px; -} - -.publication-image { - width: 200px; /* Adjust the width as necessary */ - margin-right: 20px; -} - -.publication-image img { - width: 100%; - border-radius: 10px; -} - -.publication-info { - flex: 1; -} - -.publication h2 { - font-family: 'Georgia', serif; - color: #111; - margin-bottom: 10px; -} - -.publication p { - margin-bottom: 10px; -} - -.publication-links a { - display: inline-block; - margin-right: 10px; - color: white; - background-color: #b22222; - padding: 5px 10px; - border-radius: 5px; - font-size: 14px; - text-decoration: none; - transition: background-color 0.3s ease-in-out; -} - - -.note { - font-size: 12px; - color: #555; -} - -/* Main content styling */ -.content { - padding: 20px; - background-color: #f9f9f9; - margin-top: 20px; -} - -/* Footer styling */ -footer { - background: #f8f9fa; - padding: 20px 0; - text-align: center; - border-top: 1px solid #ddd; -} - -footer p { - margin: 0; -} - -/* Responsive adjustments */ -@media (max-width: 768px) { - .navbar { - flex-direction: column; - } - - .nav-list { - flex-direction: column; - align-items: center; - } - - .nav-list li { - margin: 10px 0; - } - - .content { - padding: 10px; - } - - .banner-caption { - font-size: 18px; - left: 10px; - right: 10px; - } - - .person { - flex-direction: column; - align-items: center; - text-align: center; - } - - .person-photo { - margin-bottom: 10px; - } - - .person-info h3 { - margin-top: 10px; - } - - .publication { - flex-direction: column; - align-items: center; - } - - .publication-image { - margin-bottom: 10px; - } - - .publication-links { - display: flex; - flex-direction: column; - } - - .publication-links a { - margin-bottom: 5px; - } - - .publication-links a:last-child { - margin-bottom: 0; - } -} - -/* Additional CSS from your original main.css file */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; -} - -body { - font: 400 16px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - color: #111; - background-color: #fdfdfd; - -webkit-text-size-adjust: 100%; - -webkit-font-feature-settings: "kern" 1; - -moz-font-feature-settings: "kern" 1; - -o-font-feature-settings: "kern" 1; - font-feature-settings: "kern" 1; - font-kerning: normal; - display: flex; - min-height: 100vh; - flex-direction: column; -} - -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -.highlight { - margin-bottom: 15px; -} - -main { - display: block; -} - -img { - max-width: 100%; - vertical-align: middle; -} - -figure > img { - display: block; -} - -figcaption { - font-size: 14px; -} - -ul, ol { - margin-left: 30px; -} - -li > ul, -li > ol { - margin-bottom: 0; -} - -h1, h2, h3, h4, h5, h6 { - font-weight: 400; -} - -a { - color: #2a7ae2; - text-decoration: none; -} - -a:hover { - color: lightgoldenrodyellow; - text-decoration: underline; -} -.social-media-list a:hover { - text-decoration: none; -} -.social-media-list a:hover .username { - text-decoration: underline; -} - -blockquote { - color: #828282; - border-left: 4px solid #e8e8e8; - padding-left: 15px; - font-size: 18px; - letter-spacing: -1px; - font-style: italic; -} -blockquote > :last-child { - margin-bottom: 0; -} - -pre, -code { - font-size: 15px; - border: 1px solid #e8e8e8; - border-radius: 3px; - background-color: #eef; -} - -code { - padding: 1px 5px; -} - -pre { - padding: 8px 12px; - overflow-x: auto; -} -pre > code { - border: 0; - padding-right: 0; - padding-left: 0; -} - -.wrapper { - max-width: -webkit-calc(800px - (30px * 2)); - max-width: calc(800px - 30px * 2); - margin-right: auto; - margin-left: auto; - padding-right: 30px; - padding-left: 30px; -} -@media screen and (max-width: 800px) { - .wrapper { - max-width: -webkit-calc(800px - (30px)); - max-width: calc(800px - (30px)); - padding-right: 15px; - padding-left: 15px; - } -} - -.footer-col-wrapper:after, .wrapper:after { - content: ""; - display: table; - clear: both; -} - -.svg-icon { - width: 16px; - height: 16px; - display: inline-block; - fill: #828282; - padding-right: 5px; - vertical-align: text-top; -} - -.social-media-list li + li { - padding-top: 5px; -} - -table { - margin-bottom: 30px; - width: 100%; - text-align: left; - color: #3f3f3f; - border-collapse: collapse; - border: 1px solid #e8e8e8; -} -table tr:nth-child(even) { - background-color: #f7f7f7; -} -table th, table td { - padding: 10px 15px; -} -table th { - background-color: #f0f0f0; - border: 1px solid #dedede; - border-bottom-color: #c9c9c9; -} -table td { - border: 1px solid #e8e8e8; -} - -.site-header { - border-top: 5px solid #424242; - border-bottom: 1px solid #e8e8e8; - min-height: 55.95px; - position: relative; -} - -.site-title { - font-size: 26px; - font-weight: 300; - line-height: 54px; - letter-spacing: -1px; - margin-bottom: 0; - float: left; -} -.site-title, .site-title:visited { - color: #424242; -} - -.site-nav { - float: right; - line-height: 54px; -} -.site-nav .nav-trigger { - display: none; -} -.site-nav .menu-icon { - display: none; -} -.site-nav .page-link { - color: #111; - line-height: 1.5; -} -.site-nav .page-link:not(:last-child) { - margin-right: 20px; -} -@media screen and (max-width: 600px) { - .site-nav { - position: absolute; - top: 9px; - right: 15px; - background-color: #fdfdfd; - border: 1px solid #e8e8e8; - border-radius: 5px; - text-align: right; - } - .site-nav label[for=nav-trigger] { - display: block; - float: right; - width: 36px; - height: 36px; - z-index: 2; - cursor: pointer; - } - .site-nav .menu-icon { - display: block; - float: right; - width: 36px; - height: 26px; - line-height: 0; - padding-top: 10px; - text-align: center; - } - .site-nav .menu-icon > svg { - fill: #424242; - } - .site-nav input ~ .trigger { - clear: both; - display: none; - } - .site-nav input:checked ~ .trigger { - display: block; - padding-bottom: 5px; - } - .site-nav .page-link { - display: block; - padding: 5px 10px; - margin-left: 20px; - } - .site-nav .page-link:not(:last-child) { - margin-right: 0; - } -} - -.site-footer { - border-top: 1px solid #e8e8e8; - padding: 30px 0; -} - -.footer-heading { - font-size: 18px; - margin-bottom: 15px; -} - -.contact-list, -.social-media-list { - list-style: none; - margin-left: 0; -} - -.footer-col-wrapper { - font-size: 15px; - color: #828282; - margin-left: -15px; -} - -.footer-col { - float: left; - margin-bottom: 15px; - padding-left: 15px; -} - -.footer-col-1 { - width: -webkit-calc(35% - (30px / 2)); - width: calc(35% - 30px / 2); -} - -.footer-col-2 { - width: -webkit-calc(20% - (30px / 2)); - width: calc(20% - 30px / 2); -} - -.footer-col-3 { - width: -webkit-calc(45% - (30px / 2)); - width: calc(45% - 30px / 2); -} - -@media screen and (max-width: 800px) { - .footer-col-1, - .footer-col-2 { - width: -webkit-calc(50% - (30px / 2)); - width: calc(50% - 30px / 2); - } - .footer-col-3 { - width: -webkit-calc(100% - (30px / 2)); - width: calc(100% - (30px / 2)); - } -} -@media screen and (max-width: 600px) { - .footer-col { - float: none; - width: -webkit-calc(100% - (30px / 2)); - width: calc(100% - 30px / 2); - } -} - -.page-content { - padding: 30px 0; - flex: 1; -} - -.page-heading { - font-size: 32px; -} - -.post-list-heading { - font-size: 28px; -} - -.post-list { - margin-left: 0; - list-style: none; -} -.post-list > li { - margin-bottom: 30px; -} - -.post-meta { - font-size: 14px; - color: #828282; -} - -.post-link { - display: block; - font-size: 24px; -} - -.post-header { - margin-bottom: 30px; -} - -.post-title { - font-size: 42px; - letter-spacing: -1px; - line-height: 1; -} -@media screen and (max-width: 800px) { - .post-title { - font-size: 36px; - } -} - -.post-content { - margin-bottom: 30px; -} -.post-content h2 { - font-size: 32px; -} -@media screen and (max-width: 800px) { - .post-content h2 { - font-size: 28px; - } -} -.post-content h3 { - font-size: 26px; -} -@media screen and (max-width: 800px) { - .post-content h3 { - font-size: 22px; - } -} -.post-content h4 { - font-size: 20px; -} -@media screen and (max-width: 800px) { - .post-content h4 { - font-size: 18px; - } -} - -.highlight { - background: #fff; -} -.highlighter-rouge .highlight { - background: #eef; -} -.highlight .c { - color: #998; - font-style: italic; -} -.highlight .err { - color: #a61717; - background-color: #e3d2d2; -} -.highlight .k { - font-weight: bold; -} -.highlight .o { - font-weight: bold; -} -.highlight .cm { - color: #998; - font-style: italic; -} -.highlight .cp { - color: #999; - font-weight: bold; -} -.highlight .c1 { - color: #998; - font-style: italic; -} -.highlight .cs { - color: #999; - font-weight: bold; - font-style: italic; -} -.highlight .gd { - color: #000; - background-color: #fdd; -} -.highlight .gd .x { - color: #000; - background-color: #faa; -} -.highlight .ge { - font-style: italic; -} -.highlight .gr { - color: #a00; -} -.highlight .gh { - color: #999; -} -.highlight .gi { - color: #000; - background-color: #dfd; -} -.highlight .gi .x { - color: #000; - background-color: #afa; -} -.highlight .go { - color: #888; -} -.highlight .gp { - color: #555; -} -.highlight .gs { - font-weight: bold; -} -.highlight .gu { - color: #aaa; -} -.highlight .gt { - color: #a00; -} -.highlight .kc { - font-weight: bold; -} -.highlight .kd { - font-weight: bold; -} -.highlight .kp { - font-weight: bold; -} -.highlight .kr { - font-weight: bold; -} -.highlight .kt { - color: #458; - font-weight: bold; -} -.highlight .m { - color: #099; -} -.highlight .s { - color: #d14; -} -.highlight .na { - color: #008080; -} -.highlight .nb { - color: #0086B3; -} -.highlight .nc { - color: #458; - font-weight: bold; -} -.highlight .no { - color: #008080; -} -.highlight .ni { - color: #800080; -} -.highlight .ne { - color: #900; - font-weight: bold; -} -.highlight .nf { - color: #900; - font-weight: bold; -} -.highlight .nn { - color: #555; -} -.highlight .nt { - color: #000080; -} -.highlight .nv { - color: #008080; -} -.highlight .ow { - font-weight: bold; -} -.highlight .w { - color: #bbb; -} -.highlight .mf { - color: #099; -} -.highlight .mh { - color: #099; -} -.highlight .mi { - color: #099; -} -.highlight .mo { - color: #099; -} -.highlight .sb { - color: #d14; -} -.highlight .sc { - color: #d14; -} -.highlight .sd { - color: #d14; -} -.highlight .s2 { - color: #d14; -} -.highlight .se { - color: #d14; -} -.highlight .sh { - color: #d14; -} -.highlight .si { - color: #d14; -} -.highlight .sx { - color: #d14; -} -.highlight .sr { - color: #009926; -} -.highlight .s1 { - color: #d14; -} -.highlight .ss { - color: #990073; -} -.highlight .bp { - color: #999; -} -.highlight .vc { - color: #008080; -} -.highlight .vg { - color: #008080; -} -.highlight .vi { - color: #008080; -} -.highlight .il { - color: #099; -} diff --git a/_site/assets/images/EricBrewer.jpg b/_site/assets/images/EricBrewer.jpg deleted file mode 100644 index 2028e54..0000000 Binary files a/_site/assets/images/EricBrewer.jpg and /dev/null differ diff --git a/_site/assets/images/logo.png b/_site/assets/images/logo.png deleted file mode 100644 index 2a20b36..0000000 Binary files a/_site/assets/images/logo.png and /dev/null differ diff --git a/_site/assets/images/placeholder.jpg b/_site/assets/images/placeholder.jpg deleted file mode 100644 index f538172..0000000 Binary files a/_site/assets/images/placeholder.jpg and /dev/null differ diff --git a/_site/assets/images/placeholder_face.jpg b/_site/assets/images/placeholder_face.jpg deleted file mode 100644 index 2587949..0000000 Binary files a/_site/assets/images/placeholder_face.jpg and /dev/null differ diff --git a/_site/assets/main.css b/_site/assets/main.css deleted file mode 100644 index 5ae9716..0000000 --- a/_site/assets/main.css +++ /dev/null @@ -1,649 +0,0 @@ -/** - * Reset some basic elements - */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; -} - -/** - * Basic styling - */ -body { - font: 400 16px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - color: #111; - background-color: #fdfdfd; - -webkit-text-size-adjust: 100%; - -webkit-font-feature-settings: "kern" 1; - -moz-font-feature-settings: "kern" 1; - -o-font-feature-settings: "kern" 1; - font-feature-settings: "kern" 1; - font-kerning: normal; - display: flex; - min-height: 100vh; - flex-direction: column; -} - -/** - * Set `margin-bottom` to maintain vertical rhythm - */ -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -.highlight { - margin-bottom: 15px; -} - -/** - * `main` element - */ -main { - display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */ -} - -/** - * Images - */ -img { - max-width: 100%; - vertical-align: middle; -} - -/** - * Figures - */ -figure > img { - display: block; -} - -figcaption { - font-size: 14px; -} - -/** - * Lists - */ -ul, ol { - margin-left: 30px; -} - -li > ul, -li > ol { - margin-bottom: 0; -} - -/** - * Headings - */ -h1, h2, h3, h4, h5, h6 { - font-weight: 400; -} - -/** - * Links - */ -a { - color: #2a7ae2; - text-decoration: none; -} -a:visited { - color: #1756a9; -} -a:hover { - color: #111; - text-decoration: underline; -} -.social-media-list a:hover { - text-decoration: none; -} -.social-media-list a:hover .username { - text-decoration: underline; -} - -/** - * Blockquotes - */ -blockquote { - color: #828282; - border-left: 4px solid #e8e8e8; - padding-left: 15px; - font-size: 18px; - letter-spacing: -1px; - font-style: italic; -} -blockquote > :last-child { - margin-bottom: 0; -} - -/** - * Code formatting - */ -pre, -code { - font-size: 15px; - border: 1px solid #e8e8e8; - border-radius: 3px; - background-color: #eef; -} - -code { - padding: 1px 5px; -} - -pre { - padding: 8px 12px; - overflow-x: auto; -} -pre > code { - border: 0; - padding-right: 0; - padding-left: 0; -} - -/** - * Wrapper - */ -.wrapper { - max-width: -webkit-calc(800px - (30px * 2)); - max-width: calc(800px - 30px * 2); - margin-right: auto; - margin-left: auto; - padding-right: 30px; - padding-left: 30px; -} -@media screen and (max-width: 800px) { - .wrapper { - max-width: -webkit-calc(800px - (30px)); - max-width: calc(800px - (30px)); - padding-right: 15px; - padding-left: 15px; - } -} - -/** - * Clearfix - */ -.footer-col-wrapper:after, .wrapper:after { - content: ""; - display: table; - clear: both; -} - -/** - * Icons - */ -.svg-icon { - width: 16px; - height: 16px; - display: inline-block; - fill: #828282; - padding-right: 5px; - vertical-align: text-top; -} - -.social-media-list li + li { - padding-top: 5px; -} - -/** - * Tables - */ -table { - margin-bottom: 30px; - width: 100%; - text-align: left; - color: #3f3f3f; - border-collapse: collapse; - border: 1px solid #e8e8e8; -} -table tr:nth-child(even) { - background-color: #f7f7f7; -} -table th, table td { - padding: 10px 15px; -} -table th { - background-color: #f0f0f0; - border: 1px solid #dedede; - border-bottom-color: #c9c9c9; -} -table td { - border: 1px solid #e8e8e8; -} - -/** - * Site header - */ -.site-header { - border-top: 5px solid #424242; - border-bottom: 1px solid #e8e8e8; - min-height: 55.95px; - position: relative; -} - -.site-title { - font-size: 26px; - font-weight: 300; - line-height: 54px; - letter-spacing: -1px; - margin-bottom: 0; - float: left; -} -.site-title, .site-title:visited { - color: #424242; -} - -.site-nav { - float: right; - line-height: 54px; -} -.site-nav .nav-trigger { - display: none; -} -.site-nav .menu-icon { - display: none; -} -.site-nav .page-link { - color: #111; - line-height: 1.5; -} -.site-nav .page-link:not(:last-child) { - margin-right: 20px; -} -@media screen and (max-width: 600px) { - .site-nav { - position: absolute; - top: 9px; - right: 15px; - background-color: #fdfdfd; - border: 1px solid #e8e8e8; - border-radius: 5px; - text-align: right; - } - .site-nav label[for=nav-trigger] { - display: block; - float: right; - width: 36px; - height: 36px; - z-index: 2; - cursor: pointer; - } - .site-nav .menu-icon { - display: block; - float: right; - width: 36px; - height: 26px; - line-height: 0; - padding-top: 10px; - text-align: center; - } - .site-nav .menu-icon > svg { - fill: #424242; - } - .site-nav input ~ .trigger { - clear: both; - display: none; - } - .site-nav input:checked ~ .trigger { - display: block; - padding-bottom: 5px; - } - .site-nav .page-link { - display: block; - padding: 5px 10px; - margin-left: 20px; - } - .site-nav .page-link:not(:last-child) { - margin-right: 0; - } -} - -/** - * Site footer - */ -.site-footer { - border-top: 1px solid #e8e8e8; - padding: 30px 0; -} - -.footer-heading { - font-size: 18px; - margin-bottom: 15px; -} - -.contact-list, -.social-media-list { - list-style: none; - margin-left: 0; -} - -.footer-col-wrapper { - font-size: 15px; - color: #828282; - margin-left: -15px; -} - -.footer-col { - float: left; - margin-bottom: 15px; - padding-left: 15px; -} - -.footer-col-1 { - width: -webkit-calc(35% - (30px / 2)); - width: calc(35% - 30px / 2); -} - -.footer-col-2 { - width: -webkit-calc(20% - (30px / 2)); - width: calc(20% - 30px / 2); -} - -.footer-col-3 { - width: -webkit-calc(45% - (30px / 2)); - width: calc(45% - 30px / 2); -} - -@media screen and (max-width: 800px) { - .footer-col-1, - .footer-col-2 { - width: -webkit-calc(50% - (30px / 2)); - width: calc(50% - 30px / 2); - } - .footer-col-3 { - width: -webkit-calc(100% - (30px / 2)); - width: calc(100% - 30px / 2); - } -} -@media screen and (max-width: 600px) { - .footer-col { - float: none; - width: -webkit-calc(100% - (30px / 2)); - width: calc(100% - 30px / 2); - } -} -/** - * Page content - */ -.page-content { - padding: 30px 0; - flex: 1; -} - -.page-heading { - font-size: 32px; -} - -.post-list-heading { - font-size: 28px; -} - -.post-list { - margin-left: 0; - list-style: none; -} -.post-list > li { - margin-bottom: 30px; -} - -.post-meta { - font-size: 14px; - color: #828282; -} - -.post-link { - display: block; - font-size: 24px; -} - -/** - * Posts - */ -.post-header { - margin-bottom: 30px; -} - -.post-title { - font-size: 42px; - letter-spacing: -1px; - line-height: 1; -} -@media screen and (max-width: 800px) { - .post-title { - font-size: 36px; - } -} - -.post-content { - margin-bottom: 30px; -} -.post-content h2 { - font-size: 32px; -} -@media screen and (max-width: 800px) { - .post-content h2 { - font-size: 28px; - } -} -.post-content h3 { - font-size: 26px; -} -@media screen and (max-width: 800px) { - .post-content h3 { - font-size: 22px; - } -} -.post-content h4 { - font-size: 20px; -} -@media screen and (max-width: 800px) { - .post-content h4 { - font-size: 18px; - } -} - -/** - * Syntax highlighting styles - */ -.highlight { - background: #fff; -} -.highlighter-rouge .highlight { - background: #eef; -} -.highlight .c { - color: #998; - font-style: italic; -} -.highlight .err { - color: #a61717; - background-color: #e3d2d2; -} -.highlight .k { - font-weight: bold; -} -.highlight .o { - font-weight: bold; -} -.highlight .cm { - color: #998; - font-style: italic; -} -.highlight .cp { - color: #999; - font-weight: bold; -} -.highlight .c1 { - color: #998; - font-style: italic; -} -.highlight .cs { - color: #999; - font-weight: bold; - font-style: italic; -} -.highlight .gd { - color: #000; - background-color: #fdd; -} -.highlight .gd .x { - color: #000; - background-color: #faa; -} -.highlight .ge { - font-style: italic; -} -.highlight .gr { - color: #a00; -} -.highlight .gh { - color: #999; -} -.highlight .gi { - color: #000; - background-color: #dfd; -} -.highlight .gi .x { - color: #000; - background-color: #afa; -} -.highlight .go { - color: #888; -} -.highlight .gp { - color: #555; -} -.highlight .gs { - font-weight: bold; -} -.highlight .gu { - color: #aaa; -} -.highlight .gt { - color: #a00; -} -.highlight .kc { - font-weight: bold; -} -.highlight .kd { - font-weight: bold; -} -.highlight .kp { - font-weight: bold; -} -.highlight .kr { - font-weight: bold; -} -.highlight .kt { - color: #458; - font-weight: bold; -} -.highlight .m { - color: #099; -} -.highlight .s { - color: #d14; -} -.highlight .na { - color: #008080; -} -.highlight .nb { - color: #0086B3; -} -.highlight .nc { - color: #458; - font-weight: bold; -} -.highlight .no { - color: #008080; -} -.highlight .ni { - color: #800080; -} -.highlight .ne { - color: #900; - font-weight: bold; -} -.highlight .nf { - color: #900; - font-weight: bold; -} -.highlight .nn { - color: #555; -} -.highlight .nt { - color: #000080; -} -.highlight .nv { - color: #008080; -} -.highlight .ow { - font-weight: bold; -} -.highlight .w { - color: #bbb; -} -.highlight .mf { - color: #099; -} -.highlight .mh { - color: #099; -} -.highlight .mi { - color: #099; -} -.highlight .mo { - color: #099; -} -.highlight .sb { - color: #d14; -} -.highlight .sc { - color: #d14; -} -.highlight .sd { - color: #d14; -} -.highlight .s2 { - color: #d14; -} -.highlight .se { - color: #d14; -} -.highlight .sh { - color: #d14; -} -.highlight .si { - color: #d14; -} -.highlight .sx { - color: #d14; -} -.highlight .sr { - color: #009926; -} -.highlight .s1 { - color: #d14; -} -.highlight .ss { - color: #990073; -} -.highlight .bp { - color: #999; -} -.highlight .vc { - color: #008080; -} -.highlight .vg { - color: #008080; -} -.highlight .vi { - color: #008080; -} -.highlight .il { - color: #099; -} - -/*# sourceMappingURL=main.css.map */ \ No newline at end of file diff --git a/_site/assets/main.css.map b/_site/assets/main.css.map deleted file mode 100644 index 52c70b2..0000000 --- a/_site/assets/main.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":["../../../../gems/gems/minima-2.5.1/_sass/minima/_base.scss","../../../../gems/gems/minima-2.5.1/_sass/minima.scss","../../../../gems/gems/minima-2.5.1/_sass/minima/_layout.scss","../../../../gems/gems/minima-2.5.1/_sass/minima/_syntax-highlighting.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;EAGE;EACA;;;AAKF;AAAA;AAAA;AAGA;EACE;EACA,OCLiB;EDMjB,kBCLiB;EDMjB;EACA;EACG;EACE;EACG;EACR;EACA;EACA;EACA;;;AAKF;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;EAIE;;;AAKF;AAAA;AAAA;AAGA;EACE;;;AAKF;AAAA;AAAA;AAGA;EACE;EACA;;;AAKF;AAAA;AAAA;AAGA;EACE;;;AAGF;EACE,WChEiB;;;ADqEnB;AAAA;AAAA;AAGA;EACE,aCtEiB;;;AD0EjB;AAAA;EAEE;;;AAMJ;AAAA;AAAA;AAGA;EACE,aC1FiB;;;AD+FnB;AAAA;AAAA;AAGA;EACE,OC3FiB;ED4FjB;;AAEA;EACE;;AAGF;EACE,OCrGe;EDsGf;;AAGF;EACE;;AAEA;EACE;;;AAMN;AAAA;AAAA;AAGA;EACE,OCnHiB;EDoHjB;EACA;EC3FA;ED6FA;EACA;;AAEA;EACE;;;AAMJ;AAAA;AAAA;AAGA;AAAA;EC1GE;ED6GA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;;AAMJ;AAAA;AAAA;AAGA;EACE;EACA;EACA;EACA;EACA,eC3KiB;ED4KjB,cC5KiB;;AA0BjB;ED4IF;IAUI;IACA;IACA;IACA;;;;AAMJ;AAAA;AAAA;AAGA;EACE;EACA;EACA;;;AAKF;AAAA;AAAA;AAIA;EACI;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAMJ;AAAA;AAAA;AAGA;EACE,eC7NiB;ED8NjB;EACA,YCrNiB;EDsNjB;EACA;EACA;;AAEE;EACE;;AAGJ;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;;AE3PJ;AAAA;AAAA;AAGA;EACE;EACA;EACA;EAGA;;;AAGF;ED8BE;EC5BA;EACA;EACA;EACA;EACA;;AAEA;EAEE,ODJe;;;ACQnB;EACE;EACA;;AAEA;EACI;;AAGJ;EACE;;AAGF;EACE,OD3Be;EC4Bf,aDhCe;;ACmCf;EACE;;ADRJ;ECVF;IAuBI;IACA;IACA;IACA,kBDvCe;ICwCf;IACA;IACA;;EAEA;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACE,MD1DW;;EC8Df;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IAKA;;EAHA;IACE;;;;AASR;AAAA;AAAA;AAGA;EACE;EACA;;;AAGF;EDtEE;ECwEA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EDjFE;ECmFA,OD7GiB;EC8GjB;;;AAIF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;ADhHA;ECoHA;AAAA;IAEE;IACA;;EAGF;IACE;IACA;;;AD5HF;ECiIA;IACE;IACA;IACA;;;AAMJ;AAAA;AAAA;AAGA;EACE;EACA;;;AAGF;ED5IE;;;ACgJF;EDhJE;;;ACoJF;EACE;EACA;;AAEA;EACE,eDzLe;;;AC6LnB;EACE,WDjMiB;ECkMjB,ODzLiB;;;AC4LnB;EACE;EDnKA;;;ACyKF;AAAA;AAAA;AAGA;EACE,eD7MiB;;;ACgNnB;EDhLE;ECkLA;EACA;;ADzLA;ECsLF;IDhLE;;;;AC0LF;EACE,eD3NiB;;AC6NjB;ED7LA;;AANA;ECmMA;ID7LA;;;ACqMA;EDrMA;;AANA;EC2MA;IDrMA;;;AC6MA;ED7MA;;AANA;ECmNA;ID7MA;;;;AE1CF;AAAA;AAAA;AAGA;EACE;;AAGA;EACE;;AAGF;EAAS;EAAa;;AACtB;EAAS;EAAgB;;AACzB;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;EAAa;EAAmB;;AACzC;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;EAAa;;AACtB;EAAS;EAAa;;AACtB;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS","sourcesContent":["/**\n * Reset some basic elements\n */\nbody, h1, h2, h3, h4, h5, h6,\np, blockquote, pre, hr,\ndl, dd, ol, ul, figure {\n margin: 0;\n padding: 0;\n}\n\n\n\n/**\n * Basic styling\n */\nbody {\n font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family;\n color: $text-color;\n background-color: $background-color;\n -webkit-text-size-adjust: 100%;\n -webkit-font-feature-settings: \"kern\" 1;\n -moz-font-feature-settings: \"kern\" 1;\n -o-font-feature-settings: \"kern\" 1;\n font-feature-settings: \"kern\" 1;\n font-kerning: normal;\n display: flex;\n min-height: 100vh;\n flex-direction: column;\n}\n\n\n\n/**\n * Set `margin-bottom` to maintain vertical rhythm\n */\nh1, h2, h3, h4, h5, h6,\np, blockquote, pre,\nul, ol, dl, figure,\n%vertical-rhythm {\n margin-bottom: $spacing-unit / 2;\n}\n\n\n\n/**\n * `main` element\n */\nmain {\n display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */\n}\n\n\n\n/**\n * Images\n */\nimg {\n max-width: 100%;\n vertical-align: middle;\n}\n\n\n\n/**\n * Figures\n */\nfigure > img {\n display: block;\n}\n\nfigcaption {\n font-size: $small-font-size;\n}\n\n\n\n/**\n * Lists\n */\nul, ol {\n margin-left: $spacing-unit;\n}\n\nli {\n > ul,\n > ol {\n margin-bottom: 0;\n }\n}\n\n\n\n/**\n * Headings\n */\nh1, h2, h3, h4, h5, h6 {\n font-weight: $base-font-weight;\n}\n\n\n\n/**\n * Links\n */\na {\n color: $brand-color;\n text-decoration: none;\n\n &:visited {\n color: darken($brand-color, 15%);\n }\n\n &:hover {\n color: $text-color;\n text-decoration: underline;\n }\n\n .social-media-list &:hover {\n text-decoration: none;\n\n .username {\n text-decoration: underline;\n }\n }\n}\n\n\n/**\n * Blockquotes\n */\nblockquote {\n color: $grey-color;\n border-left: 4px solid $grey-color-light;\n padding-left: $spacing-unit / 2;\n @include relative-font-size(1.125);\n letter-spacing: -1px;\n font-style: italic;\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n\n\n/**\n * Code formatting\n */\npre,\ncode {\n @include relative-font-size(0.9375);\n border: 1px solid $grey-color-light;\n border-radius: 3px;\n background-color: #eef;\n}\n\ncode {\n padding: 1px 5px;\n}\n\npre {\n padding: 8px 12px;\n overflow-x: auto;\n\n > code {\n border: 0;\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n\n/**\n * Wrapper\n */\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: $spacing-unit;\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @include media-query($on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n\n\n/**\n * Clearfix\n */\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n\n\n/**\n * Icons\n */\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: #{$grey-color};\n padding-right: 5px;\n vertical-align: text-top;\n}\n\n.social-media-list {\n li + li {\n padding-top: 5px;\n }\n}\n\n\n\n/**\n * Tables\n */\ntable {\n margin-bottom: $spacing-unit;\n width: 100%;\n text-align: $table-text-align;\n color: lighten($text-color, 18%);\n border-collapse: collapse;\n border: 1px solid $grey-color-light;\n tr {\n &:nth-child(even) {\n background-color: lighten($grey-color-light, 6%);\n }\n }\n th, td {\n padding: ($spacing-unit / 3) ($spacing-unit / 2);\n }\n th {\n background-color: lighten($grey-color-light, 3%);\n border: 1px solid darken($grey-color-light, 4%);\n border-bottom-color: darken($grey-color-light, 12%);\n }\n td {\n border: 1px solid $grey-color-light;\n }\n}\n","@charset \"utf-8\";\n\n// Define defaults for each variable.\n\n$base-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$base-font-size: 16px !default;\n$base-font-weight: 400 !default;\n$small-font-size: $base-font-size * 0.875 !default;\n$base-line-height: 1.5 !default;\n\n$spacing-unit: 30px !default;\n\n$text-color: #111 !default;\n$background-color: #fdfdfd !default;\n$brand-color: #2a7ae2 !default;\n\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 40%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 800px !default;\n\n$on-palm: 600px !default;\n$on-laptop: 800px !default;\n\n// Use media queries like this:\n// @include media-query($on-palm) {\n// .wrapper {\n// padding-right: $spacing-unit / 2;\n// padding-left: $spacing-unit / 2;\n// }\n// }\n@mixin media-query($device) {\n @media screen and (max-width: $device) {\n @content;\n }\n}\n\n@mixin relative-font-size($ratio) {\n font-size: $base-font-size * $ratio;\n}\n\n// Import partials.\n@import\n \"minima/base\",\n \"minima/layout\",\n \"minima/syntax-highlighting\"\n;\n","/**\n * Site header\n */\n.site-header {\n border-top: 5px solid $grey-color-dark;\n border-bottom: 1px solid $grey-color-light;\n min-height: $spacing-unit * 1.865;\n\n // Positioning context for the mobile navigation icon\n position: relative;\n}\n\n.site-title {\n @include relative-font-size(1.625);\n font-weight: 300;\n line-height: $base-line-height * $base-font-size * 2.25;\n letter-spacing: -1px;\n margin-bottom: 0;\n float: left;\n\n &,\n &:visited {\n color: $grey-color-dark;\n }\n}\n\n.site-nav {\n float: right;\n line-height: $base-line-height * $base-font-size * 2.25;\n\n .nav-trigger {\n display: none;\n }\n\n .menu-icon {\n display: none;\n }\n\n .page-link {\n color: $text-color;\n line-height: $base-line-height;\n\n // Gaps between nav items, but not on the last one\n &:not(:last-child) {\n margin-right: 20px;\n }\n }\n\n @include media-query($on-palm) {\n position: absolute;\n top: 9px;\n right: $spacing-unit / 2;\n background-color: $background-color;\n border: 1px solid $grey-color-light;\n border-radius: 5px;\n text-align: right;\n\n label[for=\"nav-trigger\"] {\n display: block;\n float: right;\n width: 36px;\n height: 36px;\n z-index: 2;\n cursor: pointer;\n }\n\n .menu-icon {\n display: block;\n float: right;\n width: 36px;\n height: 26px;\n line-height: 0;\n padding-top: 10px;\n text-align: center;\n\n > svg {\n fill: $grey-color-dark;\n }\n }\n\n input ~ .trigger {\n clear: both;\n display: none;\n }\n\n input:checked ~ .trigger {\n display: block;\n padding-bottom: 5px;\n }\n\n .page-link {\n display: block;\n padding: 5px 10px;\n\n &:not(:last-child) {\n margin-right: 0;\n }\n margin-left: 20px;\n }\n }\n}\n\n\n\n/**\n * Site footer\n */\n.site-footer {\n border-top: 1px solid $grey-color-light;\n padding: $spacing-unit 0;\n}\n\n.footer-heading {\n @include relative-font-size(1.125);\n margin-bottom: $spacing-unit / 2;\n}\n\n.contact-list,\n.social-media-list {\n list-style: none;\n margin-left: 0;\n}\n\n.footer-col-wrapper {\n @include relative-font-size(0.9375);\n color: $grey-color;\n margin-left: -$spacing-unit / 2;\n @extend %clearfix;\n}\n\n.footer-col {\n float: left;\n margin-bottom: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n}\n\n.footer-col-1 {\n width: -webkit-calc(35% - (#{$spacing-unit} / 2));\n width: calc(35% - (#{$spacing-unit} / 2));\n}\n\n.footer-col-2 {\n width: -webkit-calc(20% - (#{$spacing-unit} / 2));\n width: calc(20% - (#{$spacing-unit} / 2));\n}\n\n.footer-col-3 {\n width: -webkit-calc(45% - (#{$spacing-unit} / 2));\n width: calc(45% - (#{$spacing-unit} / 2));\n}\n\n@include media-query($on-laptop) {\n .footer-col-1,\n .footer-col-2 {\n width: -webkit-calc(50% - (#{$spacing-unit} / 2));\n width: calc(50% - (#{$spacing-unit} / 2));\n }\n\n .footer-col-3 {\n width: -webkit-calc(100% - (#{$spacing-unit} / 2));\n width: calc(100% - (#{$spacing-unit} / 2));\n }\n}\n\n@include media-query($on-palm) {\n .footer-col {\n float: none;\n width: -webkit-calc(100% - (#{$spacing-unit} / 2));\n width: calc(100% - (#{$spacing-unit} / 2));\n }\n}\n\n\n\n/**\n * Page content\n */\n.page-content {\n padding: $spacing-unit 0;\n flex: 1;\n}\n\n.page-heading {\n @include relative-font-size(2);\n}\n\n.post-list-heading {\n @include relative-font-size(1.75);\n}\n\n.post-list {\n margin-left: 0;\n list-style: none;\n\n > li {\n margin-bottom: $spacing-unit;\n }\n}\n\n.post-meta {\n font-size: $small-font-size;\n color: $grey-color;\n}\n\n.post-link {\n display: block;\n @include relative-font-size(1.5);\n}\n\n\n\n/**\n * Posts\n */\n.post-header {\n margin-bottom: $spacing-unit;\n}\n\n.post-title {\n @include relative-font-size(2.625);\n letter-spacing: -1px;\n line-height: 1;\n\n @include media-query($on-laptop) {\n @include relative-font-size(2.25);\n }\n}\n\n.post-content {\n margin-bottom: $spacing-unit;\n\n h2 {\n @include relative-font-size(2);\n\n @include media-query($on-laptop) {\n @include relative-font-size(1.75);\n }\n }\n\n h3 {\n @include relative-font-size(1.625);\n\n @include media-query($on-laptop) {\n @include relative-font-size(1.375);\n }\n }\n\n h4 {\n @include relative-font-size(1.25);\n\n @include media-query($on-laptop) {\n @include relative-font-size(1.125);\n }\n }\n}\n","/**\n * Syntax highlighting styles\n */\n.highlight {\n background: #fff;\n @extend %vertical-rhythm;\n\n .highlighter-rouge & {\n background: #eef;\n }\n\n .c { color: #998; font-style: italic } // Comment\n .err { color: #a61717; background-color: #e3d2d2 } // Error\n .k { font-weight: bold } // Keyword\n .o { font-weight: bold } // Operator\n .cm { color: #998; font-style: italic } // Comment.Multiline\n .cp { color: #999; font-weight: bold } // Comment.Preproc\n .c1 { color: #998; font-style: italic } // Comment.Single\n .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special\n .gd { color: #000; background-color: #fdd } // Generic.Deleted\n .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific\n .ge { font-style: italic } // Generic.Emph\n .gr { color: #a00 } // Generic.Error\n .gh { color: #999 } // Generic.Heading\n .gi { color: #000; background-color: #dfd } // Generic.Inserted\n .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific\n .go { color: #888 } // Generic.Output\n .gp { color: #555 } // Generic.Prompt\n .gs { font-weight: bold } // Generic.Strong\n .gu { color: #aaa } // Generic.Subheading\n .gt { color: #a00 } // Generic.Traceback\n .kc { font-weight: bold } // Keyword.Constant\n .kd { font-weight: bold } // Keyword.Declaration\n .kp { font-weight: bold } // Keyword.Pseudo\n .kr { font-weight: bold } // Keyword.Reserved\n .kt { color: #458; font-weight: bold } // Keyword.Type\n .m { color: #099 } // Literal.Number\n .s { color: #d14 } // Literal.String\n .na { color: #008080 } // Name.Attribute\n .nb { color: #0086B3 } // Name.Builtin\n .nc { color: #458; font-weight: bold } // Name.Class\n .no { color: #008080 } // Name.Constant\n .ni { color: #800080 } // Name.Entity\n .ne { color: #900; font-weight: bold } // Name.Exception\n .nf { color: #900; font-weight: bold } // Name.Function\n .nn { color: #555 } // Name.Namespace\n .nt { color: #000080 } // Name.Tag\n .nv { color: #008080 } // Name.Variable\n .ow { font-weight: bold } // Operator.Word\n .w { color: #bbb } // Text.Whitespace\n .mf { color: #099 } // Literal.Number.Float\n .mh { color: #099 } // Literal.Number.Hex\n .mi { color: #099 } // Literal.Number.Integer\n .mo { color: #099 } // Literal.Number.Oct\n .sb { color: #d14 } // Literal.String.Backtick\n .sc { color: #d14 } // Literal.String.Char\n .sd { color: #d14 } // Literal.String.Doc\n .s2 { color: #d14 } // Literal.String.Double\n .se { color: #d14 } // Literal.String.Escape\n .sh { color: #d14 } // Literal.String.Heredoc\n .si { color: #d14 } // Literal.String.Interpol\n .sx { color: #d14 } // Literal.String.Other\n .sr { color: #009926 } // Literal.String.Regex\n .s1 { color: #d14 } // Literal.String.Single\n .ss { color: #990073 } // Literal.String.Symbol\n .bp { color: #999 } // Name.Builtin.Pseudo\n .vc { color: #008080 } // Name.Variable.Class\n .vg { color: #008080 } // Name.Variable.Global\n .vi { color: #008080 } // Name.Variable.Instance\n .il { color: #099 } // Literal.Number.Integer.Long\n}\n"],"file":"main.css"} \ No newline at end of file diff --git a/_site/assets/minima-social-icons.svg b/_site/assets/minima-social-icons.svg deleted file mode 100644 index fa7399f..0000000 --- a/_site/assets/minima-social-icons.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_site/feed.xml b/_site/feed.xml deleted file mode 100644 index b5875ba..0000000 --- a/_site/feed.xml +++ /dev/null @@ -1,17 +0,0 @@ -Jekyll2024-10-21T11:27:51-06:00http://localhost:4000/feed.xmlAlign Robust Interactive Autonomy LabARIA Lab at the University of Utah!Welcome to Jekyll!2024-06-27T06:26:58-06:002024-06-27T06:26:58-06:00http://localhost:4000/jekyll/update/2024/06/27/welcome-to-jekyllYou’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-regenerates your site when a file is updated.

- -

Jekyll requires blog post files to be named according to the following format:

- -

YEAR-MONTH-DAY-title.MARKUP

- -

Where YEAR is a four-digit number, MONTH and DAY are both two-digit numbers, and MARKUP is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.

- -

Jekyll also offers powerful support for code snippets:

- -
def print_hi(name)
-  puts "Hi, #{name}"
-end
-print_hi('Tom')
-#=> prints 'Hi, Tom' to STDOUT.
- -

Check out the Jekyll docs for more info on how to get the most out of Jekyll. File all bugs/feature requests at Jekyll’s GitHub repo. If you have questions, you can ask them on Jekyll Talk.

]]>
\ No newline at end of file diff --git a/_site/index.html b/_site/index.html deleted file mode 100644 index d230d11..0000000 --- a/_site/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - Home | Align Robust Interactive Autonomy Lab - - - - - - - -
-

Aligned, Robust and Interactive Autonomy Lab at the University of Utah

- - -
-

- Add About here. - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna. Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci. Aenean nec lorem. In porttitor. Donec laoreet nonummy augue. Suspendisse dui purus, scelerisque at, vulputate vitae, pretium mattis, nunc. Mauris eget neque at sem venenatis eleifend. Ut nonummy. -

- -

Recent News

-... -
- -
- - - diff --git a/_site/jekyll/update/2024/06/27/welcome-to-jekyll.html b/_site/jekyll/update/2024/06/27/welcome-to-jekyll.html deleted file mode 100644 index 8ed8c6d..0000000 --- a/_site/jekyll/update/2024/06/27/welcome-to-jekyll.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - Welcome to Jekyll! | Align Robust Interactive Autonomy Lab - - - - - - - -
-
- -
-

Welcome to Jekyll!

- -
- -
-

You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-regenerates your site when a file is updated.

- -

Jekyll requires blog post files to be named according to the following format:

- -

YEAR-MONTH-DAY-title.MARKUP

- -

Where YEAR is a four-digit number, MONTH and DAY are both two-digit numbers, and MARKUP is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.

- -

Jekyll also offers powerful support for code snippets:

- -
def print_hi(name)
-  puts "Hi, #{name}"
-end
-print_hi('Tom')
-#=> prints 'Hi, Tom' to STDOUT.
- -

Check out the Jekyll docs for more info on how to get the most out of Jekyll. File all bugs/feature requests at Jekyll’s GitHub repo. If you have questions, you can ask them on Jekyll Talk.

- - -
-
- -
- - - diff --git a/_site/people.html b/_site/people.html deleted file mode 100644 index 53e98d6..0000000 --- a/_site/people.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - People | Align Robust Interactive Autonomy Lab - - - - - - - -
-
-

People

- -

Faculty Members

-
- Faculty Picture -
-

Daniel Brown

-

I'm an assistant professor in the Kahlert School of Computing and the Robotics Center at the University of Utah. I completed my postdoc at UC Berkeley in 2022 and received my Ph.D. in Computer Science from UT Austin in 2020. My research broadly focuses on human-centered AI and human-AI alignment. My goal is to develop robots and other AI systems that can safely and efficiently interact with, learn from, teach, and empower human users. My lab's research spans the areas of human-robot interaction, reward and preference learning, human-in-the-loop machine learning, and AI safety. I am interested in applications in assistive, rehab, and surgical robotics, personal AI assistants, swarm robotics, and autonomous driving.

- -
-
- -

PhD Students

-
- Connor -
-

Connor Mattson

-

I am a second year Ph.D. Robotics Student in the Robotics Center and Kahlert School of Computing at the University of Utah. My primary research interests are Human-Robot Interaction, Multi-Agent RLHF, and Swarm Robotics. Currently I'm researching how machine learning can help humans understand what their robots are capable of, how we can efficiently leverage human input to teach multi-robot systems how to perform tasks, and how to share control of high-DoF robots between human teleoperators and AI. After my Ph.D., I plan to continue my research in a tenure-track faculty position at a research-focused university.

- -
-
- -
- Eric -
-

Eric Brewer

-

I’m generally interested in learning algorithms, i.e., reinforcement learning, especially regarding perception.

- -
-
- - -
- Zohre -
-

Zohre Karimi

-

I am a third-year Ph.D. student in Robotics at the Kahlert School of Computing, University of Utah supervised by Dr. Daniel Brown. My research centers on Human-Robot Interaction and Surgical Robotics. To be more specific I am working on developing advanced reward learning techniques and imitation learning algorithms to enhance the capabilities of autonomous systems in surgical robotics. By integrating machine learning with robotics, I aim to improve precision, safety, and efficiency in robotic-assisted surgeries. In addition to this, I am engaged in projects exploring shared control between robots and humans, aiming to enhance collaborative interactions across various domains.

- -
-
- -
- Atharv -
-

Atharv Belsare

-

ALorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Cras semper auctor neque vitae. In nisl nisi scelerisque eu ultrices vitae auctor eu. Nunc pulvinar sapien et ligula ullamcorper. Sociis natoque penatibus et magnis dis parturient montes. Sed lectus vestibulum mattis ullamcorper. Lorem sed risus ultricies tristique nulla aliquet enim tortor at. Scelerisque eu ultrices vitae auctor. Facilisis leo vel fringilla est ullamcorper eget nulla. Lectus nulla at volutpat diam ut venenatis tellus in metus. Ullamcorper velit sed ullamcorper morbi tincidunt ornare massa. Facilisis magna etiam tempor orci. Suscipit adipiscing bibendum est ultricies integer quis.

- -
-
- -
- Zifan -
-

Zifan Wu

-

I am a first-year Ph.D. student at the University of Utah. My primary research focus is on Deep Reinforcement Learning (DRL). Specifically, I've been investigating methods to improve the sample efficiency and safety of DRL algorithms. To that end, I delve into fields such as model-based RL, offline RL, constrained RL, and also representation learning. Currently I'm interested in studying the relationship between the data distribution shift during policy learning and the plasticity loss in the policy network (inability to adapt to unseen data distributions).

- -
-
- -
- -
- - - diff --git a/_site/publications.html b/_site/publications.html deleted file mode 100644 index ed56644..0000000 --- a/_site/publications.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - Publications | Align Robust Interactive Autonomy Lab - - - - - - - -
-
-

Publications

- -
-
- Publication Image -
-
-

Representation Learning for Cross-Embodiment Inverse Reinforcement Learning from Mixed-Quality Demonstrations

-

Anurag Aribandi*, C. Mattson* and Daniel S. Brown

-

Conference, Month, Year

- -

* denotes equal contribution.

-

(Recently Accepted, Links available soon)

-
-
- -
-
- Publication Image -
-
-

Reward Learning from Suboptimal Demonstrations with Applications in Surgical Electrocautery

-

Zohre Karimi*, Shing-Hei Ho*, Bao Thach, Alan Kuntz and Daniel S. Brown

-

International Symposium on Medical Robotics (ISMR), August 2024.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Modeling Kinematic Uncertainty of Tendon-Driven Continuum Robots via Mixture Density Networks

-

Jordan Thompson, Brian Y. Cho, Daniel S. Brown and Alan Kuntz

-

International Symposium on Medical Robotics (ISMR), August 2024.

- -
-
- -
-
- Publication Image -
-
-

Autonomous Assessment of Demonstration Sufficiency via Bayesian Inverse Reinforcement Learning

-

Tu Trinh, Haoyu Chen and Daniel S. Brown

-

Human-Robot Interaction, March 2024.

- -
-
- -
-
- Publication Image -
-
-

Quantifying Assistive Robustness Via the Natural-Adversarial Frontier

-

Jerry Zhi-Yang He, Zackory Erickson, Daniel S. Brown and Anca D. Dragan

-

Conference on Robot Learning (CoRL), October 2023.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Leveraging Human Feedback to Evolve and Discover Novel Emergent Behaviors in Robot Swarms

-

C. Mattson and Daniel S. Brown

-

Genetic and Evolutionary Computation Conference (GECCO), July 2023.

- -
-
- -
-
- Publication Image -
-
-

Exploring Behavior Discovery Methods for Heterogeneous Swarms of Limited-Capability Robots

-

C. Mattson, J. C. Clark, and Daniel S. Brown

-

Exploring Behavior Discovery Methods for Heterogeneous Swarms of Limited-Capability Robots, June 2023.

- -
-
- - - -
-
- Publication Image -
-
-

Player-Centric Procedural Content Generation: Enhancing Runtime Customization by Integrating Real-Time Player Feedback

-

Nancy N Blackburn*, M Gardone* and Daniel S Brown

-

Companion Proceedings of the Annual Symposium on Computer-Human Interaction in Play (CHI PLAY), October 2023.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Efficient Preference-Based Reinforcement Learning Using Learned Dynamics Models

-

Yi Liu*, Gaurav Datta*, Ellen Novoseller and Daniel S. Brown

-

International Conference on Robotics and Automation (ICRA), February 2024.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Contextual Reliability: When Different Features Matter in Different Contexts

-

Gaurav Ghosal, Amrith Setlur, Daniel S. Brown, Anca D. Dragan and Aditi Raghunathan

-

International Conference on Machine Learning (ICML), July 2023.

- -
-
- -
-
- Publication Image -
-
-

Causal Confusion and Reward Misidentification in Preference-Based Reward Learning

-

Jeremy Tien, Jerry Zhi-Yang He, Zackory Erickson, Anca D. Dragan and Daniel S. Brown

-

International Conference on Learning Representations (ICLR), March 2023.

- -
-
- -
-
- Publication Image -
-
-

Benchmarks and Algorithms for Offline Preference-Based Reward Learning

-

Daniel Shin, Anca D. Dragan and Daniel S. Brown

-

Transactions on Machine Learning Research (TMLR), January 2023.

- -
-
- -
-
- Publication Image -
-
-

SIRL: Similarity-based Implicit Representation Learning

-

Andreea Bobu, Yi Liu, Rohin Shah, Daniel S. Brown and Anca D. Dragan

-

International Conference on Human Robot Interaction (HRI), March 2023.

- -
-
- -
-
- Publication Image -
-
-

Towards a Gaze-Driven Assistive Neck Exoskeleton via Virtual Reality Data Collection

-

Jordan Thompson, Haohan Zhang and Daniel S. Brown

-

HRI Workshop on Virtual, Augmented, and Mixed-Reality for Human-Robot Interactions, March 2023.

- -
-
- -
-
- Publication Image -
-
-

The Effect of Modeling Human Rationality Level on Learning Rewards from Multiple Feedback Types.

-

Gaurav R. Ghosal, Matthew Zurek, Daniel S. Brown and Anca D. Dragan

-

AAAI Conference on Artificial Intelligence (AAAI), Month 2023.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Paper Title

-

Author 1*, Author 2*, Author 3, Faulty

-

Conference, Month Year.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Paper Title

-

Author 1*, Author 2*, Author 3, Faulty

-

Conference, Month Year.

- -

* denotes equal contribution.

-
-
- - -
- - -
- - - diff --git a/_site/research.html b/_site/research.html deleted file mode 100644 index 41eebd3..0000000 --- a/_site/research.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - Research | Align Robust Interactive Autonomy Lab - - - - - - - -
-

Research

- -

Welcome to our research page! Our lab is focused on advancing the fields of human-centered AI and human-robot interaction, with specific emphasis on reward learning, assistive and medical robotics, safety and robustness, and multi-agent systems.

- -
- -

Reward Learning

- -

Reward learning is at the core of creating intelligent systems that can make decisions based on feedback. Our research in this area focuses on:

- - - -
- -

Assistive and Medical Robotics

- -

We are developing robotic systems that assist individuals with disabilities and improve medical care. Our work includes:

- - - -

Safety, Robustness, and Transparency

- -

Ensuring the safety and robustness of robotic systems is crucial for deployment in real-world settings. Our research focuses on:

- - - -

Multi-Agent Systems

- -

We explore how multiple autonomous agents can collaborate and interact to solve complex problems. Our work in this area includes:

- - - -
- - -
- - - diff --git a/_site/videos.html b/_site/videos.html deleted file mode 100644 index f353357..0000000 --- a/_site/videos.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - Videos | Align Robust Interactive Autonomy Lab - - - - - - - -
-

Videos

- -

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque nisl eros, pulvinar facilisis justo mollis, auctor consequat urna.

- -
- - - diff --git a/about.markdown b/about.markdown deleted file mode 100644 index 8b4e0b2..0000000 --- a/about.markdown +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: page -title: About -permalink: /about/ ---- - -This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/) - -You can find the source code for Minima at GitHub: -[jekyll][jekyll-organization] / -[minima](https://github.com/jekyll/minima) - -You can find the source code for Jekyll at GitHub: -[jekyll][jekyll-organization] / -[jekyll](https://github.com/jekyll/jekyll) - - -[jekyll-organization]: https://github.com/jekyll diff --git a/assets/css/main.css b/assets/css/main.css deleted file mode 100644 index c9e7526..0000000 --- a/assets/css/main.css +++ /dev/null @@ -1,1056 +0,0 @@ -/* General reset */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -/* Body styling */ -body { - font-family: 'Arial', sans-serif; - font-size: 20px; - line-height: 1.6; - padding-top: 70px; /* Adjust based on header height */ -} - -/* Header styling */ -header.site-header { - width: 100%; - z-index: 1000; - background-color: #DCDCDC; - border-bottom: 4px solid #b22222; /* Separator line */ -} - -header .inner { - width: 100%; - display: flex; - justify-content: space-between; - align-items: center; - padding: 10px 20px; -} - -/* Navbar styling */ -.navbar { - display: flex; - flex-wrap: wrap; /* Added flex-wrap for overflow handling */ - align-items: center; - width: 100%; - justify-content: space-between; -} - -.navbar .left-text { - color: black; - font-size: 26px; /* Increase font size */ - font-weight: bold; - margin-right: 20px; -} - -/* Centering the nav-list */ -.nav-list { - display: flex; - list-style: none; - margin: 0 auto; -} - -.nav-list li { - margin: 0 15px; -} - -.nav-list li a { - display: block; - text-decoration: none; - color: black; - font-size: 20px; /* Increase font size */ - font-weight: bold; /* Make text bold */ - text-align: center; - padding: 14px 14px; - transition: color 0.3s ease-in-out; -} - -.nav-list li a:hover { - color: #b22222; /* Change the color on hover */ - transition: color 0.2s ease-in-out; /* Added smoother hover transition */ -} - -/* External link image styling */ -.external-link { - display: flex; - align-items: center; -} - -.external-link-image { - height: 50px; /* Adjust as necessary */ - margin-left: 20px; -} - -/* Banner styling */ -.banner { - position: relative; - width: 100%; - height: auto; - max-height: 500px; - overflow: hidden; -} - -.banner img { - width: 100%; - height: auto; -} - -.banner-caption { - position: absolute; - bottom: 10px; - left: 20px; - color: white; - background-color: rgba(0, 0, 0, 0.5); - padding: 10px; - font-size: 24px; - border-radius: 5px; -} - -/* People section styling */ -.people-section { - padding: 20px; - background-color: #f9f9f9; -} - -.people-section h1, -.people-section h2 { - font-family: 'Georgia', serif; - margin-bottom: 20px; -} - -.person { - display: flex; - align-items: flex-start; - margin-bottom: 40px; -} - -.person-photo { - width: 150px; - height: 150px; - border-radius: 10px; - margin-right: 20px; -} - -.person-info { - flex: 1; -} - -.person-info h3 { - font-family: 'Georgia', serif; - color: #b22222; - margin-bottom: 10px; -} - -.person-info p { - margin-bottom: 10px; -} - -.person-links a { - display: inline-block; - margin-right: 10px; - color: #b22222; - font-size: 20px; -} - -.person-links a:hover { - color: #111; -} - -/* Publications section styling */ -.publications-section { - padding: 20px; - background-color: #f9f9f9; -} - -.publications-section h1, -.publications-section h2 { - font-family: 'Georgia', serif; - margin-bottom: 20px; -} - -.publication { - display: flex; - margin-bottom: 40px; -} - -.publication-image { - width: 200px; /* Adjust the width as necessary */ - margin-right: 20px; -} - -.publication-image img { - width: 100%; - border-radius: 10px; -} - -.publication-info { - flex: 1; -} - -.publication h2 { - font-family: 'Georgia', serif; - color: #111; - margin-bottom: 10px; -} - -.publication p { - margin-bottom: 10px; -} - -.publication-links a { - display: inline-block; - margin-right: 10px; - color: white; - background-color: #b22222; - padding: 5px 10px; - border-radius: 5px; - font-size: 14px; - text-decoration: none; - transition: background-color 0.3s ease-in-out; -} - -.note { - font-size: 12px; - color: #555; -} - -/* Main content styling */ -.content { - padding: 20px; - background-color: #f9f9f9; - margin-top: 20px; -} - -/* Footer styling */ -footer { - background: #f8f9fa; - padding: 20px 0; - text-align: center; - border-top: 1px solid #ddd; -} - -footer p { - margin: 0; -} - -/* Responsive adjustments */ -@media (max-width: 768px) { - .navbar { - flex-direction: column; - } - - .nav-list { - flex-direction: column; - align-items: center; - } - - .nav-list li { - margin: 10px 0; - } - - .content { - padding: 10px; - } - - .banner-caption { - font-size: 18px; - left: 10px; - right: 10px; - } - - .person { - flex-direction: column; - align-items: center; - text-align: center; - } - - .person-photo { - margin-bottom: 10px; - } - - .person-info h3 { - margin-top: 10px; - } - - .publication { - flex-direction: column; - align-items: center; - } - - .publication-image { - margin-bottom: 10px; - } - - .publication-links { - display: flex; - flex-direction: column; - } - - .publication-links a { - margin-bottom: 5px; - } - - .publication-links a:last-child { - margin-bottom: 0; - } - - /* Responsive typography adjustments */ - body { - font-size: 18px; - } - - h1, h2, h3 { - font-size: 90%; - } -} - -/* Additional CSS from your original main.css file */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; -} - -body { - font: 400 16px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - color: #111; - background-color: #fdfdfd; - -webkit-text-size-adjust: 100%; - -webkit-font-feature-settings: "kern" 1; - -moz-font-feature-settings: "kern" 1; - -o-font-feature-settings: "kern" 1; - font-feature-settings: "kern" 1; - font-kerning: normal; - display: flex; - min-height: 100vh; - flex-direction: column; -} - -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -.highlight { - margin-bottom: 15px; -} - -main { - display: block; -} - -img { - max-width: 100%; - vertical-align: middle; -} - -figure > img { - display: block; -} - -figcaption { - font-size: 14px; -} - -ul, ol { - margin-left: 30px; -} - -li > ul, -li > ol { - margin-bottom: 0; -} - -h1, h2, h3, h4, h5, h6 { - font-weight: 400;/* Videos section styling */ -.videos-section { - padding: 20px; - background-color: #f9f9f9; -} - -.videos-section h1, -.videos-section h2 { - font-family: 'Georgia', serif; - margin-bottom: 20px; -} - -.video-item { - display: flex; - flex-direction: column; - margin-bottom: 40px; -} - -.video-item-info { - margin-bottom: 20px; -} - -.video-item-info h3 { - font-family: 'Georgia', serif; - color: #b22222; - margin-bottom: 10px; -} - -.video-item-info p { - margin-bottom: 10px; -} - -.video-item iframe { - width: 100%; - height: auto; - border-radius: 10px; -} - -.video-item-links a { - display: inline-block; - margin-right: 10px; - color: #b22222; - font-size: 20px; -} - -.video-item-links a:hover { - color: #111; -} - -} - -a { - color: #2a7ae2; - text-decoration: none; -} - -a:hover { - color: lightgoldenrodyellow; - text-decoration: underline; -} -.social-media-list a:hover { - text-decoration: none; -} -.social-media-list a:hover .username { - text-decoration: underline; -} - -blockquote { - color: #828282; - border-left: 4px solid #e8e8e8; - padding-left: 15px; - font-size: 18px; - letter-spacing: -1px; - font-style: italic; -} -blockquote > :last-child { - margin-bottom: 0; -} - -pre, -code { - font-size: 15px; - border: 1px solid #e8e8e8; - border-radius: 3px; - background-color: #eef; -} - -code { - padding: 1px 5px; -} - -pre { - padding: 8px 12px; - overflow-x: auto; -} -pre > code { - border: 0; - padding-right: 0; - padding-left: 0; -} - -.wrapper { - max-width: -webkit-calc(800px - (30px * 2)); - max-width: calc(800px - 30px * 2); - margin-right: auto; - margin-left: auto; - padding-right: 30px; - padding-left: 30px; -} -@media screen and (max-width: 800px) { - .wrapper { - max-width: -webkit-calc(800px - (30px)); - max-width: calc(800px - (30px)); - padding-right: 15px; - padding-left: 15px; - } -} - -.footer-col-wrapper:after, .wrapper:after { - content: ""; - display: table; - clear: both; -} - -.svg-icon { - width: 16px; - height: 16px; - display: inline-block; - fill: #828282; - padding-right: 5px; - vertical-align: text-top; -} - -.social-media-list li + li { - padding-top: 5px; -} - -table { - margin-bottom: 30px; - width: 100%; - text-align: left; - color: #3f3f3f; - border-collapse: collapse; - border: 1px solid #e8e8e8; -} -table tr:nth-child(even) { - background-color: #f7f7f7; -} -table th, table td { - padding: 10px 15px; -} -table th { - background-color: #f0f0f0; - border: 1px solid #dedede; - border-bottom-color: #c9c9c9; -} -table td { - border: 1px solid #e8e8e8; -} - -.site-header { - border-top: 5px solid #424242; - border-bottom: 1px solid #e8e8e8; - min-height: 55.95px; - position: relative; -} - -.site-title { - font-size: 26px; - font-weight: 300; - line-height: 54px; - letter-spacing: -1px; - margin-bottom: 0; - float: left; -} -.site-title, .site-title:visited { - color: #424242; -} - -.site-nav { - float: right; - line-height: 54px; -} -.site-nav .nav-trigger { - display: none; -} -.site-nav .menu-icon { - display: none; -} -.site-nav .page-link { - color: #111; - line-height: 1.5; -} -.site-nav .page-link:not(:last-child) { - margin-right: 20px; -} -@media screen and (max-width: 600px) { - .site-nav { - position: absolute; - top: 9px; - right: 15px; - background-color: #fdfdfd; - border: 1px solid #e8e8e8; - border-radius: 5px; - text-align: right; - } - .site-nav label[for=nav-trigger] { - display: block; - float: right; - width: 36px; - height: 36px; - z-index: 2; - cursor: pointer; - } - .site-nav .menu-icon { - display: block; - float: right; - width: 36px; - height: 26px; - line-height: 0; - padding-top: 10px; - text-align: center; - } - .site-nav .menu-icon > svg { - fill: #424242; - } - .site-nav input ~ .trigger { - clear: both; - display: none; - } - .site-nav input:checked ~ .trigger { - display: block; - padding-bottom: 5px; - } - .site-nav .page-link { - display: block; - padding: 5px 10px; - margin-left: 20px; - } - .site-nav .page-link:not(:last-child) { - margin-right: 0; - } -} - -.site-footer { - border-top: 1px solid #e8e8e8; - padding: 30px 0; -} - -.footer-heading { - font-size: 18px; - margin-bottom: 15px; -} - -.contact-list, -.social-media-list { - list-style: none; - margin-left: 0; -} - -.footer-col-wrapper { - font-size: 15px; - color: #828282; - margin-left: -15px; -} - -.footer-col { - float: left; - margin-bottom: 15px; - padding-left: 15px; -} - -.footer-col-1 { - width: -webkit-calc(35% - (30px / 2)); - width: calc(35% - 30px / 2); -} - -.footer-col-2 { - width: -webkit-calc(20% - (30px / 2)); - width: calc(20% - 30px / 2); -} - -.footer-col-3 { - width: -webkit-calc(45% - (30px / 2)); - width: calc(45% - 30px / 2); -} - -@media screen and (max-width: 800px) { - .footer-col-1, - .footer-col-2 { - width: -webkit-calc(50% - (30px / 2)); - width: calc(50% - 30px / 2); - } - .footer-col-3 { - width: -webkit-calc(100% - (30px / 2)); - width: calc(100% - (30px)); - } -} -@media screen and (max-width: 600px) { - .footer-col { - float: none; - width: -webkit-calc(100% - (30px / 2)); - width: calc(100% - 30px / 2); - } -} - -.page-content { - padding: 30px 0; - flex: 1; -} - -.page-heading { - font-size: 32px; -} - -.post-list-heading { - font-size: 28px; -} - -.post-list { - margin-left: 0; - list-style: none; -} -.post-list > li { - margin-bottom: 30px; -} - -.post-meta { - font-size: 14px; - color: #828282; -} - -.post-link { - display: block; - font-size: 24px; -} - -.post-header { - margin-bottom: 30px; -} - -.post-title { - font-size: 42px; - letter-spacing: -1px; - line-height: 1; -} -@media screen and (max-width: 800px) { - .post-title { - font-size: 36px; - } -} - -.post-content { - margin-bottom: 30px; -} -.post-content h2 { - font-size: 32px; -} -@media screen and (max-width: 800px) { - .post-content h2 { - font-size: 28px; - } -} -.post-content h3 { - font-size: 26px; -} -@media screen and (max-width: 800px) { - .post-content h3 { - font-size: 22px; - } -} -.post-content h4 { - font-size: 20px; -} -@media screen and (max-width: 800px) { - .post-content h4 { - font-size: 18px; - } -} - -/* Videos section styling */ -.videos-section { - padding: 20px; - background-color: #f9f9f9; -} - -.videos-section h1, -.videos-section h2 { - font-family: 'Georgia', serif; - margin-bottom: 20px; -} - -.video-item { - display: flex; - flex-direction: column; - margin-bottom: 40px; -} - -.video-item-info { - margin-bottom: 20px; -} - -.video-item-info h3 { - font-family: 'Georgia', serif; - margin-bottom: 10px; -} - -.video-item-info p { - margin-bottom: 10px; -} - -.video-item iframe { - width: 100%; - border-radius: 10px; -} - -.video-item-links a { - display: inline-block; - margin-right: 10px; - color: #b22222; - font-size: 20px; -} - -.video-item-links a:hover { - color: #111; -} - -/* Home section styling */ -.home-section { - padding: 20px; - background-color: #ffffff; /* White background for a clean look */ -} - -.home-section h1, -.home-section h2 { - font-family: 'Georgia', serif; - margin-bottom: 20px; -} - -.home-feature { - display: flex; - align-items: flex-start; - margin-bottom: 40px; -} - -.home-feature-info { - flex: 1; -} - -.home-feature-info p { - margin-bottom: 10px; -} - -.lab-name { - text-align: center; - margin-top: 20px; - padding: 20px 0; - background-color: #f9f9f9; /* Light background to highlight the lab name */ - border-bottom: 2px solid #b22222; /* Optional underline */ -} - -.lab-name h1 { - font-family: 'Georgia', serif; - font-size: 36px; - margin: 0; -} - -/* Adjust the banner to align with overall styling */ -.banner { - position: relative; - width: 100%; - height: auto; - max-height: 700px; - overflow: hidden; -} - -.banner img { - width: 100%; - height: auto; -} - -.banner-caption { - position: absolute; - bottom: 10px; - left: 20px; - color: white; - background-color: rgba(0, 0, 0, 0.5); - padding: 10px; - font-size: 24px; - border-radius: 5px; -} - - -.highlight { - background: #fff; -} -.highlighter-rouge .highlight { - background: #eef; -} -.highlight .c { - color: #998; - font-style: italic; -} -.highlight .err { - color: #a61717; - background-color: #e3d2d2; -} -.highlight .k { - font-weight: bold; -} -.highlight .o { - font-weight: bold; -} -.highlight .cm { - color: #998; - font-style: italic; -} -.highlight .cp { - color: #999; - font-weight: bold; -} -.highlight .c1 { - color: #998; - font-style: italic; -} -.highlight .cs { - color: #999; - font-weight: bold; - font-style: italic; -} -.highlight .gd { - color: #000; - background-color: #fdd; -} -.highlight .gd .x { - color: #000; - background-color: #faa; -} -.highlight .ge { - font-style: italic; -} -.highlight .gr { - color: #a00; -} -.highlight .gh { - color: #999; -} -.highlight .gi { - color: #000; - background-color: #dfd; -} -.highlight .gi .x { - color: #000; - background-color: #afa; -} -.highlight .go { - color: #888; -} -.highlight .gp { - color: #555; -} -.highlight .gs { - font-weight: bold; -} -.highlight .gu { - color: #aaa; -} -.highlight .gt { - color: #a00; -} -.highlight .kc { - font-weight: bold; -} -.highlight .kd { - font-weight: bold; -} -.highlight .kp { - font-weight: bold; -} -.highlight .kr { - font-weight: bold; -} -.highlight .kt { - color: #458; - font-weight: bold; -} -.highlight .m { - color: #099; -} -.highlight .s { - color: #d14; -} -.highlight .na { - color: #008080; -} -.highlight .nb { - color: #0086B3; -} -.highlight .nc { - color: #458; - font-weight: bold; -} -.highlight .no { - color: #008080; -} -.highlight .ni { - color: #800080; -} -.highlight .ne { - color: #900; - font-weight: bold; -} -.highlight .nf { - color: #900; - font-weight: bold; -} -.highlight .nn { - color: #555; -} -.highlight .nt { - color: #000080; -} -.highlight .nv { - color: #008080; -} -.highlight .ow { - font-weight: bold; -} -.highlight .w { - color: #bbb; -} -.highlight .mf { - color: #099; -} -.highlight .mh { - color: #099; -} -.highlight .mi { - color: #099; -} -.highlight .mo { - color: #099; -} -.highlight .sb { - color: #d14; -} -.highlight .sc { - color: #d14; -} -.highlight .sd { - color: #d14; -} -.highlight .s2 { - color: #d14; -} -.highlight .se { - color: #d14; -} -.highlight .sh { - color: #d14; -} -.highlight .si { - color: #d14; -} -.highlight .sx { - color: #d14; -} -.highlight .sr { - color: #009926; -} -.highlight .s1 { - color: #d14; -} -.highlight .ss { - color: #990073; -} -.highlight .bp { - color: #999; -} -.highlight .vc { - color: #008080; -} -.highlight .vg { - color: #008080; -} -.highlight .vi { - color: #008080; -} -.highlight .il { - color: #099; -} diff --git a/assets/images/AtharvBelsare.jpg b/assets/images/AtharvBelsare.jpg deleted file mode 100644 index 2799d67..0000000 Binary files a/assets/images/AtharvBelsare.jpg and /dev/null differ diff --git a/assets/images/Connor-publications/novelty.gif b/assets/images/Connor-publications/novelty.gif deleted file mode 100644 index 6a80706..0000000 Binary files a/assets/images/Connor-publications/novelty.gif and /dev/null differ diff --git a/assets/images/Connor-publications/pub1.gif b/assets/images/Connor-publications/pub1.gif deleted file mode 100644 index 4ad4ec8..0000000 Binary files a/assets/images/Connor-publications/pub1.gif and /dev/null differ diff --git a/assets/images/Connor-publications/xprefs.gif b/assets/images/Connor-publications/xprefs.gif deleted file mode 100644 index 0d12668..0000000 Binary files a/assets/images/Connor-publications/xprefs.gif and /dev/null differ diff --git a/assets/images/ConnorMattson.png b/assets/images/ConnorMattson.png deleted file mode 100644 index f65a8a1..0000000 Binary files a/assets/images/ConnorMattson.png and /dev/null differ diff --git a/assets/images/DanielBrown.jpg b/assets/images/DanielBrown.jpg deleted file mode 100644 index c542c67..0000000 Binary files a/assets/images/DanielBrown.jpg and /dev/null differ diff --git a/assets/images/EricBrewer.jpg b/assets/images/EricBrewer.jpg deleted file mode 100644 index 2028e54..0000000 Binary files a/assets/images/EricBrewer.jpg and /dev/null differ diff --git a/assets/images/SeongilHeo.jpeg b/assets/images/SeongilHeo.jpeg deleted file mode 100644 index c7fb39e..0000000 Binary files a/assets/images/SeongilHeo.jpeg and /dev/null differ diff --git a/assets/images/ZifanWu.jpg b/assets/images/ZifanWu.jpg deleted file mode 100644 index 3c46d10..0000000 Binary files a/assets/images/ZifanWu.jpg and /dev/null differ diff --git a/assets/images/Zohre-publications/RewardFromSubOptimalDemos.png b/assets/images/Zohre-publications/RewardFromSubOptimalDemos.png deleted file mode 100644 index cb95676..0000000 Binary files a/assets/images/Zohre-publications/RewardFromSubOptimalDemos.png and /dev/null differ diff --git a/assets/images/ZohreKarimi.jpg b/assets/images/ZohreKarimi.jpg deleted file mode 100644 index 11857c5..0000000 Binary files a/assets/images/ZohreKarimi.jpg and /dev/null differ diff --git a/assets/images/banner.png b/assets/images/banner.png deleted file mode 100644 index 003a927..0000000 Binary files a/assets/images/banner.png and /dev/null differ diff --git a/assets/images/logo.png b/assets/images/logo.png deleted file mode 100644 index 2a20b36..0000000 Binary files a/assets/images/logo.png and /dev/null differ diff --git a/assets/images/placeholder.jpg b/assets/images/placeholder.jpg deleted file mode 100644 index f538172..0000000 Binary files a/assets/images/placeholder.jpg and /dev/null differ diff --git a/assets/images/placeholder_face.jpg b/assets/images/placeholder_face.jpg deleted file mode 100644 index 2587949..0000000 Binary files a/assets/images/placeholder_face.jpg and /dev/null differ diff --git a/index.css b/index.css new file mode 100644 index 0000000..97a577f --- /dev/null +++ b/index.css @@ -0,0 +1,91 @@ +@import 'tailwindcss'; + +@theme { + --color-ured: #BE0000; + --color-ugray: #707271; + --color-dgray: #424242; + --color-header: #DCDCDC; + --color-body: #F9F9F9; + --color-footer: #F8F9FA; + --color-lgray: #E8E8E8; + --aspect-letter: 1/1.29; + --text-tiny: 0.625rem; +} + +@layer base { + h1 { + @apply text-2xl sm:text-4xl mb-4 md:mb-8 font-serif; + } + + h2 { + @apply text-xl sm:text-3xl mb-4 md:mb-8 font-serif; + } + + h3 { + @apply text-lg sm:text-2xl font-medium mb-2 md:mb-4 font-serif; + } + + h4 { + @apply text-base sm:text-xl mb-1 md:mb-2; + } + + h5 { + @apply text-sm sm:text-base font-semibold; + } + + * { + @apply transition-all duration-300 font-sans; + } +} + +@layer components { + .pages { + @apply mt-14 sm:mt-18 md:mt-21 lg:mt-26 py-10 px-5 sm:px-10 md:px-20 lg:px-40 2xl:px-80 flex-1 space-y-4 md:space-y-8 bg-body; + } +} + +@layer utilities { + .container div+div { + @apply border-t border-t-ured pt-4; + } + .space-y-xs { + @apply space-y-2; + } + + .space-y-sm { + @apply space-y-4; + } + + .space-y-md { + @apply space-y-8; + } + + .gap-xs { + @apply gap-2; + } + + .gap-sm { + @apply gap-4; + } + + .gap-md { + @apply gap-8; + } +} + +/* Chrome, Safari, Opera */ +*::-webkit-scrollbar { + display: none; +} + +/* IE, Edge */ +* { + -ms-overflow-style: none; + /* IE and Edge */ + scrollbar-width: none; + /* Firefox */ +} + +html { + scroll-behavior: smooth; +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..5a91de6 --- /dev/null +++ b/index.html @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + ARIA Lab | Align Robust Interactive Autonomy Lab + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/index.md b/index.md deleted file mode 100644 index 541b066..0000000 --- a/index.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -layout: default -title: Home ---- -
-

Aligned, Robust and Interactive Autonomy Lab at the University of Utah

-
- - - - -
-

About Us

-
-
-

- We're a group of AI researchers working on building and studying the next generation of AI systems with a focus on human-robot interaction, human-in-the-loop reinforcement learning, and AI safety and robustness. -

-
-
- - -

Recent News

-
-
-

-

    -
  • Congrats to Connor and Varun for their paper, "Discovery and Deployment of Emergent Robot Swarm Behaviors via Representation Learning and Real2Sim2Real Transfer," accepted by the 24th International Conference on Autonomous Agents and Multiagent Systems (AAMAS'25)
  • -
  • Congrats to Chia, Eric, and Connor for getting their paper "A dataset of paired head and eye movements during visual tasks in virtual environments" accepted by Scientific Data - Nature.
  • -
  • Congrats to Atharv, Connor, and Zohre for getting their paper "Toward Zero-Shot User Intent Recognition in Shared Autonomy" accepted by the ACM/IEEE International Conference on Human-Robot Interaction (HRI'25).
  • -
-

-
-
-
- diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8c8b98e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2442 @@ +{ + "name": "app", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "app", + "version": "0.0.0", + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@fortawesome/free-brands-svg-icons": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@fortawesome/react-fontawesome": "^0.2.2", + "@tailwindcss/vite": "^4.1.8", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-router-dom": "^7.6.2", + "tailwindcss": "^4.1.8" + }, + "devDependencies": { + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.7.0", + "vite": "^6.3.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz", + "integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz", + "integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.7.2.tgz", + "integrity": "sha512-zu0evbcRTgjKfrr77/2XX+bU+kuGfjm0LbajJHVIgBWNIDzrhpRxiCPNT8DW5AdmSsq7Mcf9D1bH0aSeSUSM+Q==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.2.tgz", + "integrity": "sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz", + "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", + "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", + "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-x64": "4.1.11", + "@tailwindcss/oxide-freebsd-x64": "4.1.11", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-x64-musl": "4.1.11", + "@tailwindcss/oxide-wasm32-wasi": "4.1.11", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz", + "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz", + "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz", + "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz", + "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz", + "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz", + "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz", + "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz", + "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz", + "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz", + "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@emnapi/wasi-threads": "^1.0.2", + "@napi-rs/wasm-runtime": "^0.2.11", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz", + "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz", + "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.11.tgz", + "integrity": "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.11", + "@tailwindcss/oxide": "4.1.11", + "tailwindcss": "4.1.11" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", + "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", + "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.190", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.190.tgz", + "integrity": "sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.7.0.tgz", + "integrity": "sha512-3FUYSwlvB/5wRJVTL/aavqHmfUKe0+Xm9MllkYgGo9eDwNdkvwlJGjpPxono1kCycLt6AnDTgjmXvK3/B4QGuw==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.7.0.tgz", + "integrity": "sha512-wwGS19VkNBkneVh9/YD0pK3IsjWxQUVMDD6drlG7eJpo1rXBtctBqDyBm/k+oKHRAm1x9XWT3JFC82QI9YOXXA==", + "license": "MIT", + "dependencies": { + "react-router": "7.7.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/rollup": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", + "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e5bf788 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "app", + "homepage": "https://aria-lab.cs.utah.edu/", + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --host", + "build": "vite build", + "fetch-sheet": "node scripts/fetch-sheet.js", + "download-images": "node scripts/download-images.js", + "preview": "vite preview" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@fortawesome/free-brands-svg-icons": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@fortawesome/react-fontawesome": "^0.2.2", + "@tailwindcss/vite": "^4.1.8", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-router-dom": "^7.6.2", + "tailwindcss": "^4.1.8" + }, + "devDependencies": { + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.5.1", + "vite": "^6.3.5" + } +} diff --git a/people.md b/people.md deleted file mode 100644 index 2257158..0000000 --- a/people.md +++ /dev/null @@ -1,179 +0,0 @@ ---- -layout: default -title: People ---- - -
-

People

- -

Faculty Members

-
- Faculty Picture -
-

Daniel Brown

-

I'm an assistant professor in the Kahlert School of Computing and the Robotics Center at the University of Utah. I completed my postdoc at UC Berkeley in 2022 and received my Ph.D. in Computer Science from UT Austin in 2020. My research broadly focuses on human-centered AI and human-AI alignment. My goal is to develop robots and other AI systems that can safely and efficiently interact with, learn from, teach, and empower human users. My lab's research spans the areas of human-robot interaction, reward and preference learning, human-in-the-loop machine learning, and AI safety. I am interested in applications in assistive, rehab, and surgical robotics, personal AI assistants, swarm robotics, and autonomous driving.

- -
-
- -

PhD Students

-
- Connor -
-

Connor Mattson

-

I am a second year Ph.D. Robotics Student in the Robotics Center and Kahlert School of Computing at the University of Utah. My primary research interests are Human-Robot Interaction, Multi-Agent RLHF, and Swarm Robotics. Currently I'm researching how machine learning can help humans understand what their robots are capable of, how we can efficiently leverage human input to teach multi-robot systems how to perform tasks, and how to share control of high-DoF robots between human teleoperators and AI. After my Ph.D., I plan to continue my research in a tenure-track faculty position at a research-focused university.

- -
-
- -
- Eric -
-

Eric Brewer

-

I’m generally interested in learning algorithms, i.e., reinforcement learning, especially regarding perception.

- -
-
- - -
- Zohre -
-

Zohre Karimi

-

I am a third-year Ph.D. student in Robotics at the Kahlert School of Computing, University of Utah supervised by Dr. Daniel Brown. My research centers on Human-Robot Interaction and Surgical Robotics. To be more specific I am working on developing advanced reward learning techniques and imitation learning algorithms to enhance the capabilities of autonomous systems in surgical robotics. By integrating machine learning with robotics, I aim to improve precision, safety, and efficiency in robotic-assisted surgeries. In addition to this, I am engaged in projects exploring shared control between robots and humans, aiming to enhance collaborative interactions across various domains.

- -
-
- -
- Atharv -
-

Atharv Belsare

-

I am a first year Ph.D. student in Computer Science at the Kahlert School of Computing. My research interests include Human-Robot Interaction and Assistive Robotics.

- -
-
- -
- Zifan -
-

Zifan Wu

-

I am a first-year Ph.D. student at the University of Utah. My primary research focus is on Deep Reinforcement Learning (DRL). Specifically, I've been investigating methods to improve the sample efficiency and safety of DRL algorithms. To that end, I delve into fields such as model-based RL, offline RL, constrained RL, and also representation learning. Currently I'm interested in studying the relationship between the data distribution shift during policy learning and the plasticity loss in the policy network (inability to adapt to unseen data distributions).

- -
-
- -
- Ali -
-

Ali Larian

-

I am a PhD student at the University of Utah, working under the supervision of Dr. Daniel Brown. My research focuses on designing and implementing models that enable robots to self-assess their performance and operate independently of human supervision, while remaining aligned with human objectives. To achieve this, I use a variety of tools, including Reinforcement Learning (RL), Inverse Reinforcement Learning (IRL), Bayesian IRL, and learning from different types of human feedback. -In my free time, you can find me playing tennis or swimming. I also enjoy reading and discussing topics related to economics.

- -
-
- -
- Akansha -
-

Akansha Kalra

-

I'm a PhD student in the CS program advised by Dr. Daniel Brown. I graduated with an MS in Electrical and Computer Engineering from Carnegie Mellon University .

- -
-
- -
- Varun -
-

Varun Raveendra

-

I am a PhD student at the University of Utah. My research interests include Reinforcement Learning with Robots, RLHF, Swarm Robots, and Multi-Agent Robots.

- -
-
- -

Graduate Students

-
- Seongil -
-

Seongil Heo

-

I am a first-year M.S. student in Computer Science at the University of Utah. I am advised by Professor Daniel Brown and conduct research focusing on multi-agent systems and Swarm Robotics.

- -
-
- -
- Parth -
-

Parth Bhandari

-

I am a first-year M.S. student majoring in Computer Science, working under the supervision of Dr. Daniel Brown. My research interests include Generative AI, Large Language Models, and I have experience with recommendation systems and conversational chatbots.

- -
-
- -

Undergraduate Students

-
- Thomas -
-

Thomas Fenno

-

I'm an undergraduate student at the University of Utah majoring in Computer Science with a minor in Cognitive Science. My interests lie in AI Human-AI inter and AI safety. Currently, I'm working on research related to goal inference capabilities of AI agents by analyzing human behavior in dynamic environments, under the guidance of Dr. Daniel S. Brown. My long-term goal is to pursue a PhD and contribute to advancing AI in ways that are provably beneficial to citizens.

- -
-
- -

Alumni

-
- Anda -
-

Anda Xie

-

I am a High School Junior at West High School volunteering as an intern at the Kahlert School of Computing at the University of Utah. In the summer of 2024, I worked in Professor Daniel Brown’s research laboratory assisting in the construction of swarm robots for research in emergent behavior as well as the operation of a ROS control system. I am interested in both software and hardware development. I plan to pursue an undergraduate degree in EE at a research focused university before graduate school.

- -
-
- -
diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..a212897 --- /dev/null +++ b/public/404.html @@ -0,0 +1,19 @@ + + + + + + Redirecting… + + + + + Redirecting… + + + \ No newline at end of file diff --git a/_site/assets/images/banner.png b/public/UofU.png similarity index 100% rename from _site/assets/images/banner.png rename to public/UofU.png diff --git a/public/images/banner/2025AAMAS.png b/public/images/banner/2025AAMAS.png new file mode 100644 index 0000000..eb1768d Binary files /dev/null and b/public/images/banner/2025AAMAS.png differ diff --git a/public/images/banner/MSRobotGrads.png b/public/images/banner/MSRobotGrads.png new file mode 100644 index 0000000..f1b77ff Binary files /dev/null and b/public/images/banner/MSRobotGrads.png differ diff --git a/assets/images/PXL_20240914_141904501.jpg b/public/images/banner/banner.jpg similarity index 100% rename from assets/images/PXL_20240914_141904501.jpg rename to public/images/banner/banner.jpg diff --git a/_site/assets/images/DanielBrown.jpg b/public/images/people/1-DanielBrown.jpg similarity index 100% rename from _site/assets/images/DanielBrown.jpg rename to public/images/people/1-DanielBrown.jpg diff --git a/public/images/people/10-SeongilHeo.jpg b/public/images/people/10-SeongilHeo.jpg new file mode 100644 index 0000000..c406932 Binary files /dev/null and b/public/images/people/10-SeongilHeo.jpg differ diff --git a/assets/images/ParthBhandari.jpeg b/public/images/people/11-ParthBhandari.jpeg similarity index 100% rename from assets/images/ParthBhandari.jpeg rename to public/images/people/11-ParthBhandari.jpeg diff --git a/assets/images/ThomasFenno.jpg b/public/images/people/12-ThomasFenno.jpg similarity index 100% rename from assets/images/ThomasFenno.jpg rename to public/images/people/12-ThomasFenno.jpg diff --git a/assets/images/AndaXie.jpg b/public/images/people/13-AndaXie.jpg similarity index 100% rename from assets/images/AndaXie.jpg rename to public/images/people/13-AndaXie.jpg diff --git a/_site/assets/images/ConnorMattson.png b/public/images/people/2-ConnorMattson.png similarity index 100% rename from _site/assets/images/ConnorMattson.png rename to public/images/people/2-ConnorMattson.png diff --git a/People/Lab Website Information - {Eric Brewer}/Eric Brewer.jpg b/public/images/people/3-EricBrewer.jpg similarity index 100% rename from People/Lab Website Information - {Eric Brewer}/Eric Brewer.jpg rename to public/images/people/3-EricBrewer.jpg diff --git a/_site/assets/images/ZohreKarimi.jpg b/public/images/people/4-ZohreKarimi.jpg similarity index 100% rename from _site/assets/images/ZohreKarimi.jpg rename to public/images/people/4-ZohreKarimi.jpg diff --git a/_site/assets/images/AtharvBelsare.jpg b/public/images/people/5-AtharvBelsare.jpg similarity index 100% rename from _site/assets/images/AtharvBelsare.jpg rename to public/images/people/5-AtharvBelsare.jpg diff --git a/_site/assets/images/ZifanWu.jpg b/public/images/people/6-ZifanWu.jpg similarity index 100% rename from _site/assets/images/ZifanWu.jpg rename to public/images/people/6-ZifanWu.jpg diff --git a/assets/images/AliLarian.jpg b/public/images/people/7-AliLarian.jpg similarity index 100% rename from assets/images/AliLarian.jpg rename to public/images/people/7-AliLarian.jpg diff --git a/assets/images/AkanshaKalra.png b/public/images/people/8-AkanshaKalra.png similarity index 100% rename from assets/images/AkanshaKalra.png rename to public/images/people/8-AkanshaKalra.png diff --git a/assets/images/VarunRaveendra.jpg b/public/images/people/9-VarunRaveendra.jpg similarity index 100% rename from assets/images/VarunRaveendra.jpg rename to public/images/people/9-VarunRaveendra.jpg diff --git a/public/images/people/placeholder.png b/public/images/people/placeholder.png new file mode 100644 index 0000000..1d0fd84 Binary files /dev/null and b/public/images/people/placeholder.png differ diff --git a/public/images/placeholder.png b/public/images/placeholder.png new file mode 100644 index 0000000..b8c902e Binary files /dev/null and b/public/images/placeholder.png differ diff --git a/assets/images/modelling.png b/public/images/publications/1-2023Gaurav.png similarity index 100% rename from assets/images/modelling.png rename to public/images/publications/1-2023Gaurav.png diff --git a/_site/assets/images/Connor-publications/novelty.gif b/public/images/publications/10-2023C..gif similarity index 100% rename from _site/assets/images/Connor-publications/novelty.gif rename to public/images/publications/10-2023C..gif diff --git a/assets/images/QuantifyingAssistive.gif b/public/images/publications/11-2023Jerry.gif similarity index 100% rename from assets/images/QuantifyingAssistive.gif rename to public/images/publications/11-2023Jerry.gif diff --git a/assets/images/DemosBIRL.png b/public/images/publications/12-2024Tu.png similarity index 100% rename from assets/images/DemosBIRL.png rename to public/images/publications/12-2024Tu.png diff --git a/assets/images/Jordan-publications/ModellingMDN.png b/public/images/publications/13-2024Jordan.png similarity index 100% rename from assets/images/Jordan-publications/ModellingMDN.png rename to public/images/publications/13-2024Jordan.png diff --git a/_site/assets/images/Zohre-publications/RewardFromSubOptimalDemos.png b/public/images/publications/14-2024Zohre.png similarity index 100% rename from _site/assets/images/Zohre-publications/RewardFromSubOptimalDemos.png rename to public/images/publications/14-2024Zohre.png diff --git a/_site/assets/images/Connor-publications/xprefs.gif b/public/images/publications/15-2024Anurag.gif similarity index 100% rename from _site/assets/images/Connor-publications/xprefs.gif rename to public/images/publications/15-2024Anurag.gif diff --git a/assets/images/Zero-ShotAutonomy.png b/public/images/publications/16-2025Atharv.png similarity index 100% rename from assets/images/Zero-ShotAutonomy.png rename to public/images/publications/16-2025Atharv.png diff --git a/assets/images/UncertaintyAwareSurgery.png b/public/images/publications/17-2025Jordan.png similarity index 100% rename from assets/images/UncertaintyAwareSurgery.png rename to public/images/publications/17-2025Jordan.png diff --git a/assets/images/EmergentBehavior.png b/public/images/publications/18-2025Connor.png similarity index 100% rename from assets/images/EmergentBehavior.png rename to public/images/publications/18-2025Connor.png diff --git a/assets/images/neckexo.png b/public/images/publications/2-2023Jordan.png similarity index 100% rename from assets/images/neckexo.png rename to public/images/publications/2-2023Jordan.png diff --git a/assets/images/SIRL.png b/public/images/publications/3-2023Andreea.png similarity index 100% rename from assets/images/SIRL.png rename to public/images/publications/3-2023Andreea.png diff --git a/assets/images/Benchmarks.png b/public/images/publications/4-2023Daniel.png similarity index 100% rename from assets/images/Benchmarks.png rename to public/images/publications/4-2023Daniel.png diff --git a/assets/images/Causal.png b/public/images/publications/5-2023Jeremy.png similarity index 100% rename from assets/images/Causal.png rename to public/images/publications/5-2023Jeremy.png diff --git a/assets/images/Contexual Reliability.png b/public/images/publications/6-2023Gaurav.png similarity index 100% rename from assets/images/Contexual Reliability.png rename to public/images/publications/6-2023Gaurav.png diff --git a/assets/images/PBRL.png b/public/images/publications/7-2024Yi.png similarity index 100% rename from assets/images/PBRL.png rename to public/images/publications/7-2024Yi.png diff --git a/assets/images/PCG.png b/public/images/publications/8-2023Nancy.png similarity index 100% rename from assets/images/PCG.png rename to public/images/publications/8-2023Nancy.png diff --git a/_site/assets/images/Connor-publications/pub1.gif b/public/images/publications/9-2023C..gif similarity index 100% rename from _site/assets/images/Connor-publications/pub1.gif rename to public/images/publications/9-2023C..gif diff --git a/public/images/videos/4-2025Ploutos.png b/public/images/videos/4-2025Ploutos.png new file mode 100644 index 0000000..6971a9c Binary files /dev/null and b/public/images/videos/4-2025Ploutos.png differ diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000..c14d435 Binary files /dev/null and b/public/logo.png differ diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..d4d05e1 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,14 @@ +{ + "short_name": "ARIA Lab", + "name": "Aligned, Robust and Interactive Autonomy Lab", + "icons": [ + { + "src": "logo.png", + "type": "image/png", + "sizes": "800x740" + } + ], + "start_url": ".", + "display": "standalone", + "background_color": "#707271" +} diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..c2a49f4 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/publications.md b/publications.md deleted file mode 100644 index a694f9d..0000000 --- a/publications.md +++ /dev/null @@ -1,314 +0,0 @@ ---- -layout: default -title: Publications ---- - -
-

Publications

- -
-
- Publication Image -
-
-

Discovery and Deployment of Emergent Robot Swarm Behaviors via Representation Learning and Real2Sim2Real Transfer

-

Connor Mattson, Varun Raveendra, Ricardo Vega, Cameron Nowzari, Daniel S Drew, Daniel S Brown

-

International Conference on Autonomous Agents and Multiagent Systems (AAMAS 2025), May 2025.

- -
-
- -
-
- Publication Image -
-
-

Early Failure Detection in Autonomous Surgical Soft-Tissue Manipulation via Uncertainty Quantification

-

Jordan Thompson, Ronald Koe, Anthony Le, Gabriella Goodman, Daniel S. Brown, Alan Kuntz

-

Conference, Month, Year

- -
-
- -
-
- Publication Image -
-
-

Toward Zero-Shot User Intent Recognition in Shared Autonomy

-

Atharv Belsare*, Zohre Karimi*, Connor Mattson*, Daniel S. Brown

-

IEEE/ACM International Conference on Human-Robot Interaction (HRI), 2025.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Representation Learning for Cross-Embodiment Inverse Reinforcement Learning from Mixed-Quality Demonstrations

-

Anurag Aribandi*, C. Mattson* and Daniel S. Brown

-

Conference, Month, Year

- -

* denotes equal contribution.

-

(Recently Accepted, Links available soon)

-
-
- -
-
- Publication Image -
-
-

Reward Learning from Suboptimal Demonstrations with Applications in Surgical Electrocautery

-

Zohre Karimi*, Shing-Hei Ho*, Bao Thach, Alan Kuntz and Daniel S. Brown

-

International Symposium on Medical Robotics (ISMR), August 2024.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Modeling Kinematic Uncertainty of Tendon-Driven Continuum Robots via Mixture Density Networks

-

Jordan Thompson, Brian Y. Cho, Daniel S. Brown and Alan Kuntz

-

International Symposium on Medical Robotics (ISMR), August 2024.

- -
-
- -
-
- Publication Image -
-
-

Autonomous Assessment of Demonstration Sufficiency via Bayesian Inverse Reinforcement Learning

-

Tu Trinh, Haoyu Chen and Daniel S. Brown

-

Human-Robot Interaction, March 2024.

- -
-
- -
-
- Publication Image -
-
-

Quantifying Assistive Robustness Via the Natural-Adversarial Frontier

-

Jerry Zhi-Yang He, Zackory Erickson, Daniel S. Brown and Anca D. Dragan

-

Conference on Robot Learning (CoRL), October 2023.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Leveraging Human Feedback to Evolve and Discover Novel Emergent Behaviors in Robot Swarms

-

C. Mattson and Daniel S. Brown

-

Genetic and Evolutionary Computation Conference (GECCO), July 2023.

- -
-
- -
-
- Publication Image -
-
-

Exploring Behavior Discovery Methods for Heterogeneous Swarms of Limited-Capability Robots

-

C. Mattson, J. C. Clark, and Daniel S. Brown

-

Exploring Behavior Discovery Methods for Heterogeneous Swarms of Limited-Capability Robots, June 2023.

- -
-
- - - -
-
- Publication Image -
-
-

Player-Centric Procedural Content Generation: Enhancing Runtime Customization by Integrating Real-Time Player Feedback

-

Nancy N Blackburn*, M Gardone* and Daniel S Brown

-

Companion Proceedings of the Annual Symposium on Computer-Human Interaction in Play (CHI PLAY), October 2023.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Efficient Preference-Based Reinforcement Learning Using Learned Dynamics Models

-

Yi Liu*, Gaurav Datta*, Ellen Novoseller and Daniel S. Brown

-

International Conference on Robotics and Automation (ICRA), February 2024.

- -

* denotes equal contribution.

-
-
- -
-
- Publication Image -
-
-

Contextual Reliability: When Different Features Matter in Different Contexts

-

Gaurav Ghosal, Amrith Setlur, Daniel S. Brown, Anca D. Dragan and Aditi Raghunathan

-

International Conference on Machine Learning (ICML), July 2023.

- -
-
- -
-
- Publication Image -
-
-

Causal Confusion and Reward Misidentification in Preference-Based Reward Learning

-

Jeremy Tien, Jerry Zhi-Yang He, Zackory Erickson, Anca D. Dragan and Daniel S. Brown

-

International Conference on Learning Representations (ICLR), March 2023.

- -
-
- -
-
- Publication Image -
-
-

Benchmarks and Algorithms for Offline Preference-Based Reward Learning

-

Daniel Shin, Anca D. Dragan and Daniel S. Brown

-

Transactions on Machine Learning Research (TMLR), January 2023.

- -
-
- -
-
- Publication Image -
-
-

SIRL: Similarity-based Implicit Representation Learning

-

Andreea Bobu, Yi Liu, Rohin Shah, Daniel S. Brown and Anca D. Dragan

-

International Conference on Human Robot Interaction (HRI), March 2023.

- -
-
- -
-
- Publication Image -
-
-

Towards a Gaze-Driven Assistive Neck Exoskeleton via Virtual Reality Data Collection

-

Jordan Thompson, Haohan Zhang and Daniel S. Brown

-

HRI Workshop on Virtual, Augmented, and Mixed-Reality for Human-Robot Interactions, March 2023.

- -
-
- -
-
- Publication Image -
-
-

The Effect of Modeling Human Rationality Level on Learning Rewards from Multiple Feedback Types.

-

Gaurav R. Ghosal, Matthew Zurek, Daniel S. Brown and Anca D. Dragan

-

AAAI Conference on Artificial Intelligence (AAAI), Month 2023.

- -

* denotes equal contribution.

-
-
- - -
- diff --git a/research.md b/research.md deleted file mode 100644 index 0a650ed..0000000 --- a/research.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -layout: default -title: Research ---- - -
-

Research

-
- -Welcome to our research page! Our lab is focused on advancing the fields of human-centered AI and human-robot interaction, with specific emphasis on reward learning, assistive and medical robotics, safety and robustness, and multi-agent systems. - ---- - -## Reward Learning - -Reward learning is at the core of creating intelligent systems that can make decisions based on feedback. Our research in this area focuses on: - -- **Key Topics**: Reinforcement learning, inverse reinforcement learning, human-in-the-loop learning -- **Current Projects**: - - **Learning reward functions that transfer across different robot/agent embodiments:** How can you take demonstrations from an agent and learn a reward function that transfers to a new agent with potentially different body shape, transition dynamics, action space, etc? How can you leverage human feedback to perform cross-embodiment reward learning from suboptimal demonstrations? - - **Learning from multiple forms of human feedback:** How should AI systems fuse different forms of human feedback, such as natural language, corrections, comparisons, demonstrations, e-stops, etc? What types of feedback are most informative for learning and when should a robot query for a specific type of feedback? -- **Publications**: [Link to publications or references] - - ---- - -## Assistive and Medical Robotics - -We are developing robotic systems that assist individuals with disabilities and improve medical care. Our work includes: - -- **Key Topics**: Shared control, surgical automation, rehabilitation robotics, human-robot interaction -- **Current Projects**: - - **Learning from human preferences to learn rewards for surgical tasks:** Surgical tasks are messy and everything is deformable and partially observed. How can we perform RL from human feedback in these types of settings? - - **AI-enabled assistive neck exoskeletons for individuals with neck disabilities:** Many people suffer from head-drop and other neck disabilities, significantly impacting their quality of life. We are designing AI controllers for the world's first powered neck exoskelton that can infer user intent with the aim of restoring normal neck mobility. -- **Publications**: [Link to publications or references] - ---- - -## Safety, Robustness, and Transparency - -Ensuring the safety and robustness of robotic systems is crucial for deployment in real-world settings. Our research focuses on: - -- **Key Topics**: Uncertainty quantification, verification, adversarial robustness, interetability -- **Current Projects**: - - **Robots that know when they need to request human interventions:** Robots need to know what they know and what they don't know. Especially in risk-sensitive domains, such as surgical robotics, robots need to be able to reliably identify novel and risky states so they can request surgeon interventions. - - **Interpretable reward learning for alignment verification:** Black-box neural networks are hard to interpret and debug. Can we use more interpretable structures such as differentiable decision trees to assist humans in interpreting learned rewards? - - **Demonstration sufficiency:** How can robots and other AI systems that learn from demonstrations know if they have received enough data? How can robots provide high-confidence guarantees on their performance in these types of settings? -- **Publications**: [Link to publications or references] - ---- - -## Multi-Agent Systems - -We explore how multiple autonomous agents can collaborate and interact to solve complex problems. Our work in this area includes: - -- **Key Topics**: Emergent behaviors, bio-inspired swarms, learning from human feedback, multi-agent RL -- **Current Projects**: - - **Human-in-the-loop discovery of emergent swarm behaviors:** Multi-agent systems often exhibit facinating emergent collective behaviors that result from simple local interactions and rules. However, most work on swarm robotics is focused on engineering specific behaviors. We take an alternative approach and ask the question, given a set of robots with certain capabilities, what are the different emergent behaviors that are possible? - - **Human-swarm interaction:** Swarms are typically composed of large numbers of simple agents. Thus, it is intractable to have a human micro-manage the swarm. How can humans efficiently interact with many robots? Can the human interact with the swarm at higher-levels of abstraction? -- **Publications**: [Link to publications or references] - - ---- - diff --git a/scripts/download-images.js b/scripts/download-images.js new file mode 100644 index 0000000..2922160 --- /dev/null +++ b/scripts/download-images.js @@ -0,0 +1,142 @@ +import fs from 'fs'; +import path from 'path'; +import { pipeline } from 'stream'; +import { promisify } from 'util'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const streamPipeline = promisify(pipeline); +const DRIVE_BASE = 'https://drive.google.com/uc?export=download'; +const USER_AGENT = process.env.GDRIVE_UA || 'aria-gdrive-downloader/1.0'; + +function defaultHeaders() { + return { + 'user-agent': USER_AGENT, + 'accept': '*/*', + }; +} + +/** Read config from env or local file */ +function parseConfig() { + // Try image-archive.json in the same folder as this script + const localArchive = path.resolve(__dirname, 'image-archive.json'); + if (fs.existsSync(localArchive)) { + try { + return JSON.parse(fs.readFileSync(localArchive, 'utf8')); + } catch (e) { + console.error('Failed to read/parse image-archive.json'); + throw e; + } + } + return []; +} + +/** Ensure directory exists for file */ +function ensureDirFor(filePath) { + const dir = path.dirname(filePath); + if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); +} + +/** Extract file ID from link */ +function extractIdFromLink(href) { + if (!href) return null; + + let m = href.match(/\/file\/d\/([0-9A-Za-z_-]+)/); + if (m) return m[1]; + + m = href.match(/[?&]id=([0-9A-Za-z_-]+)/); + if (m) return m[1]; + + m = href.match(/\/uc\?id=([0-9A-Za-z_-]+)/); + if (m) return m[1]; + + m = href.match(/\/d\/([0-9A-Za-z_-]+)/); + if (m) return m[1]; + + return null; +} + +/** Collect cookies from headers */ +function collectCookies(headers) { + if (typeof headers.getSetCookie === 'function') { + const arr = headers.getSetCookie(); + if (arr && arr.length) { + return arr.map((c) => c.split(';')[0]).join('; '); + } + } + const raw = headers.raw ? headers.raw()['set-cookie'] : headers.get('set-cookie'); + if (!raw) return ''; + return (Array.isArray(raw) ? raw : [raw]).map((c) => c.split(';')[0]).join('; '); +} + +async function fetchWithConfirm(link) { + if (typeof link !== 'string' || !/^https?:\/\//i.test(link)) { + throw new Error('fetchWithConfirm: a valid HTTP(S) Google Drive link is required.'); + } + + let res = await fetch(link, { redirect: 'manual', headers: defaultHeaders() }); + + if (res.status >= 300 && res.status < 400) { + const loc = res.headers.get('location'); + if (!loc) throw new Error('Redirect without Location header.'); + res = await fetch(loc, { redirect: 'follow', headers: defaultHeaders() }); + } + + const disp = res.headers.get('content-disposition'); + if (disp && /attachment/i.test(disp)) return res; + + const id = extractIdFromLink(link); + if (!id) { + throw new Error('Could not extract file id from link'); + } + + const cookie = collectCookies(res.headers); + const confirmUrl = `${DRIVE_BASE}&id=${encodeURIComponent(id)}`; + return await fetch(confirmUrl, { + headers: cookie ? { ...defaultHeaders(), Cookie: cookie } : defaultHeaders(), + redirect: 'follow', + }); +} + +/** Download one file */ +async function downloadOne({ link, out: dir }) { + const out = path.join("public", dir); + if (!link || !out) { + throw new Error('Each entry must have either link and out.'); + } + + ensureDirFor(out); + + console.log(`Downloading ${link} → ${out}`); + + const res = await fetchWithConfirm(link); + if (!res.ok) { + throw new Error(`HTTP ${res.status} for link=${link}`); + } + + await streamPipeline(res.body, fs.createWriteStream(out)); + console.log(`Saved: ${out}`); + return out; +} + +/** Main entry */ +async function main() { + const list = parseConfig(); + if (!Array.isArray(list) || list.length === 0) { + console.log('No files to download. Skipping.'); + return; + } + + for (const entry of list) { + await downloadOne(entry); + } + + console.log(`All ${list.length} file(s) downloaded successfully.`); +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); \ No newline at end of file diff --git a/scripts/fetch-sheet.js b/scripts/fetch-sheet.js new file mode 100644 index 0000000..da7a827 --- /dev/null +++ b/scripts/fetch-sheet.js @@ -0,0 +1,287 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { execSync } from 'child_process'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// Collect image download specs +const imageArchive = []; + +function parseTsv(filePath) { + const content = fs.readFileSync(filePath, 'utf8'); + const lines = content.trim().split('\n'); + if (lines.length < 2) { + console.error(`No data found in TSV file: ${filePath}`); + process.exit(1); + } + const headers = lines[0].split('\t').map(h => h.trim()); + const data = lines.slice(1).map(line => { + const values = line.split('\t').map(v => v.trim()); + const item = {}; + headers.forEach((h, i) => { + const raw = values[i] ?? ''; + let parsed; + + // Semicolon-separated list detection + if (raw.includes(';')) { + parsed = raw.split(';').map(s => s.trim()); + } + // JSON array detection: values like "[a,b]" or '["a","b"]' + else if (/^\s*\[.*\]\s*$/.test(raw)) { + try { + parsed = JSON.parse(raw); + } catch { + parsed = raw; + } + } + // Boolean detection + else if (/^(true|false)$/i.test(raw)) { + parsed = raw.toLowerCase() === 'true'; + } + // Number detection + else { + const num = Number(raw); + parsed = !isNaN(num) && raw !== '' ? num : raw; + } + item[h] = parsed; + }); + return item; + }); + return data; +} + +function writeJson(outPath, payload) { + fs.writeFileSync(outPath, JSON.stringify(payload, null, 2), 'utf8'); + if (Array.isArray(payload)) { + console.log(`Wrote ${payload.length} records to ${outPath}`); + } else if (payload && Array.isArray(payload.data)) { + console.log(`Wrote ${payload.data.length} records to ${outPath}`); + } else { + console.log(`Wrote JSON to ${outPath}`); + } +} + +function preHome(allRecords) { + const data = {}; + const BannerImages = []; + + allRecords.forEach(item => { + if (item.Id === 'BannerImage') { + const filename = path.join("/images/banner", item.Filename) + BannerImages.push(filename); + imageArchive.push({ link: String(item.Url).trim(), out: filename }); + } else { + data[item.Id] = item.Value; + } + }); + data.BannerImages = BannerImages; + return data; +} + +function prePeople(allRecords) { + const groups = {}; + + allRecords.forEach(item => { + // Group Alumni separately + const role = item.Alumni ? 'Alumni' : item.Role || 'Others'; + if (!groups[role]) { + groups[role] = []; + } + + // Combine links into a single Links object + const links = {}; + ['Homepage', 'Scholar', 'Github', 'Twitter', 'LinkedIn'].forEach(key => { + if (item[key]) { + links[key] = item[key]; + } + delete item[key]; + }); + item.Links = links; + if (item.Image) { + // Set image path + item.Image = path.join("/images/people", item.Filename); + // Collect image archive entry + imageArchive.push({ link: String(item.Url).trim(), out: item.Image }); + } + + groups[role].push(item); + }); + + return Object.entries(groups).map(([role, items]) => ({ + role, + items + })); +} + +function preResearch(allRecords) { + // Extract description and data records + const descRec = allRecords.find(r => Number(r.Id) === 0) || {}; + const description = descRec.Description || descRec.description || ''; + + const items = allRecords + .filter(r => Number(r.Id) !== 0) + .map(record => { + // Handle Current Project fields + if (Array.isArray(record['Current Project'])) { + const titles = record['Current Project']; + const details = {}; + titles.forEach((title, idx) => { + const key = `Current Project ${idx + 1}`; + if (record[key] != null && record[key] !== '') { + details[title] = record[key]; + } + }); + record['Current Project'] = details; + // Remove numbered Current Project fields 1, 2, and 3 + delete record['Current Project 1']; + delete record['Current Project 2']; + delete record['Current Project 3']; + } + return record; + }); + + return { description, data: items }; +} + +function prePublication(allRecords) { + allRecords.forEach(item => { + if (item.Image) { + // Set Image path + item.Image = path.join("/images/publications", item.Filename); + // Collect image archive entry + imageArchive.push({ link: String(item.Url).trim(), out: item.Image }); + } + }); + + return allRecords; +} + +function preVideos(allRecords) { + allRecords.forEach(item => { + if (!item.Image) return; + // Set Image path + item.Image = path.join("/images/videos", item.Filename); + // Collect image archive entry + imageArchive.push({ link: String(item.Url).trim(), out: item.Image }); + }); + + return allRecords; +} + +function processHome() { + const tsvPath = path.resolve(__dirname, '../home.tsv'); + const outPath = path.resolve(__dirname, '../src/data/home.json'); + const url = process.env.HOME_SHEET; + if (!url) { + console.error('Environment variable HOME_SHEET not set'); + process.exit(1); + } + execSync(`curl -L "${url}" -o "${tsvPath}"`, { stdio: 'inherit' }); + const allRecords = parseTsv(tsvPath); + const data = preHome(allRecords) + writeJson(outPath, data); + fs.unlinkSync(tsvPath); + console.log(`Deleted TSV file: ${tsvPath}`); +} + +function processPeople() { + const tsvPath = path.resolve(__dirname, '../people.tsv'); + const outPath = path.resolve(__dirname, '../src/data/people.json'); + const url = process.env.PEOPLE_SHEET; + if (!url) { + console.error('Environment variable PEOPLE_SHEET not set'); + process.exit(1); + } + execSync(`curl -L "${url}" -o "${tsvPath}"`, { stdio: 'inherit' }); + const allRecords = parseTsv(tsvPath); + const data = prePeople(allRecords) + writeJson(outPath, data); + fs.unlinkSync(tsvPath); + console.log(`Deleted TSV file: ${tsvPath}`); +} + +function processResearch() { + const tsvPath = path.resolve(__dirname, '../research.tsv'); + const outPath = path.resolve(__dirname, '../src/data/research.json'); + const url = process.env.RESEARCH_SHEET; + if (!url) { + console.error('Environment variable RESEARCH_SHEET not set'); + process.exit(1); + } + execSync(`curl -L "${url}" -o "${tsvPath}"`, { stdio: 'inherit' }); + const allRecords = parseTsv(tsvPath); + const { description, data: items } = preResearch(allRecords); + writeJson(outPath, { description, data: items }); + fs.unlinkSync(tsvPath); + console.log(`Deleted TSV file: ${tsvPath}`); +} + + +function processVideos() { + const tsvPath = path.resolve(__dirname, '../videos.tsv'); + const outPath = path.resolve(__dirname, '../src/data/videos.json'); + const url = process.env.VIDEOS_SHEET; + if (!url) { + console.error('Environment variable VIDEOS_SHEET not set'); + process.exit(1); + } + execSync(`curl -L "${url}" -o "${tsvPath}"`, { stdio: 'inherit' }); + const allRecords = parseTsv(tsvPath); + const data = preVideos(allRecords); + writeJson(outPath, data); + fs.unlinkSync(tsvPath); + console.log(`Deleted TSV file: ${tsvPath}`); +} + +function processPublications() { + const tsvPath = path.resolve(__dirname, '../publications.tsv'); + const outPath = path.resolve(__dirname, '../src/data/publications.json'); + const url = process.env.PUBLICATIONS_SHEET; + if (!url) { + console.error('Environment variable PUBLICATIONS_SHEET not set'); + process.exit(1); + } + execSync(`curl -L "${url}" -o "${tsvPath}"`, { stdio: 'inherit' }); + const allRecords = parseTsv(tsvPath); + const data = prePublication(allRecords); + writeJson(outPath, data); + fs.unlinkSync(tsvPath); + console.log(`Deleted TSV file: ${tsvPath}`); +} + +function processNews() { + const tsvPath = path.resolve(__dirname, '../news.tsv'); + const outPath = path.resolve(__dirname, '../src/data/news.json'); + const url = process.env.NEWS_SHEET; + if (!url) { + console.error('Environment variable NEWS_SHEET not set'); + process.exit(1); + } + execSync(`curl -L "${url}" -o "${tsvPath}"`, { stdio: 'inherit' }); + const data = parseTsv(tsvPath); + writeJson(outPath, data); + fs.unlinkSync(tsvPath); + console.log(`Deleted TSV file: ${tsvPath}`); +} + +function main() { + processHome(); + processPeople(); + processResearch(); + processVideos(); + processPublications(); + processNews(); + + + // Write aggregated image archive (if any) + if (imageArchive.length > 0) { + const archivePath = path.resolve(__dirname, 'image-archive.json'); + writeJson(archivePath, imageArchive); + } else { + console.log('No image archive entries found.'); + } +} + +main(); \ No newline at end of file diff --git a/scripts/image-archive.json b/scripts/image-archive.json new file mode 100644 index 0000000..277016c --- /dev/null +++ b/scripts/image-archive.json @@ -0,0 +1,142 @@ +[ + { + "link": "https://drive.google.com/file/d/1Y8nM3gOwOZ1acbDsbifVosojURrOHO3D/view?usp=sharing", + "out": "/images/banner/banner.jpg" + }, + { + "link": "https://drive.google.com/file/d/1I3784E6ZBi2beQcSfxcXW6o2ludX5WUO/view?usp=drive_link", + "out": "/images/banner/MSRobotGrads.png" + }, + { + "link": "https://drive.google.com/file/d/1ea9STG33GySrX9R4qSWdjT5EtuW6se-g/view?usp=drive_link", + "out": "/images/banner/2025AAMAS.png" + }, + { + "link": "https://drive.google.com/file/d/1ubi7W-qVWN7Yn1URsF7DBNSeyzCpK0tT/view?usp=drive_link", + "out": "/images/people/1-DanielBrown.jpg" + }, + { + "link": "https://drive.google.com/file/d/16QYZnUj8bI5tDSMlZgz0R2JNN7tPUiAz/view?usp=drive_link", + "out": "/images/people/2-ConnorMattson.png" + }, + { + "link": "https://drive.google.com/file/d/15blAApjRAdokoQm3xVK2yux6Cbl1n4kD/view?usp=drive_link", + "out": "/images/people/3-EricBrewer.jpg" + }, + { + "link": "https://drive.google.com/file/d/1WTy9z5A4xPvjlIloU6oR4_KjI1r7lcAw/view?usp=drive_link", + "out": "/images/people/4-ZohreKarimi.jpg" + }, + { + "link": "https://drive.google.com/file/d/1NGI45RvsECMavEREA_lBCepJT4OhN3k-/view?usp=drive_link", + "out": "/images/people/5-AtharvBelsare.jpg" + }, + { + "link": "https://drive.google.com/file/d/15A08uMuwUMuCQgW5PLfvb0bzDDLxqMV9/view?usp=drive_link", + "out": "/images/people/6-ZifanWu.jpg" + }, + { + "link": "https://drive.google.com/file/d/1ZGGv2PObQwhLjF4M1ZThBxYbR5mV6bow/view?usp=drive_link", + "out": "/images/people/7-AliLarian.jpg" + }, + { + "link": "https://drive.google.com/file/d/10-WKNB5BD6gToHnin2YtdBKwS0dWcgi4/view?usp=drive_link", + "out": "/images/people/8-AkanshaKalra.png" + }, + { + "link": "https://drive.google.com/file/d/1c9AT8QejUcaML3vsYFj0n2Bqv475hj7N/view?usp=drive_link", + "out": "/images/people/9-VarunRaveendra.jpg" + }, + { + "link": "https://drive.google.com/file/d/1t3tYoy02uUZWU6dipWwYawJaGAuzO4jL/view?usp=drive_link", + "out": "/images/people/10-SeongilHeo.jpg" + }, + { + "link": "https://drive.google.com/file/d/1r0ZanHNLyuqyzb9AYVKFGVQaBjZGxQAH/view?usp=drive_link", + "out": "/images/people/11-ParthBhandari.jpeg" + }, + { + "link": "https://drive.google.com/file/d/1XplzPQdv8BxTK5-1U0dqDTXADi4ZFnxP/view?usp=drive_link", + "out": "/images/people/12-ThomasFenno.jpg" + }, + { + "link": "https://drive.google.com/file/d/14W9Ru7dYdzLkZ84ZSc3gf-wIV9YbrBd8/view?usp=drive_link", + "out": "/images/people/13-AndaXie.jpg" + }, + { + "link": "https://drive.google.com/file/d/1SB2JxoUo1sFAEADRzr4VX3U97ZqZveIc/view?usp=drive_link", + "out": "/images/videos/4-2025Ploutos.png" + }, + { + "link": "https://drive.google.com/file/d/1wuAS7NmbhNiSzzTcAa6eDcpfP5gZe7UL/view?usp=drive_link", + "out": "/images/publications/1-2023Gaurav.png" + }, + { + "link": "https://drive.google.com/file/d/1CI7AIjMCTgpsKQ9_bW6esupJh3RPdshc/view?usp=drive_link", + "out": "/images/publications/2-2023Jordan.png" + }, + { + "link": "https://drive.google.com/file/d/1If6uowpIV0wtYEuNJwPWU63uD2InXg4f/view?usp=drive_link", + "out": "/images/publications/3-2023Andreea.png" + }, + { + "link": "https://drive.google.com/file/d/1DMBhYiCY_MpyLf2DXQTzWPTR-2CDnADX/view?usp=drive_link", + "out": "/images/publications/4-2023Daniel.png" + }, + { + "link": "https://drive.google.com/file/d/1_V0NArBeM-dS7pU623pIT7fH-3hCezHi/view?usp=drive_link", + "out": "/images/publications/5-2023Jeremy.png" + }, + { + "link": "https://drive.google.com/file/d/1N5lWqwTLftTloN99zbY-_-rsBjz3IOUH/view?usp=drive_link", + "out": "/images/publications/6-2023Gaurav.png" + }, + { + "link": "https://drive.google.com/file/d/11UHAYLarPMEU5I255LOnahVETH1bb6y-/view?usp=drive_link", + "out": "/images/publications/7-2024Yi.png" + }, + { + "link": "https://drive.google.com/file/d/1ztC0s-IWySUDD_wiPjMEF6NuRb3YRQGx/view?usp=drive_link", + "out": "/images/publications/8-2023Nancy.png" + }, + { + "link": "https://drive.google.com/file/d/1RV0THyPmpveOvrK4S3rPwTnxQjWelrNc/view?usp=drive_link", + "out": "/images/publications/9-2023C..gif" + }, + { + "link": "https://drive.google.com/file/d/1VviMUiIWZYkDunWCf1EjEPWnHRWhBxEn/view?usp=drive_link", + "out": "/images/publications/10-2023C..gif" + }, + { + "link": "https://drive.google.com/file/d/1-Rc4GPSIrUTGTxLFJjU7Rp9sQr2-ObVw/view?usp=drive_link", + "out": "/images/publications/11-2023Jerry.gif" + }, + { + "link": "https://drive.google.com/file/d/1Y2C-FQEkVHvGb0UpqysHQLTsDx5UFU--/view?usp=drive_link", + "out": "/images/publications/12-2024Tu.png" + }, + { + "link": "https://drive.google.com/file/d/1A06wQtVkzoYMcUeWqswBl_sd5TxXN0RH/view?usp=drive_link", + "out": "/images/publications/13-2024Jordan.png" + }, + { + "link": "https://drive.google.com/file/d/1h64SXlrIPxe9wM5fqWraVboXmry52UhO/view?usp=drive_link", + "out": "/images/publications/14-2024Zohre.png" + }, + { + "link": "https://drive.google.com/file/d/1Xg03jfxZNlfR11AC9DNEy-erFXpQuRXW/view?usp=drive_link", + "out": "/images/publications/15-2024Anurag.gif" + }, + { + "link": "https://drive.google.com/file/d/1o1wBsmHRjY0A0k6M3G5Y6Os70psoLtvI/view?usp=drive_link", + "out": "/images/publications/16-2025Atharv.png" + }, + { + "link": "https://drive.google.com/file/d/1WqpQwwTZ6c7zH1l4b2maFfgZ-tpNl3G0/view?usp=drive_link", + "out": "/images/publications/17-2025Jordan.png" + }, + { + "link": "https://drive.google.com/file/d/1_5r9a6_Q2mVCN39VhO40eX2F-C_rD4uI/view?usp=drive_link", + "out": "/images/publications/18-2025Connor.png" + } +] \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..c5ee0e3 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,55 @@ +import React, { Suspense, useEffect } from 'react'; +import { BrowserRouter as Router, Routes, Route, useNavigate, useLocation } from 'react-router-dom'; + +import { Spinner } from '@/components'; +import { Layout } from '@/layout'; +import { routes } from '@/routes' +import PageNotFound from '@/pages/PageNotFound'; + +const AppContent = () => { + const navigate = useNavigate(); + const location = useLocation(); + + useEffect(() => { + const params = new URLSearchParams(window.location.search); + const redirectTo = params.get('redirect'); + if (redirectTo) { + navigate(redirectTo, { replace: true }); + } + }, []); + + useEffect(() => { + const path = location.pathname.split('/')[1]; + const matchedRoute = routes.find(r => r.path === `/${path}`); + const title = matchedRoute?.title ? `${matchedRoute.title}` : 'ARIA Lab'; + document.title = `${title} | Align Robust Interactive Autonomy Lab`; + }, [location]); + + return ( + + + + }> + + }> + {routes.map(({ path, element: Element }, index) => ( + } /> + ))} + } /> + + + + ); +}; + +const App = () => ( + + + +); + +export default App; diff --git a/src/components/Button.jsx b/src/components/Button.jsx new file mode 100644 index 0000000..44ad105 --- /dev/null +++ b/src/components/Button.jsx @@ -0,0 +1,15 @@ +import { FontAwesomeIcon, iconMap } from '@/icons' + +const Button = ({title, link }) => { + + return ( + + ); +}; + +export default Button; diff --git a/src/components/ButtonR.jsx b/src/components/ButtonR.jsx new file mode 100644 index 0000000..caf83cc --- /dev/null +++ b/src/components/ButtonR.jsx @@ -0,0 +1,16 @@ +import { FontAwesomeIcon, iconMap } from '@/icons' + +const ButtonR = ({title, link }) => { + + return ( + + ); +}; + +export default ButtonR; diff --git a/src/components/Carousel.jsx b/src/components/Carousel.jsx new file mode 100644 index 0000000..634720d --- /dev/null +++ b/src/components/Carousel.jsx @@ -0,0 +1,68 @@ +import React, { useState } from 'react'; +import { FontAwesomeIcon } from '@/icons' + +const Carousel = ({ imgList }) => { + const [current, setCurrent] = useState(0); + + const nextImage = () => { + setCurrent((prev) => (prev + 1) % imgList.length); + }; + + const prevImage = () => { + setCurrent((prev) => (prev - 1 + imgList.length) % imgList.length); + }; + + return ( +
+
+
+ {imgList.map((image, idx) => ( +
+ {`carousel-${idx}`} { + e.currentTarget.onError = null; + e.currentTarget.src = "/images/placeholder.png"; + }} + /> +
+ ))} +
+
+ {imgList.length > 1 + && <> + + ❮ + + + ❯ + +
+ {imgList.map((_, idx) => ( + + ))} +
+ + } +
+ ); +}; + +export default Carousel; diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx new file mode 100644 index 0000000..d9659fa --- /dev/null +++ b/src/components/Footer.jsx @@ -0,0 +1,11 @@ +const Footer = () => { + return ( + + ); +}; + +export default Footer; diff --git a/src/components/Header.jsx b/src/components/Header.jsx new file mode 100644 index 0000000..ade836c --- /dev/null +++ b/src/components/Header.jsx @@ -0,0 +1,78 @@ +import React, { useState, useEffect, useRef } from 'react'; +import { Link } from 'react-router-dom'; +import { navigation } from '@/routes/navigation'; +import { FontAwesomeIcon } from '@/icons'; + +const Header = () => { + const [mobileMenu, setMobileMenu] = useState(false); + const menuRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event) => { + if (menuRef.current && !menuRef.current.contains(event.target)) { + setMobileMenu(false); + } + }; + document.addEventListener('mousedown', handleClickOutside); + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, []); + + return ( +
+ {/* Lab Name */} +

ARIA Lab

+ + {/* Mobile hamburger menu (smaller screens) */} +
+ {/* Bars Button */} + + + {/* Drop Nav Menu */} + +
+ + {/* Desktop nav */} + + + {/* U Logo (right) */} + + UofU + + +
+ ); +}; + +export default Header; \ No newline at end of file diff --git a/src/components/Spinner.jsx b/src/components/Spinner.jsx new file mode 100644 index 0000000..af7a169 --- /dev/null +++ b/src/components/Spinner.jsx @@ -0,0 +1,9 @@ +const Spinner = () => { + return ( +
+
+
+ ); +}; + +export default Spinner; diff --git a/src/components/Title.jsx b/src/components/Title.jsx new file mode 100644 index 0000000..d1fb242 --- /dev/null +++ b/src/components/Title.jsx @@ -0,0 +1,9 @@ +const Title = ({ name }) => { + return ( +

+ {name} +

+ ); +}; + +export default Title; diff --git a/src/components/index.jsx b/src/components/index.jsx new file mode 100644 index 0000000..0616f15 --- /dev/null +++ b/src/components/index.jsx @@ -0,0 +1,16 @@ +import Header from './Header'; +import Footer from './Footer'; +import Button from './Button'; +import ButtonR from './ButtonR'; +import Title from './Title'; +import Spinner from './Spinner'; +import Carousel from './Carousel'; +export { + Header, + Footer, + Button, + ButtonR, + Title, + Spinner, + Carousel +}; diff --git a/src/data/home.json b/src/data/home.json new file mode 100644 index 0000000..d5bfaf2 --- /dev/null +++ b/src/data/home.json @@ -0,0 +1,10 @@ +{ + "Title": "Aligned, Robust and Interactive Autonomy Lab at the University of Utah", + "Description": "We're a group of AI researchers working on building and studying the next generation of AI systems with a focus on human-robot interaction, human-in-the-loop reinforcement learning, and AI safety and robustness.", + "numNews": 3, + "BannerImages": [ + "/images/banner/banner.jpg", + "/images/banner/MSRobotGrads.png", + "/images/banner/2025AAMAS.png" + ] +} \ No newline at end of file diff --git a/src/data/index.jsx b/src/data/index.jsx new file mode 100644 index 0000000..7719ed9 --- /dev/null +++ b/src/data/index.jsx @@ -0,0 +1,16 @@ +import home from './home.json'; +import people from "./people.json"; +import research from './research.json'; +import publications from './publications.json'; +import videos from './videos.json'; +import news from './news.json'; + +export { + home, + people, + research, + publications, + videos, + news +}; + diff --git a/src/data/news.json b/src/data/news.json new file mode 100644 index 0000000..e54de60 --- /dev/null +++ b/src/data/news.json @@ -0,0 +1,14 @@ +[ + { + "Id": 1, + "Content": "Congrats to Atharv, Connor, and Zohre for getting their paper \"Toward Zero-Shot User Intent Recognition in Shared Autonomy\" accepted by the ACM/IEEE International Conference on Human-Robot Interaction (HRI'25)." + }, + { + "Id": 2, + "Content": "Congrats to Chia, Eric, and Connor for getting their paper \"A dataset of paired head and eye movements during visual tasks in virtual environments\" accepted by Scientific Data - Nature." + }, + { + "Id": 3, + "Content": "Congrats to Connor and Varun for their paper, \"Discovery and Deployment of Emergent Robot Swarm Behaviors via Representation Learning and Real2Sim2Real Transfer,\" accepted by the 24th International Conference on Autonomous Agents and Multiagent Systems (AAMAS'25)" + } +] \ No newline at end of file diff --git a/src/data/people.json b/src/data/people.json new file mode 100644 index 0000000..ca9544f --- /dev/null +++ b/src/data/people.json @@ -0,0 +1,207 @@ +[ + { + "role": "Faculty Members", + "items": [ + { + "Id": 1, + "Name": "Daniel Brown", + "Image": "/images/people/1-DanielBrown.jpg", + "Role": "Faculty Members", + "Alumni": false, + "Bio": "I'm an assistant professor in the Kahlert School of Computing and the Robotics Center at the University of Utah. I completed my postdoc at UC Berkeley in 2022 and received my Ph.D. in Computer Science from UT Austin in 2020. My research broadly focuses on human-centered AI and human-AI alignment. My goal is to develop robots and other AI systems that can safely and efficiently interact with, learn from, teach, and empower human users. My lab's research spans the areas of human-robot interaction, reward and preference learning, human-in-the-loop machine learning, and AI safety. I am interested in applications in assistive, rehab, and surgical robotics, personal AI assistants, swarm robotics, and autonomous driving.", + "Filename": "1-DanielBrown.jpg", + "Url": "https://drive.google.com/file/d/1ubi7W-qVWN7Yn1URsF7DBNSeyzCpK0tT/view?usp=drive_link", + "Links": { + "Homepage": "https://users.cs.utah.edu/~dsbrown", + "Scholar": "https://scholar.google.com/citations?hl=en&user=A3wg18wAAAAJ&view_op=list_works&sortby=pubdate" + } + } + ] + }, + { + "role": "PhD Students", + "items": [ + { + "Id": 2, + "Name": "Connor Mattson", + "Image": "/images/people/2-ConnorMattson.png", + "Role": "PhD Students", + "Alumni": false, + "Bio": "I am a second year Ph.D. Robotics Student in the Robotics Center and Kahlert School of Computing at the University of Utah. My primary research interests are Human-Robot Interaction, Multi-Agent RLHF, and Swarm Robotics. Currently I'm researching how machine learning can help humans understand what their robots are capable of, how we can efficiently leverage human input to teach multi-robot systems how to perform tasks, and how to share control of high-DoF robots between human teleoperators and AI. After my Ph.D., I plan to continue my research in a tenure-track faculty position at a research-focused university.", + "Filename": "2-ConnorMattson.png", + "Url": "https://drive.google.com/file/d/16QYZnUj8bI5tDSMlZgz0R2JNN7tPUiAz/view?usp=drive_link", + "Links": { + "Homepage": "https://users.cs.utah.edu/~cmattson", + "Scholar": "https://scholar.google.com/citations?user=mQgtCDAAAAAJ&hl=en", + "Github": "https://github.com/Connor-Mattson", + "Twitter": "https://x.com/connormat", + "LinkedIn": "https://www.linkedin.com/in/connorgmattson/" + } + }, + { + "Id": 3, + "Name": "Eric Brewer", + "Image": "/images/people/3-EricBrewer.jpg", + "Role": "PhD Students", + "Alumni": false, + "Bio": "I’m generally interested in learning algorithms, i.e., reinforcement learning, especially regarding perception.", + "Filename": "3-EricBrewer.jpg", + "Url": "https://drive.google.com/file/d/15blAApjRAdokoQm3xVK2yux6Cbl1n4kD/view?usp=drive_link", + "Links": { + "Github": "https://github.com/EricRobertBrewer" + } + }, + { + "Id": 4, + "Name": "Zohre Karimi", + "Image": "/images/people/4-ZohreKarimi.jpg", + "Role": "PhD Students", + "Alumni": false, + "Bio": "I am a third-year Ph.D. student in Robotics at the Kahlert School of Computing, University of Utah supervised by Dr. Daniel Brown. My research centers on Human-Robot Interaction and Surgical Robotics. To be more specific I am working on developing advanced reward learning techniques and imitation learning algorithms to enhance the capabilities of autonomous systems in surgical robotics. By integrating machine learning with robotics, I aim to improve precision, safety, and efficiency in robotic-assisted surgeries. In addition to this, I am engaged in projects exploring shared control between robots and humans, aiming to enhance collaborative interactions across various domains.", + "Filename": "4-ZohreKarimi.jpg", + "Url": "https://drive.google.com/file/d/1WTy9z5A4xPvjlIloU6oR4_KjI1r7lcAw/view?usp=drive_link", + "Links": { + "Homepage": "https://zohre-karimi.github.io" + } + }, + { + "Id": 5, + "Name": "Atharv Belsare", + "Image": "/images/people/5-AtharvBelsare.jpg", + "Role": "PhD Students", + "Alumni": false, + "Bio": "I am a first year Ph.D. student in Computer Science at the Kahlert School of Computing. My research interests include Human-Robot Interaction and Assistive Robotics.", + "Filename": "5-AtharvBelsare.jpg", + "Url": "https://drive.google.com/file/d/1NGI45RvsECMavEREA_lBCepJT4OhN3k-/view?usp=drive_link", + "Links": {} + }, + { + "Id": 6, + "Name": "Zifan Wu", + "Image": "/images/people/6-ZifanWu.jpg", + "Role": "PhD Students", + "Alumni": false, + "Bio": "I am a first-year Ph.D. student at the University of Utah. My primary research focus is on Deep Reinforcement Learning (DRL). Specifically, I've been investigating methods to improve the sample efficiency and safety of DRL algorithms. To that end, I delve into fields such as model-based RL, offline RL, constrained RL, and also representation learning. Currently I'm interested in studying the relationship between the data distribution shift during policy learning and the plasticity loss in the policy network (inability to adapt to unseen data distributions).", + "Filename": "6-ZifanWu.jpg", + "Url": "https://drive.google.com/file/d/15A08uMuwUMuCQgW5PLfvb0bzDDLxqMV9/view?usp=drive_link", + "Links": { + "Scholar": "https://scholar.google.com/citations?user=cHCsqP8AAAAJ&hl", + "Github": "https://github.com/zifanwu" + } + }, + { + "Id": 7, + "Name": "Ali Larian", + "Image": "/images/people/7-AliLarian.jpg", + "Role": "PhD Students", + "Alumni": false, + "Bio": "I am a PhD student at the University of Utah, working under the supervision of Dr. Daniel Brown. My research focuses on designing and implementing models that enable robots to self-assess their performance and operate independently of human supervision, while remaining aligned with human objectives. To achieve this, I use a variety of tools, including Reinforcement Learning (RL), Inverse Reinforcement Learning (IRL), Bayesian IRL, and learning from different types of human feedback. In my free time, you can find me playing tennis or swimming. I also enjoy reading and discussing topics related to economics.", + "Filename": "7-AliLarian.jpg", + "Url": "https://drive.google.com/file/d/1ZGGv2PObQwhLjF4M1ZThBxYbR5mV6bow/view?usp=drive_link", + "Links": { + "Github": "https://github.com/Alilarian" + } + }, + { + "Id": 8, + "Name": "Akansha Kalra", + "Image": "/images/people/8-AkanshaKalra.png", + "Role": "PhD Students", + "Alumni": false, + "Bio": "I'm a PhD student in the CS program advised by Dr. Daniel Brown. I graduated with an MS in Electrical and Computer Engineering from Carnegie Mellon University.", + "Filename": "8-AkanshaKalra.png", + "Url": "https://drive.google.com/file/d/10-WKNB5BD6gToHnin2YtdBKwS0dWcgi4/view?usp=drive_link", + "Links": { + "Homepage": "https://akansha-kalra.github.io", + "Scholar": "https://scholar.google.com/citations?user=QrkO660AAAAJ&hl=en", + "Github": "https://github.com/akansha-kalra" + } + }, + { + "Id": 9, + "Name": "Varun Raveendra", + "Image": "/images/people/9-VarunRaveendra.jpg", + "Role": "PhD Students", + "Alumni": false, + "Bio": "I am a PhD student at the University of Utah. My research interests include Reinforcement Learning with Robots, RLHF, Swarm Robots, and Multi-Agent Robots.", + "Filename": "9-VarunRaveendra.jpg", + "Url": "https://drive.google.com/file/d/1c9AT8QejUcaML3vsYFj0n2Bqv475hj7N/view?usp=drive_link", + "Links": { + "Github": "https://github.com/varunraveendra", + "LinkedIn": "https://www.linkedin.com/in/varun-robotics" + } + } + ] + }, + { + "role": "Graduate Students", + "items": [ + { + "Id": 10, + "Name": "Seongil Heo", + "Image": "/images/people/10-SeongilHeo.jpg", + "Role": "Graduate Students", + "Alumni": false, + "Bio": "I am a first-year M.S. student in Computer Science at the University of Utah. I am advised by Professor Daniel Brown and conduct research focusing on multi-agent systems and Swarm Robotics.", + "Filename": "10-SeongilHeo.jpg", + "Url": "https://drive.google.com/file/d/1t3tYoy02uUZWU6dipWwYawJaGAuzO4jL/view?usp=drive_link", + "Links": { + "Homepage": "https://seongil-heo.com", + "Github": "https://github.com/seongilHeo", + "LinkedIn": "https://www.linkedin.com/in/seongil-heo" + } + }, + { + "Id": 11, + "Name": "Parth Bhandari", + "Image": "/images/people/11-ParthBhandari.jpeg", + "Role": "Graduate Students", + "Alumni": false, + "Bio": "I am a first-year M.S. student majoring in Computer Science, working under the supervision of Dr. Daniel Brown. My research interests include Generative AI, Large Language Models, and I have experience with recommendation systems and conversational chatbots.", + "Filename": "11-ParthBhandari.jpeg", + "Url": "https://drive.google.com/file/d/1r0ZanHNLyuqyzb9AYVKFGVQaBjZGxQAH/view?usp=drive_link", + "Links": { + "Github": "https://github.com/parthbhandari1", + "LinkedIn": "https://www.linkedin.com/in/parthbhandari" + } + } + ] + }, + { + "role": "Undergraduate Students", + "items": [ + { + "Id": 12, + "Name": "Thomas Fenno", + "Image": "/images/people/12-ThomasFenno.jpg", + "Role": "Undergraduate Students", + "Alumni": false, + "Bio": "I'm an undergraduate student at the University of Utah majoring in Computer Science with a minor in Cognitive Science. My interests lie in AI Human-AI inter and AI safety. Currently, I'm working on research related to goal inference capabilities of AI agents by analyzing human behavior in dynamic environments, under the guidance of Dr. Daniel S. Brown. My long-term goal is to pursue a PhD and contribute to advancing AI in ways that are provably beneficial to citizens.", + "Filename": "12-ThomasFenno.jpg", + "Url": "https://drive.google.com/file/d/1XplzPQdv8BxTK5-1U0dqDTXADi4ZFnxP/view?usp=drive_link", + "Links": { + "Homepage": "https://github.com/tomfenno", + "Github": "https://github.com/tomfenno" + } + } + ] + }, + { + "role": "Alumni", + "items": [ + { + "Id": 13, + "Name": "Anda Xie", + "Image": "/images/people/13-AndaXie.jpg", + "Role": "Undergraduate Students", + "Alumni": true, + "Bio": "I am a High School Junior at West High School volunteering as an intern at the Kahlert School of Computing at the University of Utah. In the summer of 2024, I worked in Professor Daniel Brown’s research laboratory assisting in the construction of swarm robots for research in emergent behavior as well as the operation of a ROS control system. I am interested in both software and hardware development. I plan to pursue an undergraduate degree in EE at a research focused university before graduate school.", + "Filename": "13-AndaXie.jpg", + "Url": "https://drive.google.com/file/d/14W9Ru7dYdzLkZ84ZSc3gf-wIV9YbrBd8/view?usp=drive_link", + "Links": { + "Github": "https://github.com/SussyTestAccount" + } + } + ] + } +] \ No newline at end of file diff --git a/src/data/publications.json b/src/data/publications.json new file mode 100644 index 0000000..5e63145 --- /dev/null +++ b/src/data/publications.json @@ -0,0 +1,419 @@ +[ + { + "Id": 1, + "Title": "The Effect of Modeling Human Rationality Level on Learning Rewards from Multiple Feedback Types.", + "Image": "/images/publications/1-2023Gaurav.png", + "Authors": [ + "Gaurav R. Ghosal", + "Matthew Zurek", + "Daniel S. Brown", + "Anca D. Dragan" + ], + "Workshop": "", + "Conference": "AAAI Conference on Artificial Intelligence (AAAI)", + "Month": "February", + "Year": 2023, + "ArXiv": "https://arxiv.org/abs/2208.10687", + "PDF": "https://arxiv.org/pdf/2208.10687", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "* denotes equal contribution", + "Filename": "1-2023Gaurav.png", + "Url": "https://drive.google.com/file/d/1wuAS7NmbhNiSzzTcAa6eDcpfP5gZe7UL/view?usp=drive_link" + }, + { + "Id": 2, + "Title": "Towards a Gaze-Driven Assistive Neck Exoskeleton via Virtual Reality Data Collection", + "Image": "/images/publications/2-2023Jordan.png", + "Authors": [ + "Jordan Thompson", + "Haohan Zhang", + "Daniel S. Brown" + ], + "Workshop": "HRI Workshop", + "Conference": "Virtual, Augmented, and Mixed-Reality for Human-Robot Interactions (VAM-HRI)", + "Month": "March", + "Year": 2023, + "ArXiv": "https://openreview.net/forum?id=6DxA9CMfvJ", + "PDF": "https://openreview.net/pdf?id=6DxA9CMfvJ", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "2-2023Jordan.png", + "Url": "https://drive.google.com/file/d/1CI7AIjMCTgpsKQ9_bW6esupJh3RPdshc/view?usp=drive_link" + }, + { + "Id": 3, + "Title": "SIRL: Similarity-based Implicit Representation Learning", + "Image": "/images/publications/3-2023Andreea.png", + "Authors": [ + "Andreea Bobu", + "Yi Liu", + "Rohin Shah", + "Daniel S. Brown", + "Anca D. Dragan" + ], + "Workshop": "", + "Conference": "ACM/IEEE International Conference on Human Robot Interaction (HRI)", + "Month": "March", + "Year": 2023, + "ArXiv": "https://arxiv.org/abs/2301.00810", + "PDF": "https://arxiv.org/pdf/2301.00810", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "3-2023Andreea.png", + "Url": "https://drive.google.com/file/d/1If6uowpIV0wtYEuNJwPWU63uD2InXg4f/view?usp=drive_link" + }, + { + "Id": 4, + "Title": "Benchmarks and Algorithms for Offline Preference-Based Reward Learning", + "Image": "/images/publications/4-2023Daniel.png", + "Authors": [ + "Daniel Shin", + "Anca D. Dragan", + "Daniel S. Brown" + ], + "Workshop": "", + "Conference": "Transactions on Machine Learning Research (TMLR)", + "Month": "January", + "Year": 2023, + "ArXiv": "https://arxiv.org/abs/2301.01392", + "PDF": "https://arxiv.org/pdf/2301.01392", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "4-2023Daniel.png", + "Url": "https://drive.google.com/file/d/1DMBhYiCY_MpyLf2DXQTzWPTR-2CDnADX/view?usp=drive_link" + }, + { + "Id": 5, + "Title": "Causal Confusion and Reward Misidentification in Preference-Based Reward Learning", + "Image": "/images/publications/5-2023Jeremy.png", + "Authors": [ + "Jeremy Tien", + "Jerry Zhi-Yang He", + "Zackory Erickson", + "Anca D. Dragan", + "Daniel S. Brown" + ], + "Workshop": "", + "Conference": "International Conference on Learning Representations (ICLR)", + "Month": "March", + "Year": 2023, + "ArXiv": "https://arxiv.org/abs/2204.06601", + "PDF": "https://arxiv.org/pdf/2204.06601", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "5-2023Jeremy.png", + "Url": "https://drive.google.com/file/d/1_V0NArBeM-dS7pU623pIT7fH-3hCezHi/view?usp=drive_link" + }, + { + "Id": 6, + "Title": "Contextual Reliability: When Different Features Matter in Different Contexts", + "Image": "/images/publications/6-2023Gaurav.png", + "Authors": [ + "Gaurav Ghosal", + "Amrith Setlur", + "Daniel S. Brown", + "Anca D. Dragan", + "Aditi Raghunathan" + ], + "Workshop": "", + "Conference": "International Conference on Machine Learning (ICML)", + "Month": "July", + "Year": 2023, + "ArXiv": "https://arxiv.org/abs/2307.10026", + "PDF": "https://arxiv.org/pdf/2307.10026", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "6-2023Gaurav.png", + "Url": "https://drive.google.com/file/d/1N5lWqwTLftTloN99zbY-_-rsBjz3IOUH/view?usp=drive_link" + }, + { + "Id": 7, + "Title": "Efficient Preference-Based Reinforcement Learning Using Learned Dynamics Models", + "Image": "/images/publications/7-2024Yi.png", + "Authors": [ + "Yi Liu*", + "Gaurav Datta*", + "Ellen Novoseller", + "Daniel S. Brown" + ], + "Workshop": "", + "Conference": "International Conference on Robotics and Automation (ICRA)", + "Month": "February", + "Year": 2024, + "ArXiv": "https://arxiv.org/abs/2301.04741", + "PDF": "https://arxiv.org/pdf/2301.04741", + "Website": "https://sites.google.com/berkeley.edu/mop-rl", + "Code": "https://github.com/yiliu77/MB-TREX", + "BibTeX": "", + "Note": "", + "Filename": "7-2024Yi.png", + "Url": "https://drive.google.com/file/d/11UHAYLarPMEU5I255LOnahVETH1bb6y-/view?usp=drive_link" + }, + { + "Id": 8, + "Title": "Player-Centric Procedural Content Generation: Enhancing Runtime Customization by Integrating Real-Time Player Feedback", + "Image": "/images/publications/8-2023Nancy.png", + "Authors": [ + "Nancy N Blackburn*", + "M Gardone*", + "Daniel S Brown" + ], + "Workshop": "", + "Conference": "Companion Proceedings of the Annual Symposium on Computer-Human Interaction in Play (CHI PLAY)", + "Month": "October", + "Year": 2023, + "ArXiv": "", + "PDF": "https://dl.acm.org/doi/pdf/10.1145/3573382.3616069", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "8-2023Nancy.png", + "Url": "https://drive.google.com/file/d/1ztC0s-IWySUDD_wiPjMEF6NuRb3YRQGx/view?usp=drive_link" + }, + { + "Id": 9, + "Title": "Exploring Behavior Discovery Methods for Heterogeneous Swarms of Limited-Capability Robots", + "Image": "/images/publications/9-2023C..gif", + "Authors": [ + "C. Mattson", + "J. C. Clark", + "Daniel S. Brown" + ], + "Workshop": "", + "Conference": "International Symposium on Multi-Robot and Multi-Agent Systems (MRS)", + "Month": "June", + "Year": 2023, + "ArXiv": "https://arxiv.org/abs/2310.16941", + "PDF": "https://arxiv.org/pdf/2310.16941", + "Website": "https://sites.google.com/view/heterogeneous-bd-methods/home", + "Code": "https://github.com/Connor-Mattson/SwarmBehaviorDiscovery/tree/MRS-Submission", + "BibTeX": "", + "Note": "", + "Filename": "9-2023C..gif", + "Url": "https://drive.google.com/file/d/1RV0THyPmpveOvrK4S3rPwTnxQjWelrNc/view?usp=drive_link" + }, + { + "Id": 10, + "Title": "Leveraging Human Feedback to Evolve and Discover Novel Emergent Behaviors in Robot Swarms", + "Image": "/images/publications/10-2023C..gif", + "Authors": [ + "C. Mattson", + "Daniel S. Brown" + ], + "Workshop": "", + "Conference": "Genetic and Evolutionary Computation Conference (GECCO)", + "Month": "July", + "Year": 2023, + "ArXiv": "https://arxiv.org/abs/2305.16148", + "PDF": "https://arxiv.org/pdf/2305.16148", + "Website": "https://sites.google.com/view/evolving-novel-swarms/home", + "Code": "https://github.com/Connor-Mattson/SwarmBehaviorDiscovery", + "BibTeX": "", + "Note": "", + "Filename": "10-2023C..gif", + "Url": "https://drive.google.com/file/d/1VviMUiIWZYkDunWCf1EjEPWnHRWhBxEn/view?usp=drive_link" + }, + { + "Id": 11, + "Title": "Quantifying Assistive Robustness Via the Natural-Adversarial Frontier", + "Image": "/images/publications/11-2023Jerry.gif", + "Authors": [ + "Jerry Zhi-Yang He", + "Zackory Erickson", + "Daniel S. Brown", + "Anca D. Dragan" + ], + "Workshop": "", + "Conference": "Conference on Robot Learning (CoRL)", + "Month": "October", + "Year": 2023, + "ArXiv": "https://arxiv.org/abs/2310.10610", + "PDF": "https://arxiv.org/pdf/2310.10610", + "Website": "https://ood-human.github.io/", + "Code": "", + "BibTeX": "", + "Note": "* denotes equal contribution", + "Filename": "11-2023Jerry.gif", + "Url": "https://drive.google.com/file/d/1-Rc4GPSIrUTGTxLFJjU7Rp9sQr2-ObVw/view?usp=drive_link" + }, + { + "Id": 12, + "Title": "Autonomous Assessment of Demonstration Sufficiency via Bayesian Inverse Reinforcement Learning", + "Image": "/images/publications/12-2024Tu.png", + "Authors": [ + "Tu Trinh", + "Haoyu Chen", + "Daniel S. Brown" + ], + "Workshop": "", + "Conference": "ACM/IEEE International Conference on Human Robot Interaction (HRI)", + "Month": "March", + "Year": 2024, + "ArXiv": "https://arxiv.org/abs/2211.15542", + "PDF": "https://arxiv.org/pdf/2211.15542", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "12-2024Tu.png", + "Url": "https://drive.google.com/file/d/1Y2C-FQEkVHvGb0UpqysHQLTsDx5UFU--/view?usp=drive_link" + }, + { + "Id": 13, + "Title": "Modeling Kinematic Uncertainty of Tendon-Driven Continuum Robots via Mixture Density Networks", + "Image": "/images/publications/13-2024Jordan.png", + "Authors": [ + "Jordan Thompson", + "Brian Y. Cho", + "Daniel S. Brown", + "Alan Kuntz" + ], + "Workshop": "", + "Conference": "International Symposium on Medical Robotics (ISMR)", + "Month": "August", + "Year": 2024, + "ArXiv": "https://arxiv.org/abs/2404.04241", + "PDF": "https://arxiv.org/pdf/2404.04241", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "13-2024Jordan.png", + "Url": "https://drive.google.com/file/d/1A06wQtVkzoYMcUeWqswBl_sd5TxXN0RH/view?usp=drive_link" + }, + { + "Id": 14, + "Title": "Reward Learning from Suboptimal Demonstrations with Applications in Surgical Electrocautery", + "Image": "/images/publications/14-2024Zohre.png", + "Authors": [ + "Zohre Karimi*", + "Shing-Hei Ho*", + "Bao Thach", + "Alan Kuntz", + "Daniel S. Brown" + ], + "Workshop": "", + "Conference": "International Symposium on Medical Robotics (ISMR)", + "Month": "August", + "Year": 2024, + "ArXiv": "https://arxiv.org/abs/2404.07185", + "PDF": "https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=10585785", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "* denotes equal contribution", + "Filename": "14-2024Zohre.png", + "Url": "https://drive.google.com/file/d/1h64SXlrIPxe9wM5fqWraVboXmry52UhO/view?usp=drive_link" + }, + { + "Id": 15, + "Title": "Representation Learning for Cross-Embodiment Inverse Reinforcement Learning from Mixed-Quality Demonstrations", + "Image": "/images/publications/15-2024Anurag.gif", + "Authors": [ + "Anurag Aribandi*", + "C. Mattson*", + "Daniel S. Brown" + ], + "Workshop": "HLBRew Workshop", + "Conference": "Reinforcement Learning Conference (RLC)", + "Month": "August", + "Year": 2024, + "ArXiv": "https://arxiv.org/abs/2408.05610", + "PDF": "https://rlj.cs.umass.edu/2024/papers/RLJ_RLC_2024_228.pdf", + "Website": "https://sites.google.com/view/cross-irl-mqme/home", + "Code": "https://github.com/anurag-src/xpref", + "BibTeX": "", + "Note": [ + "* denotes equal contribution", + "(Recently Accepted, Links available soon)" + ], + "Filename": "15-2024Anurag.gif", + "Url": "https://drive.google.com/file/d/1Xg03jfxZNlfR11AC9DNEy-erFXpQuRXW/view?usp=drive_link" + }, + { + "Id": 16, + "Title": "Toward Zero-Shot User Intent Recognition in Shared Autonomy", + "Image": "/images/publications/16-2025Atharv.png", + "Authors": [ + "Atharv Belsare*", + "Zohre Karimi*", + "Connor Mattson*", + "Daniel S. Brown" + ], + "Workshop": "", + "Conference": "ACM/IEEE International Conference on Human Robot Interaction (HRI)", + "Month": "March", + "Year": 2025, + "ArXiv": "https://arxiv.org/abs/2501.08389", + "PDF": "https://arxiv.org/pdf/2501.08389", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "* denotes equal contribution", + "Filename": "16-2025Atharv.png", + "Url": "https://drive.google.com/file/d/1o1wBsmHRjY0A0k6M3G5Y6Os70psoLtvI/view?usp=drive_link" + }, + { + "Id": 17, + "Title": "Early Failure Detection in Autonomous Surgical Soft-Tissue Manipulation via Uncertainty Quantification", + "Image": "/images/publications/17-2025Jordan.png", + "Authors": [ + "Jordan Thompson", + "Ronald Koe", + "Anthony Le", + "Gabriella Goodman", + "Daniel S. Brown", + "Alan Kuntz" + ], + "Workshop": "OOD Workshop", + "Conference": "Robotics: Science and Systems (RSS)", + "Month": "June", + "Year": 2025, + "ArXiv": "https://arxiv.org/abs/2501.10561", + "PDF": "https://arxiv.org/pdf/2501.10561", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "17-2025Jordan.png", + "Url": "https://drive.google.com/file/d/1WqpQwwTZ6c7zH1l4b2maFfgZ-tpNl3G0/view?usp=drive_link" + }, + { + "Id": 18, + "Title": "Discovery and Deployment of Emergent Robot Swarm Behaviors via Representation Learning and Real2Sim2Real Transfer", + "Image": "/images/publications/18-2025Connor.png", + "Authors": [ + "Connor Mattson", + "Varun Raveendra", + "Ricardo Vega", + "Cameron Nowzari", + "Daniel S Drew", + "Daniel S. Brown" + ], + "Workshop": "", + "Conference": "International Conference on Autonomous Agents and Multiagent Systems (AAMAS)", + "Month": "May", + "Year": 2025, + "ArXiv": "https://arxiv.org/abs/2502.15937", + "PDF": "https://arxiv.org/pdf/2502.15937", + "Website": "", + "Code": "", + "BibTeX": "", + "Note": "", + "Filename": "18-2025Connor.png", + "Url": "https://drive.google.com/file/d/1_5r9a6_Q2mVCN39VhO40eX2F-C_rD4uI/view?usp=drive_link" + } +] \ No newline at end of file diff --git a/src/data/research.json b/src/data/research.json new file mode 100644 index 0000000..21cb73f --- /dev/null +++ b/src/data/research.json @@ -0,0 +1,69 @@ +{ + "description": "Welcome to our research page! Our lab is focused on advancing the fields of human-centered AI and human-robot interaction, with specific emphasis on reward learning, assistive and medical robotics, safety and robustness, and multi-agent systems.", + "data": [ + { + "Id": 1, + "Title": "Reward Learning", + "Description": "Reward learning is at the core of creating intelligent systems that can make decisions based on feedback. Our research in this area focuses on:", + "Key Topics": [ + "Reinforcement learning", + "Inverse reinforcement learning", + "Human-in-the-loop learning" + ], + "Current Project": { + "Learning reward functions that transfer across different robot/agent embodiments": "How can you take demonstrations from an agent and learn a reward function that transfers to a new agent with potentially different body shape, transition dynamics, action space, etc? How can you leverage human feedback to perform cross-embodiment reward learning from suboptimal demonstrations?", + "Learning from multiple forms of human feedback": "How should AI systems fuse different forms of human feedback, such as natural language, corrections, comparisons, demonstrations, e-stops, etc? What types of feedback are most informative for learning and when should a robot query for a specific type of feedback?" + }, + "Publication": [] + }, + { + "Id": 2, + "Title": "Assistive and Medical Robotics", + "Description": "We are developing robotic systems that assist individuals with disabilities and improve medical care. Our work includes:", + "Key Topics": [ + "Shared control", + "Surgical automation", + "Rehabilitation robotics", + "Human-robot interaction" + ], + "Current Project": { + "Learning from human preferences to learn rewards for surgical tasks": "Surgical tasks are messy and everything is deformable and partially observed. How can we perform RL from human feedback in these types of settings?", + "AI-enabled assistive neck exoskeletons for individuals with neck disabilities": "Many people suffer from head-drop and other neck disabilities, significantly impacting their quality of life. We are designing AI controllers for the world's first powered neck exoskelton that can infer user intent with the aim of restoring normal neck mobility." + }, + "Publication": [] + }, + { + "Id": 3, + "Title": "Safety, Robustness, and Transparency", + "Description": "Ensuring the safety and robustness of robotic systems is crucial for deployment in real-world settings. Our research focuses on:", + "Key Topics": [ + "Uncertainty quantification", + "Verification", + "Adversarial robustness", + "Interetability" + ], + "Current Project": { + "Robots that know when they need to request human interventions": "Robots need to know what they know and what they don't know. Especially in risk-sensitive domains, such as surgical robotics, robots need to be able to reliably identify novel and risky states so they can request surgeon interventions.", + "Interpretable reward learning for alignment verification": "Black-box neural networks are hard to interpret and debug. Can we use more interpretable structures such as differentiable decision trees to assist humans in interpreting learned rewards?", + "Demonstration sufficiency": "How can robots and other AI systems that learn from demonstrations know if they have received enough data? How can robots provide high-confidence guarantees on their performance in these types of settings?" + }, + "Publication": [] + }, + { + "Id": 4, + "Title": "Multi-Agent Systems", + "Description": "We explore how multiple autonomous agents can collaborate and interact to solve complex problems. Our work in this area includes:", + "Key Topics": [ + "Emergent behaviors", + "Bio-inspired swarms", + "Learning from human feedback", + "Multi-agent RL" + ], + "Current Project": { + "Human-in-the-loop discovery of emergent swarm behaviors": "Multi-agent systems often exhibit facinating emergent collective behaviors that result from simple local interactions and rules. However, most work on swarm robotics is focused on engineering specific behaviors. We take an alternative approach and ask the question, given a set of robots with certain capabilities, what are the different emergent behaviors that are possible?", + "Human-swarm interaction": "Swarms are typically composed of large numbers of simple agents. Thus, it is intractable to have a human micro-manage the swarm. How can humans efficiently interact with many robots? Can the human interact with the swarm at higher-levels of abstraction?" + }, + "Publication": [] + } + ] +} \ No newline at end of file diff --git a/src/data/videos.json b/src/data/videos.json new file mode 100644 index 0000000..0b49e3d --- /dev/null +++ b/src/data/videos.json @@ -0,0 +1,50 @@ +[ + { + "Id": 1, + "Title": "Efficient and Robust Learning of Human Intent", + "Image": "", + "Link": "https://www.youtube.com/embed/sPIpms0sTBQ?start=73", + "Conference": "", + "Year": "", + "Speaker": "Dr. Daniel Brown", + "StartTime": 73, + "Filename": "", + "Url": "" + }, + { + "Id": 2, + "Title": "Helping Robots Learn from, Predict and Better Assist Humans", + "Image": "", + "Link": "https://www.youtube.com/embed/zTdBKSwWE4M?start=1478", + "Conference": "", + "Year": "", + "Speaker": "Dr. Daniel Brown", + "StartTime": 1478, + "Filename": "", + "Url": "" + }, + { + "Id": 3, + "Title": "Latent Spaces and Learned Representation for Better Human Preference Learning", + "Image": "", + "Link": "https://www.youtube.com/embed/eOHWDgqMHq8?start=11280", + "Conference": "CoRL", + "Year": 2022, + "Speaker": "Dr. Daniel Brown", + "StartTime": 11280, + "Filename": "", + "Url": "" + }, + { + "Id": 4, + "Title": "Swarm Emergent Behavior Discovery", + "Image": "/images/videos/4-2025Ploutos.png", + "Link": "https://www.ploutos.dev/streams/precious-honeybee", + "Conference": "Ploutos", + "Year": 2025, + "Speaker": "Dr. Daniel Brown", + "StartTime": "", + "Filename": "4-2025Ploutos.png", + "Url": "https://drive.google.com/file/d/1SB2JxoUo1sFAEADRzr4VX3U97ZqZveIc/view?usp=drive_link" + } +] \ No newline at end of file diff --git a/src/icons/iconMap.jsx b/src/icons/iconMap.jsx new file mode 100644 index 0000000..a46ae82 --- /dev/null +++ b/src/icons/iconMap.jsx @@ -0,0 +1,13 @@ +export const iconMap = { + "Homepage": ["fa", "fa-house-chimney"], + "ArXiv": ["fa", "file-lines"], + "Scholar": ["fa", "graduation-cap"], + "Github": ["fab", "github"], + "Code": ["fab", "github"], + "Twitter": ["fab", "x-twitter"], + "LinkedIn": ["fab", "linkedin"], + "PDF": ["fa", "file-pdf"], + "Website": ["fa", "globe"], + "BibTeX": ["fa", "book"], + "Video": ["fab", "youtube"] +}; \ No newline at end of file diff --git a/src/icons/index.jsx b/src/icons/index.jsx new file mode 100644 index 0000000..978ec83 --- /dev/null +++ b/src/icons/index.jsx @@ -0,0 +1,8 @@ +import { library } from '@fortawesome/fontawesome-svg-core'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { solidIcons, brandIcons } from './initIcons'; +import { iconMap } from './iconMap'; + +library.add(...solidIcons, ...brandIcons); + +export { FontAwesomeIcon, iconMap }; diff --git a/src/icons/initIcons.jsx b/src/icons/initIcons.jsx new file mode 100644 index 0000000..e9684d1 --- /dev/null +++ b/src/icons/initIcons.jsx @@ -0,0 +1,17 @@ +import { + faXmark, faBars, faCircle, faChevronRight, faChevronLeft, + faHouse, faFilePdf, faGraduationCap, faHouseChimney, faFileLines, faGlobe, faBook, faArrowUpRightFromSquare +} from '@fortawesome/free-solid-svg-icons'; + +import { + faLinkedin, faGithub, faYoutube, faXTwitter +} from '@fortawesome/free-brands-svg-icons'; + +export const solidIcons = [ + faXmark, faBars, faCircle, faChevronRight, faChevronLeft, + faHouse, faFilePdf, faGraduationCap, faHouseChimney, faFileLines, faGlobe, faBook, faArrowUpRightFromSquare +]; + +export const brandIcons = [ + faLinkedin, faGithub, faYoutube, faXTwitter +]; \ No newline at end of file diff --git a/src/layout/Layout.jsx b/src/layout/Layout.jsx new file mode 100644 index 0000000..dd303fb --- /dev/null +++ b/src/layout/Layout.jsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { Outlet } from 'react-router-dom'; +import { Header, Footer } from "@/components"; + +const Layout = () => { + return ( +
+
+ +
+
+ ); +}; + +export default Layout \ No newline at end of file diff --git a/src/layout/index.jsx b/src/layout/index.jsx new file mode 100644 index 0000000..02a9e85 --- /dev/null +++ b/src/layout/index.jsx @@ -0,0 +1,5 @@ +import Layout from './Layout'; + +export { + Layout +}; diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..7078b1c --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,11 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from '@/App'; +import '../index.css'; + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + +); diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx new file mode 100644 index 0000000..a0f01a7 --- /dev/null +++ b/src/pages/Home.jsx @@ -0,0 +1,39 @@ +import { Link } from 'react-router-dom'; +import { home, news } from '@/data'; +import { Carousel } from '@/components'; + +const Home = () => { + // Slice to show only the top 3 items + const topNews = news.reverse().slice(0, home.numNews); + + return ( +
+ {/* Banner */} +
+

{home.Title}

+ +
+ + {/* About Us */} +
+

About Us

+

{home.Description}

+
+ + {/* News */} +
+

Recent News

+
    + {topNews.map((item, index) => ( +
  • + {item.Content} +
  • + ))} +
+ +
+
+ ); +}; + +export default Home; diff --git a/src/pages/News.jsx b/src/pages/News.jsx new file mode 100644 index 0000000..f16258d --- /dev/null +++ b/src/pages/News.jsx @@ -0,0 +1,23 @@ +import { Title } from '@/components'; +import { news } from '@/data'; + +const data = news.reverse(); + +const News = () => { + return ( +
+ + + {/* News */} + <ul className="list-disc ml-8 space-y-md"> + {data.map((item, index) => ( + <li key={`news-${index}`}> + {item.Content} + </li> + ))} + </ul> + </div> + ); +}; + +export default News; diff --git a/src/pages/PageNotFound.jsx b/src/pages/PageNotFound.jsx new file mode 100644 index 0000000..61cfa95 --- /dev/null +++ b/src/pages/PageNotFound.jsx @@ -0,0 +1,21 @@ +import { Link } from 'react-router-dom'; +import { FontAwesomeIcon } from '@/icons'; + +const PageNotFound = () => { + return ( + <div className="pages max-h-screen flex flex-col justify-center items-center text-center"> + <h1 className="text-ured">404</h1> + <h2>Page Not Found :(</h2> + <p className="text-ugray"> + The requested page could not be found. <br /> + </p> + + <Link to="/" className="flex gap-sm items-center text-white bg-ured hover:text-ured hover:bg-white border-2 border-ured rounded-md py-2 px-4"> + <FontAwesomeIcon icon='house' /> + Home + </Link> + </div> + ); +}; + +export default PageNotFound; diff --git a/src/pages/People.jsx b/src/pages/People.jsx new file mode 100644 index 0000000..821be9c --- /dev/null +++ b/src/pages/People.jsx @@ -0,0 +1,63 @@ +import { Title, Button } from '@/components' +import { people } from '@/data'; + +const Thumbnail = ({ id, path }) => { + const placeholder = '/images/people/placeholder.png'; + const src = path || placeholder; + + return ( + <img + src={src} + alt={`person-image-${id}`} + className="w-1/2 mx-auto md:mx-0 md:w-40 md:h-40 aspect-square object-cover rounded-xl" + onError={e => { + e.currentTarget.onError = null; + e.currentTarget.src = placeholder; + }} + /> + ); +} + + +const People = () => { + + return ( + <div className="pages"> + <Title name="People" /> + + {/* Faculty Members & PhD, Graduate, Undergraduate Students */} + {people.map(group => ( + <section key={group.role}> + {/* Role */} + <h2>{group.role}</h2> + {/* Groups */} + <ul className="space-y-md"> + {/* People */} + {group.items.map(item => ( + <li key={item.Id} className="flex flex-col md:flex-row gap-md"> + {/* Thumbnail */} + <Thumbnail id={item.Id} path={item.Image} /> + {/* Content */} + <div className="space-y-xs"> + {/* Name */} + <h3 className="text-ured">{item.Name}</h3> + {/* {item.Alumni && <p className="font-bold">{item.Role}</p>} */} + {/* Bio */} + <p>{item.Bio}</p> + {/* Links */} + <div className="flex gap-sm"> + {Object.entries(item.Links).map(([key, value]) => + value && <Button key={key} title={key} link={value} /> + )} + </div> + </div> + </li> + ))} + </ul> + </section> + ))} + </div> + ); +} + +export default People; \ No newline at end of file diff --git a/src/pages/Publications.jsx b/src/pages/Publications.jsx new file mode 100644 index 0000000..e4260e3 --- /dev/null +++ b/src/pages/Publications.jsx @@ -0,0 +1,87 @@ +import { ButtonR, Title } from '@/components' +import { publications } from '@/data'; + +const data = [...publications].reverse().map(({ ArXiv, PDF, Website, Code, BibTeX, ...rest }) => ({ + ...rest, + Links: { ArXiv, PDF, Website, Code, BibTeX } +})); + +const Thumbnail = ({ id, path }) => { + const placeholder = '/images/placeholder.png'; + const src = path || placeholder; + + return ( + <img + src={src} + alt={`publication-image-${id}`} + className="h-50 aspect-[4/3] object-contain rounded-xl" + onError={e => { + e.currentTarget.onError = null; + e.currentTarget.src = "/images/placeholder.png"; + }} + /> + ); +} + + +const Publications = () => { + return ( + <div className="pages"> + <Title name="Publications" /> + + {/* Publication */} + <section className="space-y-md"> + {data.map(item => ( + <ul key={`publication-${item.Id}`} className="flex flex-col md:flex-row gap-md"> + {/* Thumbnail */} + <Thumbnail id={item.Id} path={item.Image} /> + {/* Content */} + <li className="space-y-xs md:space-y-sm"> + {/* Title */} + <h3>{item.Title}</h3> + {/* Authors */} + <p className="font-bold"> + {Array.isArray(item.Authors) + ? item.Authors.join(', ') + : item.Authors} + </p> + {/* Conference, Month Year. */} + {item.Conference && <p className="italic"> + {item.Workshop && `${item.Workshop} on `} + <span>{item.Conference && item.Conference}</span> + <span> + {item.Year + ? item.Month + ? `, ${item.Month} ${item.Year}.` + : `, ${item.Year}.` + : `.`} + </span> + </p>} + {/* Links */} + {Object.values(item.Links).some(value => value) && ( + <div className="flex gap-2"> + {Object.entries(item.Links).map(([key, value]) => + value && <ButtonR key={key} title={key} link={value} /> + )} + </div> + )} + {/* Note */} + {item.Note && ( + Array.isArray(item.Note) ? ( + item.Note.map((note, index) => ( + <p key={index} className="text-xs text-gray-600">{note}</p> + )) + ) : ( + <p className="text-xs text-gray-600">{item.Note}</p> + ) + )} + </li> + </ul> + + ))} + </section> + </div> + ); +}; + +export default Publications; diff --git a/src/pages/Research.jsx b/src/pages/Research.jsx new file mode 100644 index 0000000..df56ea6 --- /dev/null +++ b/src/pages/Research.jsx @@ -0,0 +1,69 @@ +import { Title } from '@/components'; +import { research } from '@/data'; + +const Research = () => { + const data = research.data; + + return ( + <div className="pages"> + <Title name="Research" /> + + {/* Description */} + <section> + <p>{research.description}</p> + </section> + + {/* Subjects */} + <section className="space-y-sm container"> + {data.map((item, index) => ( + <div key={`subject-${index}`} className="space-y-sm"> + <h2>{item.Title}</h2> + <p>{item.Description}</p> + <ul className="ml-8 list-disc space-y-xs"> + {/* Key Topics */} + <li> + <span className="font-bold">{'Key Topics: '}</span> + <span> + {Array.isArray(item['Key Topics']) + ? item['Key Topics'].join(', ') + : item['Key Topics']} + </span> + </li> + {/* Current Projects */} + <li> + <span className="font-bold">{'Current Projects: '}</span> + <ul> + {Object.entries(item['Current Project']).map(([key, value], index) => + <li key={`project-${index}`} className="list-[circle] ml-8"> + <span className="font-bold">{`${key}: `}</span> + <span >{value}</span> + </li> + )} + </ul> + </li> + {/* Publications */} + <li> + <span className="font-bold">{'Publications: '}</span> + <span> + {item.Publication.length > 0 + ? <ul> + {Object.entries(item['Publication']).map(([key, value], index) => + <li key={`publication-${index}`} className="list-[circle] ml-8"> + <span className="font-bold">{`${key}: `}</span> + <span >{value}</span> + </li> + )} + </ul> + : <span className="text-ugray italic">It will be updated soon.</span> + } + </span> + </li> + </ul> + </div> + ))} + </section> + </div> + ); +}; + +export default Research; diff --git a/src/pages/Videos.jsx b/src/pages/Videos.jsx new file mode 100644 index 0000000..fb0f4ce --- /dev/null +++ b/src/pages/Videos.jsx @@ -0,0 +1,79 @@ +import { Title } from '@/components' +import { videos } from '@/data'; +import { FontAwesomeIcon } from '@/icons'; +const data = [...videos].reverse(); + +const YouTubeEmbed = ({ link }) => { + return ( + <div className="relative aspect-[2/1] overflow-hidden rounded-lg"> + <iframe + className="absolute top-0 left-0 w-full h-full" + src={link} + title="YouTube video player" + frameBorder="0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" + referrerPolicy="strict-origin-when-cross-origin" + allowFullScreen + /> + </div> + ); +}; + +const PageEmbed = ({ image, link }) => { + return ( + <div + className="relative aspect-[2/1] overflow-hidden rounded-lg hover:cursor-pointer" + onClick={() => window.open(link, '_blank')} + > + <img + src={image} + alt={`video-preview`} + className="w-full h-full object-cover" + onError={e => { + e.currentTarget.onError = null; + e.currentTarget.src = "/images/placeholder.png"; + }} + /> + <div className="absolute inset-0 bg-lgray opacity-0 hover:opacity-80 flex items-center justify-center gap-xs md:text-lg lg:text-2xl text-ugray rounded-lg"> + Move + <FontAwesomeIcon icon="arrow-up-right-from-square" /> + </div> + </div> + ); +}; + +const Videos = () => { + return ( + <div className="pages"> + <Title name="Videos" /> + + <section className="space-y-md"> + {data.map((item, index) => ( + <div key={`video-${index}`}> + {/* Title */} + <h4 className="text-xl"> + <span>{item.Title && item.Title}</span> + <span>{item.Conference + ? item.Year + ? `, ${item.Conference} ${item.Year}. ` + : `, ${item.Conference}. ` + : `. ` + } + </span> + <span> + {item.Speaker && `Talk by ${item.Speaker}.`} + </span> + </h4> + {/* Youtube */} + {item.Image + ? <PageEmbed image={item.Image} link={item.Link} /> + : <YouTubeEmbed link={item.Link} /> + } + </div> + ))} + </section> + </div> + ) +}; + +export default Videos; diff --git a/src/routes/index.jsx b/src/routes/index.jsx new file mode 100644 index 0000000..4fa31d5 --- /dev/null +++ b/src/routes/index.jsx @@ -0,0 +1,7 @@ +import { routes } from './routes'; +import { navigation } from './navigation'; + +export { + routes, + navigation +}; diff --git a/src/routes/navigation.jsx b/src/routes/navigation.jsx new file mode 100644 index 0000000..6bf0d4e --- /dev/null +++ b/src/routes/navigation.jsx @@ -0,0 +1,33 @@ +export const navigation = [ + { + title: "Home", + key: "home", + to: "/", + }, + { + title: "People", + key: "people", + to: "/people", + }, + { + title: "Research", + key: "research", + to: "/research", + }, + { + title: "Publications", + key: "publications", + to: "/publications", + }, + { + title: "Videos", + key: "videos", + + to: "/videos", + }, + { + title: "News", + key: "news", + to: "/news", + } +] \ No newline at end of file diff --git a/src/routes/routes.jsx b/src/routes/routes.jsx new file mode 100644 index 0000000..bcd2f24 --- /dev/null +++ b/src/routes/routes.jsx @@ -0,0 +1,18 @@ +import React from 'react'; + +const Home = React.lazy(() => import('@/pages/Home')); +const People = React.lazy(() => import('@/pages/People')); +const Research = React.lazy(() => import('@/pages/Research')); +const Publications = React.lazy(() => import('@/pages/Publications')); +const Videos = React.lazy(() => import('@/pages/Videos')); +const News = React.lazy(() => import('@/pages/News')); + + +export const routes = [ + { path: '/', element: Home }, + { path: '/people', element: People, title: "People" }, + { path: '/research', element: Research, title: "Research" }, + { path: '/publications', element: Publications, title: "Publications" }, + { path: '/videos', element: Videos, title: "Videos" }, + { path: '/news', element: News,title: "News" }, +]; diff --git a/videos.md b/videos.md deleted file mode 100644 index 7682163..0000000 --- a/videos.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: default -title: Videos ---- - -<div class="videos-section"> - <h1>Videos</h1> - - <div class="video-item"> - <div class="video-item-info"> - <h5><a href="https://app.ploutos.dev/streams/precious-honeybee">Swarm Emergent Behavior Discovery</a>, Ploutos 2025. Talk by Dr. Daniel Brown.</h5> - </div> - </div> - - <div class="video-item"> - <div class="video-item-info"> - <h5>Latent Spaces and Learned Representation for Better Human Preference Learning, CoRL 2022. Talk by Dr. Daniel Brown.</h5> - </div> - <iframe width="500" height="500" src="https://www.youtube.com/embed/eOHWDgqMHq8?start=11280" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> - </div> - - <div class="video-item"> - <div class="video-item-info"> - <h5>Helping Robots Learn from, Predict and Better Assist Humans. Talk by Dr. Daniel Brown.</h5> - </div> - <iframe width="500" height="500" src="https://www.youtube.com/embed/zTdBKSwWE4M?start=1478" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> - </div> - - <div class="video-item"> - <div class="video-item-info"> - <h5>Efficient and Robust Learning of Human Intent. Talk by Dr. Daniel Brown.</h5> - </div> - <iframe width="500" height="500" src="https://www.youtube.com/embed/sPIpms0sTBQ?start=73" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> - </div> -</div> diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..f9ed3da --- /dev/null +++ b/vite.config.js @@ -0,0 +1,17 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' +import path from 'path'; + +export default defineConfig({ + base: '/', + plugins: [ + react(), + tailwindcss(), + ], + resolve: { + alias: { + '@': path.resolve(__dirname, 'src'), + }, + }, +}) \ No newline at end of file