Compare commits

...

10 Commits

Author SHA1 Message Date
Peter 85c73c22c8 Update "Contact Us" link to use routerLink
Replaced the external Typeform link with an internal [routerLink] to route to the "/contact" page. This ensures consistency and improves navigation within the application.
2025-04-06 14:38:40 +02:00
Peter c0f2a38f4d Added Socials page component
Created a new SocialsComponent with corresponding HTML, SCSS, and tests. Updated `app.module.ts` to include the Socials route and modified the Team page to use `ngSrc` for image optimization.
2025-04-06 13:37:44 +02:00
Peter 6e459767ed Added About and Team components with routing
This commit introduces new "About" and "Team" components, integrating them into the application and updating the routing module.
2025-04-06 13:03:59 +02:00
Peter 2eb619b253 Added detailed Terms of Use and improved Terms styling
Expanded the Terms of Use content with sections on fair use, donations, external services, and more to improve clarity and coverage. Updated SCSS to enhance readability and layout. Updated expired links to their current live version.
Minor punctuation fix in the Privacy Policy for consistency.
2025-04-06 12:18:00 +02:00
Peter 7b5002a475 Updated Privacy Policy
Updated privacy policies with revised dates, modernized links, and replaced references from Mojang's expired links to their Privacy Policy to Microsoft's Privacy Policy. Replaced hardcoded links with Angular router links for improved maintainability. Updated the "Last Updated" date.
2025-04-06 11:59:46 +02:00
Peter 25931d05d7 Implement detailed privacy policy content
Replaced placeholder privacy content with a comprehensive privacy policy, including sections on data collection, usage, third-party involvement, and user rights. Added necessary styles for the privacy policy layout.
Also actually fixed the social icons in the footer
2025-04-06 11:43:33 +02:00
Peter b029153657 Added Terms and Privacy components with routing
Introduced `TermsComponent` and `PrivacyComponent` with basic templates, styles, and unit tests. Updated routing in `app.module` to include `/terms` and `/privacy` paths and registered these components.
2025-04-06 10:25:48 +02:00
Peter 4e77f50d70 Update header and scroll-up button functionalities
Removed unnecessary `background-size` property from the header and updated the scroll-up button to use a service for scrolling.
2025-04-06 10:13:30 +02:00
Peter 0652e5e55e Fixed all styling for rules page.
Reorganized SCSS files for better structure and maintainability. Updated layouts to ensure consistent spacing, alignment, and responsiveness across components. Note: "Show exceptions" still needs to be fixed.
Also fixed social icon spacing in the footer.
2025-04-06 10:11:23 +02:00
Peter 1a6e489f9a Improved UI styles and updated community section content
Added styling updates to map title and container padding for better visual consistency. Updated the community section text to acknowledge player contributions and invite suggestions for featured builds.
2025-04-06 09:19:06 +02:00
29 changed files with 772 additions and 32 deletions

View File

