diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5e821e8 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# manip diff --git a/index.html b/index.html new file mode 100644 index 0000000..aab92e5 --- /dev/null +++ b/index.html @@ -0,0 +1,113 @@ + + + + + + + + + MANIP: Integrating Interactive Perception into Long-Horizon Robot Manipulation Systems + + + + + + + + + + + + + + + + + + +
+
+
+

POGS

+

Persistent Object Gaussian Splat for Tracking Human and Robot Manipulation of Irregularly Shaped Objects

+
+ + + +
+ +

1 The AUTOLab at UC Berkeley

+

2 The Toyota Research Institute

+ +
+ *Denotes Equal Contribution +
+
+
+

Under Review for ICRA 2025

+ \ No newline at end of file diff --git a/script.js b/script.js new file mode 100644 index 0000000..334b042 --- /dev/null +++ b/script.js @@ -0,0 +1,229 @@ + +var video_names = ['bouquet','figurines','kitchen', 'donuts', 'teatime', 'bookstore', 'grocery', 'garden', 'shoes']; +var download_paths = [ + 'data/high_res/bouquet.mp4', + 'data/high_res/figurines.mp4', + 'data/high_res/kitchen.mp4', + 'data/high_res/donuts.mp4', + 'data/high_res/teatime.mp4', + 'data/high_res/bookstore.mp4', + 'data/high_res/veggie_aisle.mp4', + 'data/high_res/sunnyside.mp4', + 'data/high_res/shoe_rack.mp4' +]; +var videos = []; + +var video_width = 960; +const VIDEO_ASPECT_RATIO = 16.0 / 9.0; + +$(function() { + var canvas = document.getElementById('canvas'); + var ctx = canvas.getContext('2d'); + + current_video_idx = 0; + + thumbnails = [ + document.getElementById('thumb-0'), + document.getElementById('thumb-1'), + document.getElementById('thumb-2'), + document.getElementById('thumb-3'), + document.getElementById('thumb-4'), + document.getElementById('thumb-5'), + document.getElementById('thumb-6'), + document.getElementById('thumb-7'), + document.getElementById('thumb-8'), + ]; + for (var i = 0; i < thumbnails.length; i++) { + thumbnails[i].addEventListener('click', change_video_index.bind(this, i)); + } + + var canvas_overlay = document.getElementById('canvas-overlay'); + var ctx_overlay = canvas_overlay.getContext('2d'); + + if (videos.length == 0) { + load_videos(); + }; + + (function loop() { + video = videos[current_video_idx] + ctx.drawImage(video, 0, 0, 960, 540, 0, 0, video_width, video_width/VIDEO_ASPECT_RATIO); + ctx_overlay.drawImage(video, 960, 0, 960, 540, 0, 0, video_width, video_width/VIDEO_ASPECT_RATIO); + setTimeout(loop, 1000 / 60); // drawing at 30fps + set_play_pause_icon(); + })(); + + }); + +function change_video_index (idx) { + thumbnails[idx].classList.add("active-btn"); + if (current_video_idx != idx) { + thumbnails[current_video_idx].classList.remove("active-btn"); + } + videos[current_video_idx].pause() + current_video_idx = idx; + current_video = videos[current_video_idx] + current_video.currentTime = 0; + current_video.play(); + set_play_pause_icon(); +} + +function fullscreen() { + current_video = videos[current_video_idx] + current_video.style.visibility = "visible"; + const fullscreenElement = + document.fullscreenElement || + document.mozFullScreenElement || + document.webkitFullscreenElement || + document.msFullscreenElement; + if (fullscreenElement) { + exitFullscreen(); + } else { + launchIntoFullscreen(current_video); + } +} + +function download() { + current_video = videos[current_video_idx] + var link = document.createElement('a'); + link.download = video_names[current_video_idx] + '.mp4'; + link.href = download_paths[current_video_idx]; + link.click(); +} + +function launchIntoFullscreen(element) { + if (element.requestFullscreen) { + element.requestFullscreen(); + } else if (element.mozRequestFullScreen) { + element.mozRequestFullScreen(); + } else if (element.webkitRequestFullscreen) { + element.webkitRequestFullscreen(); + } else if (element.msRequestFullscreen) { + element.msRequestFullscreen(); + } else { + element.classList.toggle('fullscreen'); + } +} + +function exitFullscreen() { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + } +} + +if (document.addEventListener) +{ + document.addEventListener('fullscreenchange', exitHandler, false); + document.addEventListener('mozfullscreenchange', exitHandler, false); + document.addEventListener('MSFullscreenChange', exitHandler, false); + document.addEventListener('webkitfullscreenchange', exitHandler, false); +} + +function exitHandler() +{ + if (!document.webkitIsFullScreen && !document.mozFullScreen && !document.msFullscreenElement) + { + current_video = videos[current_video_idx] + current_video.style.visibility = "hidden"; + } +} + +function load_videos() { + for (var i = 0; i < video_names.length; i++) { + videos.push(document.getElementById(video_names[i])); + } +} + +function set_play_pause_icon() { + button = document.getElementById('play-btn') + current_video = videos[current_video_idx] + if (current_video.paused) { + button.classList.remove("fa-pause"); + button.classList.add("fa-play"); + } else { + button.classList.add("fa-pause"); + button.classList.remove("fa-play"); + } +} + +function play_pause() { + current_video = videos[current_video_idx] + if (current_video.paused) { + current_video.play(); + } else { + current_video.pause(); + } + set_play_pause_icon(); +} + +function resize_canvas() { + var canvas = document.getElementById('canvas'); + var canvas_overlay = document.getElementById('canvas-overlay'); + var main_results = document.getElementById('main-results'); + + var width = main_results.offsetWidth; + var height = width / VIDEO_ASPECT_RATIO; + + main_results.style.height = height; + + video_width = width; + canvas.width = width; + canvas.height = height; + canvas.style.width = width; + canvas.style.height = height; + canvas_overlay.width = width; + canvas_overlay.height = height; + canvas_overlay.style.width = width; + canvas_overlay.style.height = height; +} + +window.onload = function() { + const root = document.documentElement; + const checkbox = document.getElementById('opacity-toggle') + + load_videos(); + checkbox.addEventListener('change', (event) => { + if (event.currentTarget.checked) { + root.style.setProperty("--opacity", `100%`); + } else { + root.style.setProperty("--opacity", `0%`); + } + }) + + change_video_index(0); + videos[0].play(); + + const hoverImage = document.getElementById('hover-image'); + const gptQueries = document.querySelectorAll('.gpt-query'); + + gptQueries.forEach(query => { + query.addEventListener('mouseover', () => { + hoverImage.src = 'data/gpt_example/' + query.id + '.jpg'; + }); + query.addEventListener('mouseout', () => { + hoverImage.src = 'data/gpt_example/base.jpg'; + }); + }); + +} + +window.addEventListener('resize', resize_canvas, false); + +document.addEventListener("DOMContentLoaded", function() { + resize_canvas(); +}); + + +function slide_left() { + slider_window = document.getElementById('thumbnails-scroll'); + slider_window.scrollLeft = 0; +} + +function slide_right() { + slider_window = document.getElementById('thumbnails-scroll'); + slider_window.scrollLeft += 1000; +} + diff --git a/style.css b/style.css new file mode 100644 index 0000000..7cf7c96 --- /dev/null +++ b/style.css @@ -0,0 +1,652 @@ +body { + margin: 0; + min-height: 100%; + background-color: #fff; + font-family: 'Open Sans',sans-serif; + color: #333; + font-size: 12px; + line-height: 20px; +} + +.section { + text-align: center; + margin-left: 30px; + margin-right: 30px; +} + +.container { + padding-left: 0; + margin-left: auto; + margin-right: auto; + max-width: 940px; +} + +.title { + margin-top: 0px; + margin-bottom: 0px; + font-family: 'Varela Round',sans-serif; + color: #4d4d4d; + font-size: 50px; + line-height: 65px; + font-weight: 700; + letter-spacing: 4; +} + +.subheader { + margin-top: 0; + margin-bottom: 10px; + font-family: 'Open Sans',sans-serif; + color: #333; + font-size: 25px; + line-height: 44px; + font-weight: 500; + letter-spacing: 0; +} +.tldr { + margin-top: 30px; + margin-bottom: 3px; + font-family: 'Open Sans',sans-serif; + color: #333; + font-size: 18px; + line-height: 24px; + font-weight: 500; + letter-spacing: 0; +} + +.title-row { + margin-top: 20px; +} + +.base-row { + margin-left: -10px; + margin-right: -10px; +} + +.base-col { + position: relative; + float: left; + min-height: 1px; + padding-left: 0px; + padding-right: 0px; + width: 100%; +} + +.author-row { + height: 25px; + display: flex; + justify-content: center; +} + +.author-col { + width: 20%; +} + +.author-text { + font-family: 'Open Sans',sans-serif; + color: #333; + font-size: 16px; + font-weight: 400; + text-decoration: underline; +} + +.text-star { + position: relative; + top: -7px; + display: inline-block; + margin: 0px; + font-size: 10px; +} + +#uc-berkeley { + padding-top: 10px; + font-family: 'Open Sans',sans-serif; + color: #333; + font-size: 16px; + font-weight: 400; + margin: 0px; + letter-spacing: 0; +} + +#equal-contrib { + padding-top: 10px; + font-family: 'Open Sans',sans-serif; + color: #333; + font-size: 16px; + font-weight: 400; + letter-spacing: 0; +} + +.icon-col { + width: 33.33333%; +} + +.icon-img { + max-width: 35%; + margin-right: auto; + margin-bottom: 1px; + margin-left: auto; + padding-top: 0px; +} + +.github-img-icon { + max-width: 30%; + margin-top: 6px; + margin-bottom: 9px; + opacity: .77; +} + +.data-img-icon { + max-width: 30%; + margin-top: 5px; + margin-bottom: 9px; + opacity: .62; +} + +.link-block { + display: block; + max-width: 100%; + margin-right: auto; + margin-bottom: -14px; + margin-left: auto; + text-align: center; +} + +.link-labels { + display: flex; + /* width: 60%; */ + margin-top: 5px; + justify-content: center; +} + +.link-labels-text { + font-family: 'Open Sans',sans-serif; + color: #333; + font-size: 14px; +} + +.gallery-container { + text-align: center; + margin: 20px; +} + +.gallery-img { + max-width: 90%; + height: auto; +} + +.disabled { + color: #ccc; + background-color: #f0f0f0; /* Light grey background */ + cursor: not-allowed; + pointer-events: none; /* This makes the button not clickable */ +} + +#main-video { + width: 90%; + /* max-width: 750px; */ + margin-top: 0px; + margin-bottom: 10px; + border-radius: 15px; +} + +#addtl-video { + width: 100%; + /* max-width: 750px; */ + margin-top: 0px; + margin-bottom: 10px; + border-radius: 15px; +} + +#pipeline-img { + width: 60%; + max-width: 560px; + margin-top: 10px; + margin-right: 20px; + margin-bottom: 10px; +} + +#why-lerf-img { + width: 30%; + max-width: 560px; + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; +} + +#why-lerf{ + padding-top: 10px; + margin-top: 10px; + margin-bottom: 10px; +} + +#clip-img { + width: 100%; + max-width: 700px; + margin-top: 20px; +} +#main-img { + width: 100%; + max-width: 700px; + margin-top: 00px; + margin-bottom: 0px; +} +#double-img { + width: 40%; + margin-top: 00px; + margin-bottom: 0px; + margin-left: 2%; + margin-right: 2%; +} +#splash-img { + width: 100%; + max-width: 800px; + margin-top: 0px; + margin-bottom: 0px; +} +.paragraph { + margin-top: 0px; + margin-bottom: 20px; + font-family: 'Open Sans',sans-serif; + color: #333; + font-size: 16px; + line-height: 24px; + font-weight: 400; + letter-spacing: 0; + text-align: left; + margin-inline: 65px; +} + +.paragraph-center { + margin-top: 0px; + /* margin-bottom: 20px; */ + font-family: 'Open Sans',sans-serif; + color: #333; + font-size: 16px; + line-height: 24px; + font-weight: 400; + letter-spacing: 0; + text-align: center; +} + +.thumbnails { + width: 90%; + overflow: hidden; + margin-top: 20px; + margin-bottom: 5px; + margin-left: auto; + margin-right: auto; +} + +.thumbnail-btn { + border: none; + cursor: pointer; + outline: none; + background-color: #fff; + padding-bottom: 8px; + border-radius: 10px; +} + +.thumbnail-btn:hover { + background-color: #eaeaea; +} + +.active-btn { + background-color: #d9e8ec; +} + +.thumbnail-row { + display: flex; + overflow-x: scroll; + scroll-behavior: smooth; + width: 88%; + margin-left: auto; + margin-right: auto; + float: left; +} + +.thumbnail-col { + width: 22%; + flex: 1 0 22%; +} + +:root { + --opacity: 50; +} + +#canvas { + position: absolute; + left: 0; + right: 0; + margin-left: auto; + margin-right: auto; +} + +#canvas-overlay { + position: absolute; + left: 0; + right: 0; + margin-left: auto; + margin-right: auto; + /* opacity: var(--opacity); */ + filter: opacity(var(--opacity)); + transition-property: filter; + transition-duration: 0.5s; +} + +#main-results { + width: 100%; + /* margin-top: 30px; */ + margin-bottom: 0px; + text-align: center; + background-color: white; + border-radius: 15px; + -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC); + overflow: hidden; +} + +#main-results > div { + height: 200px; + background-color: red; +} + +.videos { + visibility: hidden; + position: absolute; + width: 1%; +} + +#opacity { + font-family: 'Open Sans',sans-serif; + color: #3c3c3c; + font-size: 20px; + line-height: 20px; +} + +.viewer-bar { + width: 33.3333%; +} + +.switch { + position: relative; + display: inline-block; + width: 70px; + height: 34px; + margin-left: 15px; + margin-top: 5px; + } + +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .2s; + transition: .2s; + border-radius: 34px; +} + +.slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .2s; + transition: .2s; + border-radius: 50%; +} + +input:checked + .slider { + background-color: #2196F3; +} + +input:focus + .slider { + box-shadow: 0 0 1px #2196F3; +} + +input:checked + .slider:before { + -webkit-transform: translateX(36px); + -ms-transform: translateX(36px); + transform: translateX(36px); +} + +.video-bar { + width: 100%; + margin-top: -60px; + margin-left: 0px; + margin-right: 0px; + margin-bottom: 20px; + height: 40px; +} + +.video-btn { + width: 40px; + height: 40px; + padding: 8px 6px 8px 6px; + margin: 0px 10px 0px 0px; + cursor: pointer; + outline: none; + border: none; + color: #fff; + background-color: #2196F3; + padding-bottom: 8px; + border-radius: 10px; +} + +.video-btn:hover { + background-color: #0b7dda; +} + +.video-export { + text-align: right; +} + +#play-btn { + border-radius: 20px; + padding: 0px; +} + +.switch .labels { + position: absolute; + top: 8px; + left: 0; + width: 100%; + height: 100%; + font-size: 14px; + font-family: sans-serif; + transition: all 0.2s ease-in-out; +} + +.switch .labels::after { + content: attr(data-off); + position: absolute; + right: 8px; + color: #4d4d4d; + opacity: 1; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4); + transition: all 0.2s ease-in-out; +} + +.switch .labels::before { + content: attr(data-on); + position: absolute; + left: 11px; + color: #ffffff; + opacity: 0; + text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.4); + transition: all 0.2s ease-in-out; +} + +.switch input:checked~.labels::after { + opacity: 0; +} + +.switch input:checked~.labels::before { + opacity: 1; +} + +#opacity-col { + text-align: left; +} + +.citation { + /* // set background color to gray; */ + background-color: #eaeaea; + text-align: left; + border-radius: 10px; + padding-top: 3px; +} + +.citation > h1 { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 10px; + padding: 10px; +} +.citation > pre { + margin-bottom: 10px; + margin-left: 10px; + padding: 10px; +} + +.citation > p { + margin-left: 20px; +} + +#codecell0 { + margin-bottom: 10px; + margin-left: 10px; + overflow-y: scroll; +} + +.slide-arrow { + display: flex; + top: 0; + bottom: 0; + margin-top: 35px; + height: 4rem; + background-color: #6dbdff; + border: none; + width: 5%; + font-size: 3rem; + padding: 0; + cursor: pointer; + opacity: 1.0; + transition: color 100ms; + justify-content: center; + } + +.slide-arrow:hover, +.slide-arrow:focus { + background-color: #2196F3; + opacity: 1; +} + +#slide-arrow-prev { + float: left; + left: 0; + margin-right: 1%; + border-radius: 2rem 2rem 2rem 2rem; +} + +#slide-arrow-next { + float: right; + right: 0; + margin-left: 1%; + border-radius: 2rem 2rem 2rem 2rem; +} + +#gpt-words { + float: left; + width:100%; + padding-bottom: 15px; +} + +#gpt-img-col { + width: 100%; + max-width: 750px; + margin-left: auto; + margin-right: auto; + text-align: center; +} + +.gpt-query { + margin-left: 0px; + margin-right: 0px; + padding: 5px; + border-radius: 10px; + border:1px solid #ffffff; + float: left; + width: 15%; + line-height: 2.5vh; + display: flex; + justify-content: center; + align-items: center; +} + +.gpt-query:hover { + border:1px solid #252525; + font-weight: 700; +} + +.add-top-padding{ + margin-top: 10px; +} + +@media screen and (max-width: 750px) { + .gpt-query { + height: 30px; + font-size: 2.5vw; + } + + .slide-arrow { + margin-top: 20px; + } +} + +@media screen and (max-width: 550px) { + .subheader { + font-size: 16px; + } + + .author-text { + font-size: 12px; + } + + .author-row { + height: 35px; + } + + #uc-berkeley { + font-size: 12px; + } + + #pipeline-img { + width: 90%; + max-width: 560px; + margin-top: 20px; + margin-right: 0px; + } + + #why-lerf-img { + width: 60%; + max-width: 560px; + margin-top: 20px; + margin-left: 0px; + } + + .slide-arrow { + margin-top: 15px; + } +} \ No newline at end of file diff --git a/website.zip b/website.zip new file mode 100644 index 0000000..7f66b38 Binary files /dev/null and b/website.zip differ