4 models have responded to the "Retro macOS UI Recreation" challenge. Compare their approaches side-by-side on RIVAL. This response is part of RIVAL's open dataset of 5,600+ AI model responses.
Minimax M2 Her's response to the 'Retro macOS UI Recreation' challenge.
Recreate a classic, retro, macOS Desktop UI — make it interactive and nostalgic, make it as interactive as you can, you can be creative.. Feel free to showcase your skills. The entire application must be a single-page self-contained HTML file.
Couldn't render this response
This model didn't return a displayable web page for this challenge.
<think>
Okay, the user wants a retro macOS desktop recreated in a single HTML file. Let me start by recalling the classic macOS interface elements. The dock at the bottom, menu bar at the top, desktop wallpaper, and the windows with the classic rounded corners.
First, I'll need the basic structure: HTML, CSS for styling, and JavaScript for interactivity. For the HTML, I'll set up the doctype, head with title, and body. The body will have the desktop container, menu bar, dock, and the main content area with a folder window.
The CSS should mimic the classic macOS look. Using colors like #808080 for the window background, #fff for content areas. The window border should have a subtle shadow to give depth. Buttons in the top bar of the window: close (red), minimize (yellow), zoom (green). The dock will use a gradient to create that metallic look.
For interactivity, the windows need to be draggable. I'll use JavaScript's mouse events for drag functionality. Each window should have a z-index to bring it to the front when clicked. The dock icons should pulse on hover, and clicking them opens a folder or system preference window.
I should include system folders like "Applications" and "Documents" in the dock. Each folder opens a window when clicked. The menu bar will have items like Apple, File, Edit, View, Special, which will show their respective menus on hover, though the menus won't be functional except for the about item.
Including a system preference window for system information. It will display the macOS version and other details when opened. The background should be a gradient to simulate the old desktop textures, maybe using a repeating pattern or a radial gradient.
To keep it all in one file, I'll inline the CSS in the head and the JavaScript in the body. Using base64 for a simple icon image as a data URI for the Apple logo in the dock. Also, using a background image that repeats to look like the classic macOS desktop pattern.
Testing the drag functionality: ensuring windows can be moved by dragging the title bar and that they stay within the viewport. The dock icons should scale up on hover and click to open windows.
Potential issues: z-index management when dragging windows to bring them to the front. Ensuring that the JavaScript handles multiple windows correctly. Also, making sure that the menus in the menu bar don't interfere with other elements when displayed.
Finally, I'll structure the code with proper indentation and comments where necessary. The result should be a nostalgic, interactive retro macOS desktop that users can interact with by dragging windows, opening folders, and hovering over dock items for effects.
</think>
Here's an interactive retro macOS desktop recreation in a single HTML file:
```html
<!DOCTYPE html>
<html>
<head>
<title>Mac OS Classic</title>
<style>
body {
margin: 0;
overflow: hidden;
font-family: "Chicago", sans-serif;
background: linear-gradient(135deg, #636363 0%, #343434 100%);
}
.desktop {
width: 100vw;
height: 100vh;
position: relative;
}
.menu-bar {
height: 20px;
background: #c3c2b8;
border-bottom: 1px solid #808080;
display: flex;
align-items: center;
position: absolute;
width: 100%;
top: 0;
}
.window {
position: absolute;
width: 350px;
height: 250px;
border: 2px solid #808080;
background: #c3c2b8;
border-radius: 4px;
top: 50px;
left: 50px;
}
.window-bar {
height: 20px;
background: linear-gradient(to bottom, #e4e4e2 0%, #a4a4a2 100%);
border-bottom: 1px solid #808080;
display: flex;
align-items: center;
justify-content: space-between;
}
.window-buttons {
display: flex;
margin-left: 4px;
}
.window-button {
width: 12px;
height: 12px;
border: 1px solid #808080;
border-radius: 50%;
margin-right: 4px;
cursor: pointer;
}
.close { background: #ff5c57; }
.minimize { background: #ffbd2e; }
.zoom { background: #28c840; }
.window-title {
position: absolute;
left: 50%;
transform: translateX(-50%);
font-size: 12px;
color: #000;
}
.dock {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 280px;
height: 70px;
background: rgba(0,0,0,0.3);
border-radius: 12px;
display: flex;
justify-content: space-around;
align-items: center;
padding: 5px;
backdrop-filter: blur(10px);
}
.dock-item {
width: 50px;
height: 50px;
background: #fff;
border: 2px solid #808080;
border-radius: 8px;
display: flex;
justify-content: center;
align-items: center;
transition: transform 0.2s;
}
.dock-item:hover {
transform: scale(1.2) translateY(-10px);
}
.menu {
display: none;
position: absolute;
background: #c3c2b8;
border: 1px solid #808080;
padding: 4px 0;
}
.menu-item {
padding: 4px 20px;
cursor: pointer;
}
.menu-item:hover {
background: #000080;
color: #fff;
}
</style>
</head>
<body>
<div class="desktop">
<div class="menu-bar">
<span style="margin-left: 4px;">Finder</span>
<div class="menu-item" onclick="showMenu('apple-menu')">Apple</div>
<div class="menu-item" onclick="showMenu('file-menu')">File</div>
</div>
<div id="apple-menu" class="menu">
<div class="menu-item">About This Computer...</div>
</div>
<div id="file-menu" class="menu">
<div class="menu-item">New Folder</div>
<div class="menu-item">Close Window</div>
</div>
<div class="window" style="z-index: 1;" id="finder-window">
<div class="window-bar">
<div class="window-buttons">
<div class="window-button close"></div>
<div class="window-button minimize"></div>
<div class="window-button zoom"></div>
</div>
<div class="window-title">Finder</div>
</div>
<div style="padding: 10px;">
<div style="margin-bottom: 10px;">System Folders:</div>
<div>Applications</div>
<div>Documents</div>
<div>System Folder</div>
</div>
</div>
<div class="dock">
<div class="dock-item">📁</div>
<div class="dock-item">✉️</div>
<div class="dock-item">🌐</div>
<div class="dock-item">💻</div>
</div>
</div>
<script>
let activeWindow = null;
let offset = {x: 0, y: 0};
document.querySelectorAll('.window').forEach(window => {
window.addEventListener('mousedown', (e) => {
activeWindow = window;
const rect = window.getBoundingClientRect();
offset.x = e.clientX - rect.left;
offset.y = e.clientY - rect.top;
window.style.zIndex = Date.now();
});
});
document.addEventListener('mousemove', (e) => {
if (activeWindow) {
activeWindow.style.left = (e.clientX - offset.x) + 'px';
activeWindow.style.top = (e.clientY - offset.y) + 'px';
}
});
document.addEventListener('mouseup', () => {
activeWindow = null;
});
document.querySelectorAll('.window-button').forEach(button => {
button.addEventListener('click', (e) => {
const window = e.target.closest('.window');
if (button.classList.contains('close')) {
window.style.display = 'none';
}
});
});
function showMenu(menuId) {
document.querySelectorAll('.menu').forEach(menu => {
menu.style.display = 'none';
});
document.getElementById(menuId).style.display = 'block';
}
document.addEventListener('click', () => {
document.querySelectorAll('.menu').forEach(menu