@ -0,0 +1,56 @@
<ng-container>
<app-header [current_page]="'rules'" height="460px" background_image="/public/img/backgrounds/trees.jpg">
<div class="title" header-content>
<h1>About Us</h1>
<h2>We are a simple server born out of nostalgia, and working to maintain a semi-vanilla feel today's Minecraft
world.</h2>
</div>
</app-header>
<main>
<section class="darkmodeSection">
<section class="columnSection">
<div class="columnContainer">
<div class="columnParagraph">
<h2>Our Concept</h2>
<p>You could say it all started with a bit of nostalgia. Altitude was inspired by a small server back in
2012. It was a simple survival and creative server with a community that felt like family, and when the
server closed we took that concept and created Altitude.</p>
<p>From the very beginning we've been all about our community - adding features suggested by our members,
and designing a server that encourages cooperation and playing together. On Altitude, it's about coming
together as a community and creating new adventures every day.</p>
<p>We want to be the server you call home and always feel welcome to come on and relax for a while.</p>
</div>
<div class="columnParagraph">
<h2>Our Hardware</h2>
<p>As the community has grown and evolved so has the server. We started with a little desktop PC running in
the basement and have expanded through the years from Minecraft hosting, to a VPS, and finally to
dedicated servers hosted by OVH in Canada.</p>
<p>Today we run on a VPS and a gaming server from OVH with <span
style="font-family: 'opensans-bold', sans-serif;">32GB of DDR4 memory</span>, an <span
style="font-family: 'opensans-bold', sans-serif;">Intel i7 6700k</span> processor, <span
style="font-family: 'opensans-bold', sans-serif;">2x 500GB SSD drives</span> and <span
style="font-family: 'opensans-bold', sans-serif;">500Mbps bandwidth</span>. The VPS serves as our proxy
and website, while the gaming server hosts our Minecraft servers and SQL databases.</p>
</div>
</div>
<div class="columnContainer">
<div class="columnParagraph">
<h2>Our History</h2>
<p>Altitude began as a private server to get together with friends and it quickly became tradition to come
together every afternoon. Eventually we wanted to share our adventures with others, and went public,
inviting people from all around the globe to be a part of the community they had formed.</p>
<p>In the beginning, the server was named "The Underground", and was a small hangout spot mostly spread by
word of mouth. A few months after going public we renamed ourselves to "Altitude" and have kept the name
ever since. Altitude has evolved quite a bit over the years, but the concept has never changed - we are
home.</p>
<p>Today, Altitude thrives on the community that has formed. Many great people have decided to call Altitude
home, and many more people come every day. We are constantly learning more about what makes Altitude
great, and what we can do to make it even greater.</p>
<p>We hope you will join us on this adventure and learn with us as we embark on this amazing journey!</p>
</div>
</div>
</section>
</section>
</main>
</ng-container>

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AboutComponent } from './about.component';
describe('AboutComponent', () => {
let component: AboutComponent;
let fixture: ComponentFixture<AboutComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [AboutComponent]
})
.compileComponents();
fixture = TestBed.createComponent(AboutComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,11 @@
import {Component} from '@angular/core';
@Component({
selector: 'app-about',
standalone: false,
templateUrl: './about.component.html',
styleUrl: './about.component.scss'
})
export class AboutComponent {
scrollService: any;
}

View File

@ -11,11 +11,21 @@ import {MapComponent} from './map/map.component';
import {RulesComponent} from './rules/rules.component';
import {CopyIpComponent} from './copy-ip/copy-ip.component';
import {FooterComponent} from './footer/footer.component';
import {TermsComponent} from './terms/terms.component';
import {PrivacyComponent} from './privacy/privacy.component';
import {TeamComponent} from './team/team.component';
import {AboutComponent} from './about/about.component';
import {SocialsComponent} from './socials/socials.component';
const routes: Routes = [
{path: '', component: HomeComponent},
{path: 'map', component: MapComponent},
{path: 'rules', component: RulesComponent},
{path: 'about', component: AboutComponent},
{path: 'socials', component: SocialsComponent},
{path: 'team', component: TeamComponent},
{path: 'terms', component: TermsComponent},
{path: 'privacy', component: PrivacyComponent},
];
@NgModule({
@ -23,10 +33,15 @@ const routes: Routes = [
AppComponent,
HeaderComponent,
FooterComponent,
HomeComponent,
ThemeComponent,
HomeComponent,
MapComponent,
RulesComponent
RulesComponent,
AboutComponent,
SocialsComponent,
TeamComponent,
TermsComponent,
PrivacyComponent,
],
imports: [
BrowserModule,

View File

@ -38,7 +38,7 @@ footer ul, footer p {
}
.followUs img {
margin-right: 15px;
margin-right: 5px;
float: left;
filter: grayscale(100%);
-webkit-filter: grayscale(100%);

View File

@ -56,7 +56,7 @@
<li><a [routerLink]="['/team']">Team</a></li>
<li><a [routerLink]="['/birthdays']">Famous Birthdays</a></li>
<li><a [routerLink]="['/community']">Community</a></li>
<li><a href="https://alttd.typeform.com/to/dnKlkX">Contact Us</a></li>
<li><a [routerLink]="['/contact']">Contact Us</a></li>
<li><a href="https://alttd.com/appeal">Ban Appeal</a></li>
<li><a href="https://alttd.com/blog/">Blog</a></li>
</ul>
@ -120,8 +120,8 @@
<li class="nav_li"><a class="nav_link2" [routerLink]="['/team']">Team</a></li>
<li class="nav_li"><a class="nav_link2" [routerLink]="['/birthdays']">Famous Birthdays</a></li>
<li class="nav_li"><a class="nav_link2" [routerLink]="['/community']">Community</a></li>
<li class="nav_li"><a class="nav_link2" target="_blank" rel="noopener"
href="https://alttd.typeform.com/to/dnKlkX">Contact Us</a></li>
<li class="nav_li"><a class="nav_link2" target="_blank" rel="noopener" [routerLink]="['/contact']">Contact
Us</a></li>
<li class="nav_li"><a class="nav_link2" target="_blank" rel="noopener" href="https://alttd.com/appeal">Ban
Appeal</a></li>
<li class="nav_li"><a class="nav_link2" target="_blank" href="https://alttd.com/blog/">Blog</a></li>

View File

@ -48,7 +48,7 @@
</section>
-->
<section class="darkmodeSection">
<div class="container">
<div class="container" style="padding: 30px 0">
<iframe id="discord-widget" src="https://discordapp.com/widget?id=141644560005595136&theme=dark"></iframe>
<div class="paragraph" id="discordp">
<h2>Meet the Community</h2>
@ -109,8 +109,9 @@
<section class="removemobile darkmodeSection">
<div class="customContainer">
<h2 style="padding-bottom: 35px; font-size: 2.8em;">Community Builds</h2>
<p style="padding-bottom: 35px; font-size: 1.1em; margin: auto;">Have a look at some of the incredible builds
made by the community. something more? idk placeholder placeholder</p>
<p style="padding-bottom: 35px; font-size: 1.1em; margin: auto;">Thank you to our brilliant players for sharing
their impressive builds. Take a look at some of them here!<br>
If you know of any builds that should be featured, please let us know!</p>
<div class="sliderWrapper">
<div class="sliderContent">
<div class="indexSlider">

View File

@ -1,3 +1,13 @@
.map-button {
margin: 10px;
}
.title h2 {
width: 80%;
max-width: 600px;
font-family: 'open-sans', sans-serif;
text-shadow: none;
font-size: 1.2em;
padding-bottom: 25px;
font-weight: 100;
}

View File

@ -0,0 +1,138 @@
<ng-container>
<app-header [current_page]="'privacy'" height="250px" background_image="/public/img/backgrounds/trees.jpg">
<div class="title" header-content>
<h1 class="titleColor">Privacy Policy</h1>
</div>
</app-header>
<main>
<section class="darkmodeSection">
<div class="container">
<div class="paragraph">
<p>Last updated: April 6th, 2025</p>
<p>Welcome to Altitude! This privacy policy (“Policy”) describes the data practices of the Altitude
Community (a group consisting of server owner and staffing team members) and its subsidiaries
(collectively “we” , or "Altitude"). This Policy covers the services under our control (collectively
"Services"), which includes, but is not limited to, this website and our Minecraft server. Before using
our Services please take a moment to read this Privacy Policy. This Privacy Policy outlines what
information we collect from you and how we use it. Any use of our Services will constitute your acceptance
of this Policy as well as our <a [routerLink]="['/terms']">Terms of Use</a>. If you do not agree to our
Privacy
Policy or Terms of Use, please do not use our Services. Thank you!</p>
</div>
<div class="paragraph">
<h2>Information we collect</h2>
<p>When you use our Services we may collect PII, DII, and log information about your interactions with our
Services as described below.</p>
<p>Personally identifiable information (PII) is information that can be used to identify or contact you
online or offline, such as your name, username, Minecraft UUID, address, email, phone number, and payment
information. The Services may collect PII when it is provided to us, such as when you use our Services,
attempt to contact us, submit an application using one of our forms, or connect with us on social media or
one of our partners.</p>
<p>We may also create or collect device-identifiable information (DII), such as cookies, unique device and
advertising identifiers, and similar identifiers that are linkable to a browser or device. We may also
receive other information during your use of our Services, such as your IP address, user agent,
timestamps, precise and imprecise geolocation, sensor data, apps, fonts, battery life information, and
screen size.</p>
<p>Our Services also collect information about your use of our Services, including navigation paths, search
queries, crashes, timestamps, purchases, clicks and shares, and referral URLs. We may combine this data
with PII and DII. We may also partner with third parties that collect additional information or assist us
with processing the information we collect please see their privacy policies for more details and see
below for your choices regarding these parties.</p>
</div>
<div class="paragraph">
<h2>How we use information we collect</h2>
<p>We use the information we collect from our Services to provide, maintain, protect and improve our
Services, to develop new Services and offerings, and to protect us and our users.</p>
<p>PII is primarily used for business purposes, such as for sending you occasional newsletters and updates,
responding to inquiries and applications, logins, and providing Services. When you contact us, we may keep
a record of your communication as well as the other information provided to us. We may use your email
address to inform you about our Services, such as letting you know about changes or improvements.</p>
<p>We share PII with companies, outside organizations, and individuals for limited reasons, outlined
below:</p>
<ol>
<li>With your consent - We will share PII with companies, outside organizations or individuals if we have
your consent to do so.
</li>
<li>For external processing - We provide PII to our affiliates or other trusted businesses or persons to
process it for us, based on our instructions and in compliance with our Privacy Policy and any other
appropriate confidentiality and security measures.
</li>
<li>For legal reasons - We will share PII with companies, outside organizations or individuals if we have
a good-faith belief that access, use, preservation or disclosure of the information is reasonably
necessary to meet any applicable law, regulation, legal process or enforceable governmental request,
detect, prevent, or otherwise address fraud, security or technical issues or protect against harm to the
rights, property or safety of our users or the public as required or permitted by law.
</li>
<li>In case of a sale or asset transfer - If we become involved in a merger, acquisition or other
transaction involving the sale of some or all of our assets, user information, including PII collected
from you through your use of our Services, could be included in the transferred assets. Should such an
event occur, we will use reasonable means to notify you, either through email and/or a prominent notice
on the Services.
</li>
<li>In aggregated form for business purposes - We may share aggregated information and DII with our
partners such as businesses we have a relationship with, advertisers or connected sites. For example, we
may share information to show trends about the general use of our Services.
</li>
</ol>
<p>We use DII to operate our Services and manage user sessions, including analyzing usage of our Services,
preventing malicious behavior and fraud, improving the content, to link your identity across devices and
browsers in order to provide you with a more seamless experience online, and helping third parties provide
relevant advertising and related metrics. We share DII with third parties primarily for advertising and
analytics purposes, for external processing, and for security purposes.</p>
</div>
<div class="paragraph">
<h2>Third parties</h2>
<p>Altitude uses many external services to provide additional services or features for you. Whenever you are
using any of these external services you are bound by the respective service's Privacy Policy. This Policy
does not apply to services offered by other companies or individuals, including products or sites that may
be displayed to you on our Services. Please be aware that Altitude will not be responsible or liable for
the collection of any information by these external services or their use of any information collected.
You should always read the Privacy Policy of any service you use.</p>
<p>We may use third parties, such as Google, to help offer you more tailored ads and better Services, such
as obtaining analytics about the users of our site and to help tailor advertising to your preferences.
Google's use of advertising cookies enables it and its partners to serve ads to your users based on their
visit to your sites and/or other sites on the Internet. Users may opt out of personalized advertising by
visiting <a href="https://www.google.com/settings/ads">www.google.com/settings/ads</a>. You may also be
able to opt-out of some third-party vendors individually by visiting <a
href="https://www.aboutads.info/choices/">www.aboutads.info</a>.</p>
<p>Please note that any use of the Minecraft game and launcher is governed by Microsoft's Privacy Policy.
Therefore, by visiting our Minecraft server, you consent to Microsoft's Privacy Policy and Terms of Use. To
see Microsoft's Privacy Policy please visit their website at <a
href="https://www.microsoft.com/en-us/privacy/privacystatement">microsoft.com/en-us/privacy/privacystatement</a>.
</p>
</div>
<div class="paragraph">
<h2>Children under 13</h2>
<p>We do not knowingly collect personally identifying information from children under the age of 13. If you
are under the age of 13, please do not submit any personal information through and of our services. Never
share your name, address, or any other personal information on our Minecraft server, forums, or any of our
other services. Always ask a parent or legal guardian to make purchases for you if you wish to make a
purchase from Altitude.</p>
<p>If you are the parent or guardian of a child under the age of 13 and have a concern regarding your
childs information on our Services, please contact us at <a
[routerLink]="['/contact']">alttd.com/contact</a>.
</p>
</div>
<div class="paragraph">
<h2>Managing your information</h2>
<p>If you believe we have information that needs to be removed, or would like to know what information we've
collected from you, you may contact us at <a
[routerLink]="['/contact']">alttd.com/contact</a>. We will work with you to ensure your
privacy is protected. In some cases, we may keep PII for legitimate business or legal purposes.</p>
</div>
<div class="paragraph">
<h2>Changes to this policy</h2>
<p>Our Privacy Policy may change from time to time. We will post any Policy changes on this page. Please
check back periodically to view changes to our privacy policy. By continuing to access or use our website
or services after any revisions become effective, you agree to be bound by the revised Policy. If you do
not agree to the new Policy, please stop using our website and services.</p>
</div>
</div>
</section>
<a (click)="this.scrollService.scrollToTop()" class="scroll-up-button, active">
<span></span>
<p style="display: none;">Scroll Down</p>
</a>
</main>
</ng-container>

View File

@ -0,0 +1,12 @@
main .container {
padding-top: 10px;
}
.paragraph {
width: 100%;
}
.paragraph p, .paragraph ol {
margin-bottom: 15px;
font-size: 0.9em;
}

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { PrivacyComponent } from './privacy.component';
describe('PrivacyComponent', () => {
let component: PrivacyComponent;
let fixture: ComponentFixture<PrivacyComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [PrivacyComponent]
})
.compileComponents();
fixture = TestBed.createComponent(PrivacyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,12 @@
import {Component} from '@angular/core';
@Component({
selector: 'app-privacy',
standalone: false,
templateUrl: './privacy.component.html',
styleUrl: './privacy.component.scss'
})
export class PrivacyComponent {
scrollService: any;
}

View File

@ -1,5 +1,5 @@
<ng-container>
<app-header [current_page]="'rules'" background_image="/public/img/backgrounds/trees.jpg" height="460px">
<app-header [current_page]="'rules'" height="460px" background_image="/public/img/backgrounds/trees.jpg">
<div class="title" header-content>
<h1>Server Rules</h1>
<h2>We aim to be an inclusive community server where players of all ages can find something to enjoy.</h2>
@ -255,7 +255,7 @@
</div>
</div>
</section>
<a href="#top" id="scroll-up-button">
<a (click)="this.scrollService.scrollToTop()" class="scroll-up-button, active">
<span></span>
<p style="display: none;">Scroll Down</p>
</a>

View File

@ -1,21 +1,6 @@
@media (max-width: 1000px) {
main .container {
text-align: left;
}
.list {
text-align: left;
}
}
@media (max-width: 670px) {
main .container {
text-align: center;
}
.list {
margin-left: 50px;
}
.paragraph {
width: 100%;
margin-bottom: -25px;
}
.highlighted-content {
@ -40,6 +25,10 @@
transition: 0.5s ease;
}
.full-page-list li {
padding-bottom: 10px;
}
.full-page-list-2 {
margin-left: 70px;
font-family: 'opensans', sans-serif;
@ -53,6 +42,31 @@
transition: 0.5s ease;
}
.hide {
display: none;
}
.copy-link {
cursor: pointer;
}
// Different resolution changes
@media (max-width: 1000px) {
main .container {
text-align: left;
}
.list {
text-align: left;
}
}
@media (max-width: 670px) {
main .container {
text-align: center;
}
.list {
margin-left: 50px;
}
}

View File

@ -7,5 +7,5 @@ import {Component} from '@angular/core';
styleUrl: './rules.component.scss'
})
export class RulesComponent {
scrollService: any;
}

View File

@ -0,0 +1,34 @@
<ng-container>
<app-header [current_page]="'privacy'" height="250px" background_image="/public/img/backgrounds/trees.jpg">
<div class="title" header-content>
<h1 class="titleColor">Altitude Socials</h1>
</div>
</app-header>
<main>
<section class="darkmodeSection">
<div class="socialContainer" style="padding-top: 50px;">
<a href="https://discord.com/invite/alttd"><img class="socialIcon" ngSrc="/public/img/logos/discordsocial.png"
title="discord.gg/alttd" alt="Altitude Discord" height="150"
width="150" style="width: 150px;"></a>
<a href="https://www.tiktok.com/@alttdmc"><img class="socialIcon" ngSrc="/public/img/logos/tiktoksocial.png"
title="alttdmc" alt="Altitude Discord" height="150" width="150"
style="width: 150px;"></a>
</div>
<div class="socialContainer">
<a href="https://www.instagram.com/alttdmc/"><img class="socialIcon"
ngSrc="/public/img/logos/instagramsocial.png"
title="alttdmc" alt="Altitude Discord" height="150"
width="150" style="width: 150px;"></a>
<a href="https://twitter.com/alttdmc"><img class="socialIcon" ngSrc="/public/img/logos/twittersocial.png"
title="alttdmc" alt="Altitude Discord" height="150" width="150"
style="width: 150px;"></a>
</div>
<div class="socialContainer" style="padding-bottom: 50px;">
<a href="https://www.youtube.com/c/alttd"><img class="socialIcon" ngSrc="/public/img/logos/youtubesocial.png"
title="Altitude Community" alt="Altitude Discord" height="150"
width="150" style="width: 150px;"></a>
</div>
</section>
</main>
</ng-container>

View File

@ -0,0 +1,32 @@
main .socialContainer {
padding: 20px 0;
}
.socialContainer {
width: 80%;
max-width: 1020px;
display: flex;
align-items: center;
margin: auto;
justify-content: center;
}
.socialIcon {
max-width: 150px;
width: 100%;
padding: 0 50px 0 50px;
transition: transform 0.2s ease-in-out;
}
.socialIcon:hover {
transform: scale(1.1);
}
//Different resolution changes
@media (max-width: 500px) {
.socialIcon {
max-width: 120px;
width: 100%;
padding: 0 20px 0 20px;
}
}

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { SocialsComponent } from './socials.component';
describe('SocialsComponent', () => {
let component: SocialsComponent;
let fixture: ComponentFixture<SocialsComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [SocialsComponent]
})
.compileComponents();
fixture = TestBed.createComponent(SocialsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,11 @@
import {Component} from '@angular/core';
@Component({
selector: 'app-socials',
standalone: false,
templateUrl: './socials.component.html',
styleUrl: './socials.component.scss'
})
export class SocialsComponent {
scrollService: any;
}

View File

@ -0,0 +1,44 @@
<ng-container>
<app-header [current_page]="'rules'" height="460px" background_image="/public/img/backgrounds/staff.png">
<div class="title" header-content>
<h1>Staffing Team</h1>
<h2>The team that makes Altitude happen. Your owners, admins, moderators, and trainees are all working together to
create Altitude, to create home. This is where the magic happens.</h2>
</div>
</app-header>
<main>
<section class="darkmodeSection">
<div class="container" style="padding: 50px 0 0 0; justify-content: center;">
<h2 class="sectionTitle">Management</h2>
<div class="member">
<img ngSrc="https://crafatar.com/avatars/55e46bc32a294c53850fdbd944dc5c5f?overlay"
alt="akastijn's Minecraft skin" height="160" width="160" style="width: 160px;">
<h2>akastijn</h2>
<p>Owner</p>
</div>
<div class="member">
<img ngSrc="https://crafatar.com/avatars/0b06c1b9ae5845d5af60731e4c788dc8?overlay"
alt="akalexu's Minecraft skin" height="160" width="160" style="width: 160px;">
<h2>akalexu</h2>
<p>Manager</p>
</div>
</div>
</section>
<section class="darkmodeSectionThree">
<div class="container" style="padding: 50px 0 0 0; justify-content: center;">
<h2 class="sectionTitle">Admins</h2>
</div>
</section>
<section class="darkmodeSection">
<div class="container" style="padding: 50px 0 0 0; justify-content: center;">
<h2 class="sectionTitle">Head Moderators</h2>
</div>
</section>
<section class="darkmodeSectionThree">
<div class="container" style="padding: 50px 0 0 0; justify-content: center;">
<h2 class="sectionTitle">Moderators</h2>
</div>
</section>
</main>
</ng-container>

View File

@ -0,0 +1,21 @@
.sectionTitle {
flex: 0 0 100%;
text-align: center;
padding-bottom: 20px;
font-size: 2em;
}
.member {
width: 33%;
min-width: 250px;
padding-bottom: 50px;
text-align: center;
}
.member img {
padding-bottom: 15px;
}
.member p {
font-family: 'opensans-bold', sans-serif;
}

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { TeamComponent } from './team.component';
describe('TeamComponent', () => {
let component: TeamComponent;
let fixture: ComponentFixture<TeamComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [TeamComponent]
})
.compileComponents();
fixture = TestBed.createComponent(TeamComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,11 @@
import {Component} from '@angular/core';
@Component({
selector: 'app-team',
standalone: false,
templateUrl: './team.component.html',
styleUrl: './team.component.scss'
})
export class TeamComponent {
scrollService: any;
}

View File

@ -0,0 +1,144 @@
<ng-container>
<app-header [current_page]="'terms'" height="250px" background_image="/public/img/backgrounds/trees.jpg">
<div class="title" header-content>
<h1 class="titleColor">Terms of Use</h1>
</div>
</app-header>
<main>
<section class="darkmodeSection">
<div class="container">
<div class="paragraph">
<p>Last updated: April 6th, 2025</p>
<p>Welcome to Altitude! These Terms of Use (“Terms”) is a binding agreement between you and the Altitude
Community (a group consisting of server owner and staffing team members) and our subsidiaries (collectively
“we”, or "Altitude"). These Terms describe the manner in which you may use our services. Any use of our
Services will constitute your acceptance of these Terms as well as our <a [routerLink]="['/privacy']">Privacy
Policy</a>.
If you do not agree to our Privacy Policy or Terms of Use, please do not use our Services. Thank you!</p>
<p>Also, please note that Altitude is not affiliated with Mojang and is run independently by the server owner.
Any questions or concerns should be directed to our support team at <a [routerLink]="['/contact']">alttd.com/contact</a>.
</p>
</div>
<div class="paragraph">
<h2>Fair Use</h2>
<p>Our Minecraft server is governed under the Minecraft EULA (End User License Agreement). The Minecraft EULA
states that everyone who accesses our server must have fair and reasonable access to all parts of the game
and server. Hacking, duping, or using modifications to have an advantage over other players is not allowed
and will result in termination of access to the server. Vanilla exploits that all users are capable of using
with a vanilla copy of the game are generally allowed, but can be restricted or prohibited at our
discretion. By joining our Minecraft server you have agreed to the Minecraft EULA and to <a
[routerLink]="['/rules']">our server rules</a>.
You should read the Minecraft EULA before joining any Minecraft server at <a
href="https://www.minecraft.net/en-us/eula">minecraft.net/en-us/eula</a>.</p>
<p>Any actions that are interpreted to have negative intentions towards another person using our services, or
towards the services themselves, could result in termination of access to our services. Final interpretation
of actions performed by any person using our services, and choice of correction for said actions, is at the
discretion of our staff. This decision can only be overridden by any member of the <a
[routerLink]="['/team']">staffing
team</a> here on Altitude.</p>
</div>
<div class="paragraph">
<h2>Appropriate Use</h2>
<p>All of the services we offer are intended for a mature audience. We do not guarantee that the content found
on any of our services will be appropriate for younger audiences. That said, we want to highlight the term
"mature". We believe that part of maturity is knowing what is appropriate, and what isn't, for each
individual circumstance. For example, you will not find any set rules on profanity for any of our services.
We reserve the right to determine, at our discretion, what is appropriate and what is not in every
circumstance. Furthermore, we reserve the right to determine appropriate correction of inappropriate actions
by anyone using our services.</p>
<p>We want to provide a server that is appropriate for all ages, while still keeping a mature feel that is
welcoming to an older audience. Please help us maintain this balance. We are a place for everyone to come
together, and many parents would like a safe environment for their children to play as well. Thank you.</p>
</div>
<div class="paragraph">
<h2>Intellectual Property Rights</h2>
<p>By posting or creating content of any form on any of our services you grant us a license to modify,
commercialize, or delete your content at our discretion. We may commercialize your content by using the
content in any form of advertising that we do. We will NEVER sell your content or the rights to your
content, only use it to promote Altitude. Also, please keep our services clean by only creating appropriate
content. We may remove any content you create if we determine it to be inappropriate! </p>
<p>Second, you can request a copy of your content by contacting us. Only the author of the content will be
allowed to request a copy. We will always provide a copy of your content as long as we still have the
ability to do so (that is, if is still exists!). We may retain a copy of anything you create, even if you
delete it (often in the backups of our Minecraft server), so be careful what you create!</p>
<p>Finally, if you believe your intellectual property rights have been infringed upon you may contact us at
<a [routerLink]="['/contact']">alttd.com/contact</a>. Please note that this only applies for
content that was originally created outside of our services.</p>
</div>
<div class="paragraph">
<h2>Donations and Purchases</h2>
<p>Please note that in-game items, ranks, and other stuff received from donating (collectively referred to as
"perks") are subject to change as our services change. Our server is constantly changing with features being
added and removed, and the perks donors receive may change with it. We make no guarantee that the perks you
receive today will always be available.</p>
<p>Any package, rank, or other perk that is defined as "lifetime" is intended to last the lifetime of the
service they apply to, not the lifetime of the receiver of the perks. Lifetime perks may be terminated if
they are abused, please see "Termination of Perks".</p>
<p>Additionally, abuse of any of your perks will result in termination of some or all of your perks. "Abuse"
of a perk includes using the perk to harm our services or individuals using our services (such as taunting a
player about how you have a special perk and they don't), or finding a way to exploit the perk and use it in
a manner that was not intended (such as changing your nickname to impersonate other players).</p>
<p>We will not transfer the perks you've received from donating to another account. Please do not attempt to
give away your perks, or sell them. If you wish to give someone a perk as a gift you use the "Gift This
Package" option when you add an item to your cart in the store. We will make an exception of this rule for
users who have their Minecraft accounts hacked, stolen, or lost. If you are using a new Minecraft account
and need perks transferred please contact us at <a [routerLink]="['/contact']">alttd.com/contact</a>.
</p>
<p>For Stripe transactions only: temporary packages, perks or other including but not limited to the McMMO
boosters, are non-refundable. Packages, perks, or other that do not expire can be refunded up to 14 days
from the day of purchase. Lifetime Ranks can be refunded within 90 days of purchase if the perks of the
purchased rank change after your purchase date. After this time period we will not refund any perks,
packages, or other purchased.</p>
<p>Any donations made through Patreon are non-refundable. You can cancel your Patreon donation at any time.
You will continue to have access to your perks until the next billing date.</p>
</div>
<div class="paragraph">
<h2>Termination and Limitation</h2>
<p>We may terminate or suspend any user's access to one or all of our services immediately, without prior
notice or liability, for any reason. This includes failure to follow these Terms! A termination of access
will prohibit you from accessing one or all of our services. Termination of access on our Minecraft Server
(a server ban) can be appealed by <a [routerLink]="['/appeal']">submitting a form here</a>. Submitting
an appeal does not guarantee a lift of the termination. We will attempt to process your appeal within 48
hours of submitting at which point it will be decided if your termination is lifted or not.</p>
<p>We also hold the right to put your use of any of our services under limitation without prior notice or
liability, for any reason. Limitations can be in any form up to complete termination of access. Limitations
on the Minecraft server include, but are not limited to, being "jailed", muted, or having specific features
taken away from your Minecraft account on the server.</p>
</div>
<div class="paragraph">
<h2>External Services</h2>
<p>Altitude uses many external services to provide additional services or features for you. Whenever you are
using any of these external services you are bound by the respective service's Terms and Condition. Please
be aware that Altitude will not be responsible or liable for any damage or loss caused by, or in connection
with, the use of any external services. You should always read the Terms and Conditions of any service you
use.</p>
<p>This means that by joining our Minecraft server you have agreed to Minecraft's Terms of Use (<a
href="https://www.microsoft.com/en-us/legal/terms-of-use">microsoft.com/en-us/legal/terms-of-use</a>), and
the Minecraft EULA (<a
href="https://www.minecraft.net/en-us/eula">minecraft.net/en-us/eula</a>).
</p>
</div>
<div class="paragraph">
<h2>Accuracy of Information</h2>
<p>All the information on our website and services is published in good faith and is for general information
purposes only. Altitude does not make any warranties about the completeness, reliability or accuracy of any
information found on our website or services. Any action you take upon the information you find on any of
our services is strictly at your own risk. Altitude will not be responsible or liable for any damage or loss
caused by, or in connection with, the use of our website or services.</p>
</div>
<div class="paragraph">
<h2>Changes of Terms</h2>
<p>Our Terms may change from time to time. We will post any Policy changes on this page. Please check back
periodically to view changes to our Terms. By continuing to access or use our website or services after any
revisions become effective, you agree to be bound by the revised Terms. If you do not agree to the new
Terms, please stop using our website and services.</p>
</div>
</div>
</section>
<a (click)="this.scrollService.scrollToTop()" class="scroll-up-button, active">
<span></span>
<p style="display: none;">Scroll Down</p>
</a>
</main>
</ng-container>

View File

@ -0,0 +1,12 @@
main .container {
padding-top: 10px;
}
.paragraph {
width: 100%;
}
.paragraph p {
margin-bottom: 15px;
font-size: 0.9em;
}

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { TermsComponent } from './terms.component';
describe('TermsComponent', () => {
let component: TermsComponent;
let fixture: ComponentFixture<TermsComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [TermsComponent]
})
.compileComponents();
fixture = TestBed.createComponent(TermsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,12 @@
import {Component} from '@angular/core';
@Component({
selector: 'app-terms',
standalone: false,
templateUrl: './terms.component.html',
styleUrl: './terms.component.scss'
})
export class TermsComponent {
scrollService: any;
}

View File

@ -212,7 +212,7 @@ ol li {
line-height: 1.5em;
}
.paragraph h2, .paragraph h3, .paragraph p, .columnparagraph h2, .columnparagraph p {
.paragraph h2, .paragraph h3, .paragraph p, .columnParagraph h2, .columnParagraph p {
padding-bottom: 15px;
}
@ -221,6 +221,13 @@ tr {
transition: 0.5s ease;
}
main .container {
padding: 80px 0;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
.container {
width: 80%;
max-width: 1020px;
@ -229,7 +236,6 @@ tr {
align-items: center;
}
.title {
height: calc(100% - 110px);
display: flex;
@ -250,6 +256,35 @@ tr {
font-family: 'minecraft-text', sans-serif;
}
// Column styling
.columnSection {
width: 80%;
padding-top: 60px;
max-width: 1020px;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
flex: 1 0 auto;
}
.columnContainer {
width: 50%;
box-sizing: border-box;
padding: 0 15px;
}
.columnParagraph {
line-height: 1.5em;
padding-bottom: 30px;
}
.columnParagraph img {
padding: 30px 0;
display: block;
margin: 0 auto;
}
// Call to Action button
.button-outer {
display: inline-block;
font-family: 'minecraft-text', sans-serif;